ayuda con codigo fuente en c++

vereis estoy intentando hacer un programa en el cual yo le introduzca un intervalo de numeros y me diga los numeros perfectos q hay dentro del mismo

pero no se q coj.... pasa q no funciona [+furioso] , llevo mas de 3 horas dando vueltas al codigo y no veo el error [buuuaaaa]


ayudarme pq estoy al borde de la desesperacion

os pego el codigo

#include <iostream>
using namespace std;

bool numeroperfecto (int n)
{
    int i, h, resto, suma;
    bool a;
    resto=0;
    suma=0;
    a=false;
    h=n;
    for(i=1;i==(n-1);i++){
       
        resto=(n%i);
       
        if (resto==0){
   
           suma=(suma+i);}   
     
           if (suma==h){
       
              a=true;}               
    }
   
    return(a);

}   

int main()
{
   
    int n1, n2, i;
    bool a,b;
    a=true;
    do{
         cout<<"Introduce el primer numero: \n";
         cin>>n1;
         cout<<"Introduce el segundo numero: \n";
         cin>>n2;
         
         if ((n2<n1) || (n1<0)){
       
            cout<<"Datos incorrectos, vuelve a introducirlos\n";
            b=false;}
         
         else{
             b=true;}   }while(b==false);
   
     for(i=n1;i<=n2;i++){
         
         a=numeroperfecto(i);
         
         if (a==true) cout<<i<<" ";
           
     }       
     system("pause");
}         


salu2 y gracias

pd: el codigo tiene copyleft asi q cuidadin X-D
Si perfecto == la suma de sus divisores = al número sería algo así...

No te compliques mucho la vida, con esto en principio basta [ginyo]

bool perfecte(int a) {
int x,suma=0;
for (x=1;xreturn (suma==a);
}

A ver si te sirve con esto. :-P
O si no quieres modificar mucho tu codigo, cambia la condición del bucle for

for(i=1;i==(n-1);i++){


por

for(i=1;i<=(n-1);i++){
pues nada, sigue sin ir...


yo creo q el numero perfecto lo calcula el problema es q no lo escribe


gracias, voy a ver si encuentro una solucion


EDITO:

ya encontre el problema

el en subalgoritmo habia definido la variable resto como int y habia q definirla como float

vaya error mas tonto [360º]
A parte de ese error, fijate tb en el for como te dicen por arriba que eso de hasta i ==(n-1) no queda bien.

Y la salida del main tiene que ser un bool ?? Esq no queda mu técnico, es mejor que te crees dos costantes Ok =1 u Error=0 y que devuelva Ok o Error. Pero claro para eso necesitas el crear unf ichero .h que no sé si te lo piden.

Qué recuerdos estos programitas tan monos jejejeje

Viva la programación!!!
4 respuestas