• Lunes 23 de Diciembre de 2024, 02:45

Autor Tema:  Duda :s?  (Leído 1460 veces)

delfros

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Duda :s?
« en: Miércoles 30 de Mayo de 2007, 18:39 »
0
tengo una duda con el siguiente programa, soy nuevo con el ciclo for y no consigo la falla del siguiente programa.

NOTA: el programa me funciona para calcular valores de factoriales entre 1 y 7, pero al ingresar como valor de n= 8 me da un valor errado (-25216) y al ingresar n= 25 me da 0,

program factorial;
var n,i,fact: integer;

begin
write ('Ingrese el numero al cual le desea calcular su factorial:');
readln (n);
fact:=1;
for i:=1 to n do
fact:=fact*i;
writeln (' El factorial de ',n,' es: ',fact);
readln;
end.


Agradeceria que me comunicaran a que se debe la falla

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Duda :s?
« Respuesta #1 en: Jueves 31 de Mayo de 2007, 00:09 »
0
Es simple. En informática, a diferencia de las matemáticas 100% teóricas, tienes que considerar también que existen límites de rango y de precision. En este caso el tipo entero que usas es de 16 bits con signo (integer), por lo tanto no puede representar un valor mayor a 32767, luego como 8! es mayor al limite anterior tu programa no funcionará a menos que utilices un tipo de dato aplicable al problema que tenga mayor capacidad, por ejemplo un tipo de numero flotante como double.

Nota: Dependiendo del compilador el tipo integer puede ser de 16 o 32 bits, en este caso claramente es de 16bits.