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 JOSE');
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
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 JOSE');
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


0