buenaas!estoy en 1º de inórmatica de sistemas y tengo que hacer un programa que me encuentre el primer numero perfecto de una lista,la verdad es que nunca he programado y aunque llevo un mes de clase me suena todo a chino :S si alguien pudiese mirarme o corregirme lo que tengo hecho..gracias
el enunciado es este:"En el fichero de entrada hay grabada una secuencia de números enteros positivos. Codifíquese un programa Pascal para determinar la posición ocupada por el primer número perfecto. La posición
del número queda definida por dos valores numéricos: el número de línea y el lugar del número perfecto dentro de la línea.Si en el fichero no existe el número buscado se grabará el siguiente mensaje: ‘No existen números perfectos en el fichero’.Se dice que un número es perfecto si es igual a la suma de sus divisores (ejemplo 6 = 1+2+3)
Resolución:
La solución se ajustará a las siguientes especificaciones:
Especificaciones de entrada:
- Se utilizará un fichero de texto para la entrada de datos que debe llamarse datosp1.txt
En el código Pascal este fichero debe estar direccionado a la unidad a, es decir la sentencia assign
debe ser: assign (nombre_del_fichero, 'a :\datosp1.txt').
- Puede existir más de un número por línea y suponemos que todos los números están grabados correctamente, es decir, son enteros positivos y no existen en el fichero líneas en blanco.
Especificaciones de salida:
- Se utilizará el fichero estándar de salida: Output.
- Se recuerda que en la primera línea del Output aparecerán los datos: número de
matrícula, apellidos y nombre del alumno que realiza la práctica."
Y este es el programa que yo 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