SoloCodigo

Programación General => Pascal => Mensaje iniciado por: delfros en Miércoles 30 de Mayo de 2007, 18:39

Título: Duda :s?
Publicado por: delfros en Miércoles 30 de Mayo de 2007, 18:39
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
Título: Re: Duda :s?
Publicado por: Amilius en Jueves 31 de Mayo de 2007, 00:09
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.