Pascal/Turbo Pascal - numero perfecto

 
Vista:

numero perfecto

Publicado por MaRy (3 intervenciones) el 05/11/2006 15:10:51
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 me pudiese explicar como hacerlo..gracias.
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:numero perfecto

Publicado por Diego Romero (996 intervenciones) el 05/11/2006 16:57:08
Este ejercicio me plantea muchos problemas ya que por un lado la solución es trivial, solo tomas el número y comparas si es igual a 6 o a 28 o a 496 o a 8128 que son los primeros cuatro números perfectos conocidos, el quinto es 33550336 que cabe en un tipo longint pero el sexto ya no cabe en ningún tipo de dato que Pascal pueda manejar (el 8589869056, a menos que trabajes con strings lo cual no es descabellado para este caso).
Pero por otro lado sospecho que quien te dio a realizar este ejercicio quiere que practiques algunas operaciones matemáticas.
Me temo que tendrás que preguntar qué aproximación al problema es válida para resolverlo.
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

RE:numero perfecto

Publicado por MaRy (3 intervenciones) el 05/11/2006 17:48:09
antes de nada,gracias por responder diego..sospechas bien tendria que realizar operaciones matematicas para que de la lista de numeros perfectos que se encuentran en un archivo de texto de entrada me encuentre el primero de ellos..
no pretendo que me hagas el programa pero si puedieses darme algunas indicaciones o "pistas" de como encaminarlo te lo agradecería porque ando bastante perdida.

he estado mirando lo que has dicho de que el sexto numero perfecto ya no cabe en ningun tipo de dato de pascal...
"Hoy se conocen veinticuatro “números perfectos”, de longitudes verdaderamente inverosímiles: el vigésimo cuarto número perfecto tiene más de doce mil cifras."
..entonces la lista de numeros perfectos solo contendría los 6 primeros?
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

RE:numero perfecto

Publicado por Diego Romero (996 intervenciones) el 05/11/2006 18:51:35
En ese caso lo que corresponde es realizar un programa que calcule la ecuación de Euclides para números perfectos. He estado consultando mis libros de matemáticas (los que están al fondo de mi bilioteca xD) y la ecuación es como esto:

(2^(n-1))*((2^n)-1)

para los cuatro primeros números perfectos.

Aunque no me parece la mejor forma de hacerlo ya que esa ecuación da el enécimo número perfecto y no te dice si un número es perfecto o no.

La definición de número perfecto dice que es número perfecto aquel en que la suma de sus divisores es igual al número dado. Por definición de división, los divisores son siempre menores al número dado excepto el propio número, pero este no se cuenta para la sumatoria.

Lo que nos lleva a otro problema: determinar cuáles son los divisores de un número. Otra vez, por definición, los divisores de un número son más cuanto más grande sea el número y esto implica que hay que almacenar una cantidad de datos que no conocemos (y esto sugiere que se deben usar listas dinámicas lo cual me parece demasiado avanzado para tí). Sin embargo podría encontrar un algoritmo donde no sea necesario almacenar los divisores de un número para luego hacer su sumatoria.

Estudiando mejor la definición de número perfecto llego a una conclusión suplementaria: el 1 y el 2 no pueden ser números perfectos ya que el 1 no tiene divisores (en el conjunto de los enteros) y el 2 tiene un único divisor, el 1, que evidentemente su sumatoria no da 2. Esta conclusión nos sirve para eliminar casos triviales.

Voy a escribir una pequeña función para comenzar:
function EsNumPerfecto(numero: Longint): boolean;
var
Sum: LongInt;
I: integer;
begin
EsNumPerfecto:=false; { asumo que no es perfecto por omisión }
if (numero > 2) then
begin
Sum:=0;
for i:=(numero - 1) downto 2 do { for regresivo }
if (numero mod i) = 0 then sum:=sum+i; { si el resto de la división es cero, entonces es divisor por lo tanto hay que sumarlo }
if Sum = Numero then EsNumPerfecto:=true; { si la sumatoria es igual al número evaluado, entonces es Número Perfecto }
end; { if }
end; { EsNumPerfecto }

