programa que determine si numero es perfecto

Iniciado por jon_18, 13 Agosto 2012, 22:54 PM

0 Miembros y 1 Visitante están viendo este tema.

jon_18

Hola, soy nuevo en el foro.

hasta ahora estoy empezando a conocer todo lo que es el lenguaje en c++, y necesito que por favor me ayuden a hacer un programa que determine si un numero es perfecto o no, y debo realizarlo aplicando el concepto de recursividad.

agradezco sus colaboraciones, gracias.

CSQCasimiro

si estas empezando, te doy un consejo cuando te encontras con un problema, antes de programar, pensa, "yo como ser humano,¿ como lo resuelvo ?" , una ves que ya lo tenes, solo estructuralo y dale un "paso a paso" , usando decisiones y repeticiones, y listo.
"Mejora el Algoritmo, no el Código"
"Buscando todos los días ser mejor que ayer"

s00rk

Tampoco esta demas antes que nada leer la Wikipedia, o algun sitio que te muestre ejemplos de como saberlo y ya de ahi razonarlo y ver como lo harias en codigo, tambien en la wikipedia algunas veces al final muestran como hacerlo en codigo en diferentes lenguajes sino esta el que ocupas solo es cuestion de razonar elque te muestran y pasarlo al que tu deseas ...

Buscar no te matara ;D

jon_18

tampoco es que no tenga ni las mas minima idea de como hacerlo, sino que no me salia y ps debo hacer 10 programas mas, y pasarlos a mano, por eso les pido la ayuda.

s00rk

si tienes la idea entonces pon aqui lo que hiciste y ahi si te podemos ayudar en lo que este mal, mas no te podemos dar el codigo asi nomas, porque no harias nada ... aqui estamos para ayudar mas no para hacerle las cosas a los demas desde 0.

Coloca aqui lo que hiciste y asi ya poder ayudarte.

Oblivi0n

Como es un algoritmo matemático relativamente sencillo, el programa es "traducir" directamente la expresion

Definamos el número perfecto como todo numero tal que es igual a la suma de sus divisores positivos.

Vayamos desgranando:

Lo único que hay que comprobar  es que el número sea positivo, y luego, que sea la suma de sus divosres positivos:

-> Que sea positivo:


if(num > 0){

}


-> Que sea la suma de sus divisores: Esto es el sumatorio desde num-1 hasta 1, tal que num%i==0


int sumatorio = 0;
for( int i = num-1;num >= 1;i--){ /* Sumatorio desde num-1 hasta 1*/
if(num%i){
sumatorio += i;
}
}


La funcion devolvera el valor 1 si el numero es perfecto, y 0 si no lo es:

if(sumatorio==num){
return 1;
}else{
return 0;
}


Y ahora jutamos todo:

#include <stdio.h>

int checkPerfect(int num);

int main(){

int num;
int isPerfecto;
printf("Introduzca un numero:\n");
scanf("%d",&num);
isPerfecto = checkPerfect(num);
if(isPerfecto==1){
printf("El número es perfecto");
}else{
printf("El numero no es perfecto");
}
return 0;
}

int checkPerfect(int num){
if(num > 0){
int sumatorio = 0;
for( int i = num-1;num >= 1;i--){ /* Sumatorio desde num-1 hasta 1*/
if(num%i==0){ /* Si es divisor, sumamos al total*/
sumatorio += i;
}
}
}else{
return 0;
}

if(sumatorio==num){ /* Si el total del sumatorio es igual al número, el número es perfecto*/
return 1;
}else{
return 0;
}
}


( El código puede contenter errores, está a bloc de notas y no tengo un compilador de C ahora mismo)