Autor |
Mensaje |
ezequiel.grillo
Nivel 4
Registrado: 11 Abr 2011
Mensajes: 74
Carrera: Informática y Sistemas
|
|
Otra cosa q no entiendo bien es porque haces numero div contador = 0
|
|
|
|
|
|
|
|
|
ezequiel.grillo
Nivel 4
Registrado: 11 Abr 2011
Mensajes: 74
Carrera: Informática y Sistemas
|
|
No quiero seguir jodiendo pero la verdad q no me sale el programa.
Trato de aplicar lo q me dijo kartlan pero me falla en el step y ya me estoy volviendo loko(nunka explicaron step).
Si alguno puede por favor poner el codigo como tendria q quedar maso menos el programa con la restriccion q me pide el profe se lo voy a agradecer.
Saludss
|
|
|
|
|
|
|
|
|
loonatic
Nivel 9
Edad: 32
Registrado: 16 May 2009
Mensajes: 1256
Carrera: Sistemas
|
|
Hola ezequiel, mirá, yo de Pascal no se nada, pero te hice esto en Python, es super facil de entender (sintacticamente hablando), asi que espero que te sirva.
Lo que hace el programa es, luego de pedir un numero, hacer un "for" que vaya almacenando en un contador la sumatoria de sus divisores. Fijate que la sumatoria va de atrás para adelante (osea 100 = 50 + 25 + ...) porque pensé que así seria mas rapido. Cuando esta sumatoria es mayor al numero ingresado, el programa corta solo.
La verdad no sé cual es el orden computacional de este algoritmo, pero bueno, funcionar funciona.
Código:
|
def numero_perfecto():
numero = input('Ingrese un numero: ')
while numero<1> 10000:
numero = input('El numero ingresado es invalido. Ingrese otro numero: ')
sumatoria_divisores = 1
for x in range (numero/2,2,-1):
if (numero % x == 0):
sumatoria_divisores = sumatoria_divisores + x
if (sumatoria_divisores > numero):
return 'El numero NO es perfecto.'
return 'El numero es perfecto.'
|
No se porque no se ve bien... en la linea del while debe decir "while (numero menor a 1) or (numero mayor a 10000)"
|
|
|
|
|
|
|
|
|
Amadeo
Nivel 9
Registrado: 20 Oct 2008
Mensajes: 1436
Carrera: No especificada
|
|
Meeee parece que es O(n), pero no se calcular muy bien estas cosas (todavía).
|
|
|
|
|
|
|
|
|
Kartlan
Nivel 5
Edad: 42
Registrado: 09 Ago 2005
Mensajes: 176
Ubicación: Once
Carrera: Informática
|
|
ezequiel.grillo escribió:
|
Otra cosa q no entiendo bien es porque haces numero div contador = 0
|
Ups... era mod... y reitero... si usas internet y pones "pascal reference div" te van a salir tutoriales, si no le pones onda a encontrar la pagina de entre las m=100000000^100000 manuales en internet no vas a poder encontrar las m^m soluciones a los problemas que hay.
div: es el operador divisón entera. te trunca el resultado.
mod: es el operador resto de la división entera.
Y solo par las dudas que realmente te haga falta:
11/3 = 3,6...
11 div 3 = 3
11 mod 3 = 2
Se ve tambien que esto es cierto: A = B*(A div B) + (A mod B) ... para enteros...
En el post del "step" tambien esta como hacerlo con un while. Que es el step (step en ingles=> paso). Eso sale de leer la documentación y ver "internet decime que es el for de pascal" pero para hacerla corta; El for es una forma elegante de hacer un bucle e iterar un contador, así que cualquier for se puede escribir como un while, la artimaña del step es por que hay veces en que no queres mirar todos los numeros de un rango sino por ejemplo solo los pares, o los multiplos de 7 o algo así... no se por que cuesta tanto... es más si no sabes ingles... español(step) => paso; es el paso del for; es decir el incremento del contador del for...
espero que te sirva.
|
|
|
|
|
|
|
|
|
Kartlan
Nivel 5
Edad: 42
Registrado: 09 Ago 2005
Mensajes: 176
Ubicación: Once
Carrera: Informática
|
|
ezequiel.grillo escribió:
|
No entiendo porque si pongo 496 (q es otro numero perfecto) me pone q no es perfecto.
¿Cual seria la condicion final para q me diga si lo es o no?
|
Con todo respesto esta pregunta no tiene ni pies ni cabeza... Para corregir código hace falta verlo (y lejos estoy de querer que cuelgues todo un tp en el foro... por que es para tirar bits al techo) lo mejor (a la altura de algo1) es que pongas writeln y veas los valores de la variable... para este ejercicio con imprimir el valor de la suma antes de volver de la función ya te tiene que dar una idea de que esta fallando, otra es imprimir cada vez que sumas un primo el valor que estas sumando y la suma parcial.
Si me acuerdo bien el nombre del tema de "cortes de control" o imprimir todo bien bien cabeza y esperar que lograr entender que le estas diciendo mal a la maquina.
|
|
|
|
|
|
|
|
|
|
Ir a página Anterior 1, 2
|
Ver tema siguiente
Ver tema anterior
Podés publicar nuevos temas en este foro No podés responder a temas en este foro No podés editar tus mensajes en este foro No podés borrar tus mensajes en este foro No podés votar en encuestas en este foro No Podéspostear archivos en este foro No Podés bajar archivos de este foro
|
Todas las horas son ART, ARST (GMT - 3, GMT - 2 Horas)
Protected by CBACK CrackerTracker365 Attacks blocked.
|
|
[ Tiempo: 0.3923s ][ Pedidos: 20 (0.3138s) ] |