[ayuda] Ejercicos Pascal (again)

Pues se trata de estes ejercicio
Múltiplos sinceros: Se denomina “múltiplos sinceros” a "los números que son múltiplos de un número base de una cifra y en los cuales la suma de sus cifras es también este mismo número base".
Por ejemplo, “múltiplos sinceros” del número base 2 son el 2, 20, 110, 200, 1.010, 1.100, 2.000, ...
Ya que el 20 es múltiplo de 2 y además la suma de sus cifras (2+0) da 2.
El 110 también es múltiplo de 2 y además la suma de sus cifras (1+1+0) da 2.
Otro ejemplo: “múltiplos sinceros” del número base 9 son el 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 108, 117, ...
Cuadrado de los números de 2 cifras acabados en 5:
El cuadrado de los números de dos cifras que terminan en 5 (por ejemplo 15, 25, 35, etc.) se puede hacer de manera muy rápida: "Multiplicando la decena propia por la siguiente y añadiendo un 25 detrás"
Ejemplos:
15²: multiplicamos su decena (1) por la siguiente (2), y obtenemos 1x2= 2 añadimos un 25 detrás y tenemos el 225, que es 15².
55² : 5 x 6 = 30, añadimos el 25 y sale 3.025 = 55²
65² : 6 x 7 = 42, añadimos el 25 y sale 4.225 = 65²
Números colegas:
Un número n es “colega” de una cifra d, si el número n empieza y termina por la cifra d.
Por ejemplo: El número n =101 es colega de la cifra d = 1
El número n = 22 es colega de la cifra 2
El numero n = 3012 NO es colega de la cifra d = 3
El número n = 12341 es colega de la cifra 1.
Práctica:
Dada esta información desarrollar un programa que:
Muestre un menú que permita escoger entre:
a) Múltiplos sinceros
b) Cuadrado de números de 2 cifras acabados en 5
c) Números colegas
d) Terminar
Si el usuario escoge la opción a) deberá solicitar dos números, correspondientes al número base y al mayor número (límite) que puede aparecer en la secuencia y mostrará los “múltiplos sinceros” de dicho número base hasta el límite. Por ejemplo, si introduce como número base el 2 y como límite el 1000 deben aparecer los números: 2, 20, 110, 200 ya que el siguiente “múltiplo sincero” que es 1010 supera el límite 1000.
Si el usuario escoge la opción b) nuestra aplicación le pedirá un número que termine en 5 y mostrará el cuadrado de dicho número usando el método descrito en el apartado de teoría.
Si el usuario elige la opción c) la aplicación le pedirá un número entero positivo (n) y un número de una única cifra (d) y escribirá en pantalla si el número n es “colega” de la cifra d.
El programa debe pedir opciones y realizar las tareas asignadas hasta que el usuario escoge la opción d), momento en el cual el programa terminará.

http://www.scribd.com/doc/43115903/practica-obligatoria2#

y es que como soy un paquete en esto de la programacion siempre me acaban ayudando... la implementacion de los subprogramas la tengo clara, lo que me cuesta muchisimo es la elaboracion de todos los subprogramas del ejercicio, el primero creo que lo llevo encaminado pero aun asi no termino de dar en el clavo y los dos restantes poco mas de lo mismo.

A ver si me podeis echar una mano (al cuello no [carcajad] )

Gracias de antemano
Salu2
Pregunta algo concreto, no esperes que vayamos al enlace del ejercicio (que además pones en un spoiler, para qué están los enlaces...), nos leamos el enunciado y te lo hagamos.
amuchamu escribió:Pregunta algo concreto, no esperes que vayamos al enlace del ejercicio (que además pones en un spoiler, para qué están los enlaces...), nos leamos el enunciado y te lo hagamos.

editado, a ver si mejor asi [oki]
Pregunta algo concreto, no esperes que nos leamos el enunciado y te lo hagamos.

En serio, trata de hacerlo y cuando no sepas algo, pregunta.
pues para el caso de los multiplos sinceros, no se como hacer para que me haga la suma de sus cifras, tengo una ligera idea, pero no se implementarla, haciendo el modulo y luego dividiendo entre 10 y luego compare con la base, pero no como para que repita la accion y luego los saque, no se si me explico. Esque es casi practicamente lo que pide el ejercicio por eso no te puedo especificar mas...

algo mas o menos asi he pensado
VAR
   i, base, limite, contador: integer

writeln(base);    {para que escriba directamente la base}
FOR i:=base TO limite DO
BEGIN
   contador:=0;
   {aqui las cuentas que no se}
   writeln(numero);
   ELSE
      contador:=contador+1;
END.
Para calcular la suma de las cifras de un número, copias el número en una variable auxiliar y mientras esa variable sea mayor que cero, vas sacando el resto de dividir por 10, lo sumas donde quieras y divides la auxiliar entre 10.

No sé para qué usas el contador dentro del for, no te hace falta.
amuchamu escribió:Para calcular la suma de las cifras de un número, copias el número en una variable auxiliar y mientras esa variable sea mayor que cero, vas sacando el resto de dividir por 10, lo sumas donde quieras y divides la auxiliar entre 10.

No sé para qué usas el contador dentro del for, no te hace falta.


no es eso lo que pide ciertamente el ejercicio, los numeros sinceros son los que partiendo de la base la suma de sus digitos es igual a esa base, lo explica en el ejercicio. A lo que yo me refiero es a hacer que el programa sume sus cifras y mire si es igual a la base entonces si es asi que lo escriba, y de esta forma pasando por todos los numeros desde la base hasta el numero limite introducido por el usuario, llevo ya un buen rato y no hay forma a ver si alguien me echa una mano
Ya sé que no pide la suma de las cifras del número ¬¬

Primero calculas la suma de las cifras del número.
Si la suma es igual a la base, compruebas si el número es múltiplo de la base y, si lo es, lo imprimes.

Una vez que lo sepas hacer para un número, hacerlo para todos es sólo meterlo en un bucle.
amuchamu escribió:Ya sé que no pide la suma de las cifras del número ¬¬

Primero calculas la suma de las cifras del número.
Si la suma es igual a la base, compruebas si el número es múltiplo de la base y, si lo es, lo imprimes.

Una vez que lo sepas hacer para un número, hacerlo para todos es sólo meterlo en un bucle.


te juro que tengo un cacao que no veas, gracias por la ayuda en primer lugar pero esque no doy con ello, para calcular por ejemplo el 135 el 3 y 5 si, pero para el uno acabo con la division puesto que el modulo no lo puedo sacar, y luego meterlo en el bucle para que se repita tantas veces hasta llegar al limite tampoco lo consigo
num MOD 10
realn(j);
num DIV 10;
readln(num);
num MOD 10;
readln(k);
suma:= j + k;


¿asi?
No entiendo ese código, la verdad :P

Para calcular la suma de las cifras de un número:

suma = 0
MientrasQue n > 0 hacer
   suma = suma + n (mod 10)
   n = n / 10
FinMQ


Hazlo en un papel para que veas los valores de suma y n en cada iteración, verás que es sencillo.
9 respuestas