Estoy seguro que este algoritmo se puede mejorar pero por amor a la claridad lo dejo como está.

Habiendo escrito una función que nos diga si un número es perfecto o no, podemos escribir las partes que nos faltan.

El ejercicio dice que los números a evaluar están en un archivo ¿de texto?, vamos a suponer que sí, y que cada línea del archivo contiene un solo número. Hay que leer ese archivo línea por línea.

program EsPerfecto;
uses crt;

var
Arch: Text;
Linea: string;
Numero: LongInt; { el número a evaluar }
C: integer; { auxiliar }

function EsNumPerfecto(num: Longint): boolean;
var
Sum: LongInt;
I: integer;
begin
EsNumPerfecto:=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 división es cero, entonces es divisor por lo tanto hay que sumarlo }
if Sum = Num then EsNumPerfecto:=true; { si la sumatoria es igual al número evaluado, entonces es Número Perfecto }
end; { if }
end; { EsNumPerfecto }

begin { principal }
Assign(Arch,'numeros.txt');
Reset(Arch);
while not Eof(Arch) do { mientras no sea fin de archivo... }
begin
ReadLn(Arch, Linea); { ...leer una línea del archivo }
Val(Linea, Numero, C); { convierte un string a integer/longint }
if C = 0 then
begin
if EsNumPerfecto(Numero) then
WriteLn('El número ',Numero,' es número perfecto.')
else
WriteLn('El número ',Numero,' NO es número perfecto.')
end
else WriteLn('El número ',Linea,' no es un número válido.');
end; { while }
Close(Arch);
end.

Para poner en ejecución este programa debes crear el archivo numeros.txt donde cada línea del archivo sea un número dentro del rango de los LongInt.

Coméntame lo que no entiendas...
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

RE:numero perfecto

Publicado por MaRy (3 intervenciones) el 06/11/2006 10:30:25
este sería el enunciado de la practica por sino me habia explicado bien,por si se os ocurre alguna cosa mas,gracias por responder diego y dario

PRÁCTICA 1 B.- Tipos simples y sentencias de control. Subprogramación.Para alumnos con apellido M..Z

Enunciado:
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.
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

RE:numero perfecto

Publicado por edison donis  (1 intervención) el 25/02/2008 16:59:26
como realizar programas basicos en pascal toda la teoria y como ser un mejor programador
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

RE:numero perfecto

Publicado por Dario (1 intervención) el 05/11/2006 18:58:06
Hola gente!

Por lo que leí, el ejercicio te pide solamente el primer numero perfecto, asi que tendrias que encontrarlo por medio de operaciones matematicas:

Como te piden solo el primer numero, podrias hacer un contador o una variable booleana que corte el ciclo cuando encuentre el primero. Por ejemplo tenes la variable "perfecto = false", y haces un ciclo repetitivo hasta que allas encontrado el primer numero perfecto (o sea, "perfecto = true").

Otra ayuda: un numero perfecto es un numero natural, que es igual a la suma de todos sus divisores excepto el mismo; esta definicion es la que tendrias que aplicar dentro de el ciclo repetitivo que te mensioné antes.

Espero que te alla servido, suerte!
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

RE:numero perfecto

Publicado por Yotuel (2 intervenciones) el 19/11/2006 16:31:22
No se si habre cometido algun fallo pero la funcion hecha en el pos de arriba no funciona bien.
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

numero perfecto

Publicado por David Sandoval (2 intervenciones) el 24/03/2009 15:10:12
hola amigos programadores
necesito realizar un programa que calcule si un numero es perfecto o no
xfa ayudenme
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

RE:numero perfecto

Publicado por jordan (1 intervención) el 09/09/2009 19:00:46
mira sos u mula no podes acer nada
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

RE:numero perfecto

Publicado por FELIX A.ABREU (1 intervención) el 04/11/2007 16:55:11
programa numero perfecto
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

RE:numero perfecto

Publicado por jose danilo (1 intervención) el 20/03/2010 01:58:49
quiero saber sobre numeros perfectos en pascal
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