• Domingo 22 de Diciembre de 2024, 08:34

Autor Tema:  Ayuda Programa Pascal  (Leído 2581 veces)

MerNim

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Ayuda Programa Pascal
« en: Viernes 8 de Abril de 2005, 16:39 »
0
Quería saber si alguien me podría ayudar con un programa que tengo que hacer para aprobar una asignatura y que no me sale ni a la de cien.
Lo agradecería muchísimo.
Un saludo.

ErWillem

  • Miembro activo
  • **
  • Mensajes: 55
    • Ver Perfil
Re: Ayuda Programa Pascal
« Respuesta #1 en: Viernes 8 de Abril de 2005, 22:44 »
0
Creo que lo primero que nececitas hacer para poder ayudarte es publicar tus dudas, aqui nadie es adivino para saber en que se te puede ayudar. Di que necesitas y haremos lo posible por aclarar tus dudas.
Enlace a mis programas realizados durante mis estudios.
--------------------------------------------------------------
Si la vida te da limones, pide sal y tequila.

La fe mueve montañas, pero hay que pagar.

El ser humano es el unico que tropieza dos veces con la misma piedra.

MerNim

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Ayuda Programa Pascal
« Respuesta #2 en: Viernes 8 de Abril de 2005, 23:06 »
0
Ejercicio que debe ser resuelto utilizando los esquemas de composición de acciones secuencial, condicional e iterativo.
Las reglas de divisibilidad permiten conocer si un nº es divisible por otro sin necesidad de realizar la división. Las reglas de divisibilidad de números pequeños más conocidas son las siguientes:
Divisibilidad por 3: un nº es divisible por 3 si la suma de todos los dígitos que lo componen es divisible por 3.
Divisibilidad por 4: un nº es divisible por 4 si sus dos últimos dígitos son a su vez divisibles por 4.
Divisibilidad por 5: un nº es divisible por 5 si su último dígito es divisible por 5.
Divisibilidad por 7: para averiguar si un nº es divisible por 7 se sigue el proceso siguiente: hallamos un nuevo nº tomando el último dígito del original multiplicado por dos y substrayéndolo del resto del nº original. Si este nuevo nº es mayor que 10 volveremos a realizar las operaciones anteriores sobre el nuevo nº hasta que nos encontremos uno estrictamente menor que 10. Si éste último nº es igual a 7 ó 0, el nº de partida es divisible por 7.
Divisibilidad por 8: un nº es divisible por 8 si sus tres últimos dígitos son divisibles por 8.
Divisibilidad por 9: un nº es divisible por 9 si la suma de todos sus dígitos es divisible por 9.
Divisibilidad por 10: un nº es divisible por 10 si termina en 0.
Divisibilidad por 11: un nº es divisible por 11 si la diferencia entre la suma de los dígitos que ocupan lugar par y la suma de los dígitos que ocupan lugar impar es 0 o divisible por 11.

El ejercicio propuesto consiste en crear un programa en Pascal que pida por teclado un nº positivo mayor que 0 y un divisor de los mencionados anteriormente. Utilizando únicamente las reglas de divisibilidad, el programa debe ser capaz de determinar si dicho nº es divisible por el divisor introducido por pantalla y comunicarlo al usuario. El programa deberá continuar pidiendo divisores hasta que el usuario decida terminar el programa. Si se introduce un divisor que no está en la lista anterior, se le indicará al usuario que no es posible hallar la divisibilidad para ese nº.
Todas las entradas de teclado se validarán convenientemente.
En ciertas partes del programa será necesaria la utilización de la función abs. Únicamente está permitida la utilización de las funciones mod y div con el nº 10 (no se puede hacer n div 3, n div 8, sólo está permitido n div 10).

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Ayuda Programa Pascal
« Respuesta #3 en: Sábado 9 de Abril de 2005, 00:09 »
0
En estre foro no se hacen tareas.  :angry:

¿Tenés dudas puntuales? ;)

ErWillem

  • Miembro activo
  • **
  • Mensajes: 55
    • Ver Perfil
Re: Ayuda Programa Pascal
« Respuesta #4 en: Sábado 9 de Abril de 2005, 00:29 »
0
Bueno, como no se que nivel de experiencia tienes te explicaré como si fueras nuevo, y primero que nada no te pienso hacer todo el trabajo, la idea es que tu mismo aprendas y hagas tu proyecto, pero si puedo ayudarte en lo que creo podría darte más problemas.

Todo buen programador debe saber que tipo de dato utilizar dependiendo del caso, la idea es consumir el menor espacio de memoria posible para que el programa corra más fluido, aunque se puede decir que para la rapidez de las maquinas de ahora es casi imperceptible trabajando con pascal pero es lo más recomendable.

Basado en esto y en el programa planteado te recomiendo que para los datos más grandes utilices LongInt en lugar de Integer para que tenga un rango mayor (integer acepta maximo 5 cifras, longint acepta hasta 10), y para los datos más pequeños puedes utilizar byte (que abarca de 0 a 255) como en el caso de obtener cifras o sumar cifras que no guardaran valores muy altos.

Otra cosa importante, ya que trabajamos con valores numéricos, en lugar de cadenas, debes utilizar divisiones en base a 10, "mod 10" y "div 10" segun el caso para obtener o quitar cifras respectivamente.

OK si no entendiste mucho lo de las diviciones aqui te va el codigo para obtener una cifra (contando de izquierda a derecha "<-") y sumar cifras:

Código: Text
  1. Function SacarCifra(n:Longint;c:Byte):Byte;
  2.  var i:byte;
  3. begin
  4.   if (c&#60;0) or (c&#62;10) or (n&#60;0) then {Si algun valor es invalido}
  5.   begin
  6.     SacarCifra:=0;{se retorna 0}
  7.     exit
  8.   end;
  9.   for i:=c-1 downto 1 do n:=n div 10;{Elimina cifra por cifra}
  10.   n:=n mod 10;  {Luego ignora las demas cifras sobrantes}
  11.   SacarCifra:=byte(n){convierte manualmente el valor en &#34;byte&#34;}
  12. end;
  13.  
  14. Function SumarCifras(n:Longint):Byte;{Sin utilizar &#34;Sacarcifra&#34;}
  15.  var suma:byte;
  16. begin
  17.   if n&#60;0 then {Si el valor no es valido}
  18.   begin
  19.     SumarCifra:=0;{se retorna 0}
  20.     exit
  21.   end;
  22.   suma:=0;
  23.   while n&#62;0 do {Mientras el valor sea positivo}
  24.   begin
  25.     suma:=suma + (n mod 10);{se suma la primera cifra}
  26.     n:=n div 10;{y se elimina para continuar con la siguiente}
  27.   end;
  28.   SacarCifra:=byte(suma)
  29. end;
  30.  
  31.  

Ya con esto puedes resolver los casos 3, 5, 9 y 10, el mismo principio lo puedes utilizar para obtener los demás, solo usa tu imaginación, por ejemplo para el caso 4 que son 2 cifras utiliza: 10*10 = 100, es decir "mod 100", ya no te doy mas pistas has lo que puedas tu solo y si de verdad necesitas ayuda estamos para servirte.

Bye  :hola:
Enlace a mis programas realizados durante mis estudios.
--------------------------------------------------------------
Si la vida te da limones, pide sal y tequila.

La fe mueve montañas, pero hay que pagar.

El ser humano es el unico que tropieza dos veces con la misma piedra.