Pascal/Turbo Pascal - Una ayudita

 
Vista:

Una ayudita

Publicado por edu004 (3 intervenciones) el 22/12/2006 16:58:42
Saludos a todos. Estoy tratando de hacr un progrma que me diga el primer numero perfecto apartir de un archivo .TXT. Pero no logro hacer que me funcione bien. A continuacion pongo lo que he hecho.

PROGRAM PrimerNumeroPerfecto (fentrada,output);

USES crt;
VAR
fentrada: text;
linea: string;
numero: longint; (*numero a evaluar*)
c: integer; (*auxiliar*)

FUNCTION EsNumeroPerfecto(num: Longint): boolean;
VAR
Sum: Longint;
I: integer;
BEGIN
EsNumeroPerfecto:=false; (*asumo que no es perfecto por omisi¢n*)
IF (num > 2) then
BEGIN
Sum:=0;
FOR i:=(num - 1) downto 2 DO (*for regresivo*)
IF (num mod i) = 0
THEN sum:=sum+i; (*si el resto de la division es cero, entonces es divisor por lo tanto hay que sumarlo*)
IF sum = num
THEN EsNumeroPerfecto:=true; (*si la sumatoria es igual al numero evaluado, entonces es N£mero perfecto*)
END; (*if*)
END; (*EsN£meroPerfecto*)

BEGIN (*principal*)
WriteLn ('MATRICULA:BD0183 APELLIDOS:REBOLLAR ESTEBAN NOMBRE:MARIA JOSE');
assign (fentrada, 'datosp1.txt');
Reset (fentrada);
while not Eof(fentrada) do (*mientras no sea fin de fichero..*)
BEGIN
ReadLn(fentrada, linea); (*..leer una linea del fichero*)
Val(linea, numero, c); (*convierte un string a integer/longint*)
if c = 0 then
BEGIN
if EsNumeroPerfecto(numero) then
WriteLn('El n£mero' ,numero,'es n£mero perfecto.')
else
WriteLn('El n£mero' ,numero,'no es un n£mero perfecto.')
end
else WriteLn('El numero ',linea,'no existen n£meros perfectos en el fichero.')
END; (*while*)
CLOSE(Fentrada);
END.
El progrma me compila perfecto y se puede ejecutar.

Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Una ayudita

Publicado por Lucia Vilar (17 intervenciones) el 09/01/2007 10:33:56
Hola.
Ese mismo problema le tuve que realizar yo, y hallé la manera de resolverlo sin tener que hallar los divisores del numero y despues hacer la suma.
Yo lo encontré mas facil a ver que te parece.

Coges el numero que lees del fichero, miras si es par. Si lo es, empieza a dividir por 2, en el momento en el que el resto deje de ser 0, te quedas con ese numero, y sumas desde 1 hasta dicho numero. Si esa suma es igual a tu numero inicial, entonces el numero es perfecto. Si no coincide, no lo es. y tampoco será numero perfecto si es un impar.

Por ejemplo:

numero: 34
34 / 2 = 17 (resto = 0 )
17/ 2 = 8 (resto 1)

sumariamos desde 1 hasta 17 y evidentemente, no es 34.

Numero: 28

28 / 2 = 14 (resto = 0)
14 / 2 = 7 (resto = 0)
7 / 2 = 3 (resto = 1)

Como el resto deja de ser 0, hacemos la suma 1+2+3+4+5+6+7 = 28, y como es igual a nuestro numero inicial, el numero sera perfecto.

Espero que te sirva de ayuda. Es más facil resolverlo así.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar