Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: tokyo13 en 27 Febrero 2019, 14:54 PM

Título: Programa para calcular numeros perfectos entre 1 y N
Publicado por: tokyo13 en 27 Febrero 2019, 14:54 PM
De momento llevo esto, el programa compila y ejecuta pero el resultado obtenido no es el correcto y no encuentro el error. Soy principiante en programación  ;D

#include <iostream>
using namespace std;

bool esPerfecte(int num)
{
int div;
int suma = 0;

for (div = 1; div <= num; div++)
{
if (num%div == 0)
{
suma = suma + div;

}
}

if (suma == num)
{

return true;
}
else
{

return false;
}

}

int main()
{
int n;
cout << "Introduce un numero" << endl;
cin >> n;
cout << "Los num perfectos son: " << endl;

for (int i = 1; i <= n; i++)
{
esPerfecte(i);

if (esPerfecte(i) == true)
{
cout << i << endl;
}


}

system("PAUSE");
}


Gracias :)
Título: Re: Programa para calcular numeros perfectos entre 1 y N
Publicado por: CalgaryCorpus en 27 Febrero 2019, 16:37 PM
y si reemplazas, en esPerfecte, el <= por un < ?
Título: Re: Programa para calcular numeros perfectos entre 1 y N
Publicado por: K-YreX en 27 Febrero 2019, 20:32 PM
Como te ha comentado CalgaryCorpus el error está en el signo <= que debería ser sólo < ya que sino lo que ocurre es que el propio número como es divisible consigo mismo se suma su valor a la suma y entonces nunca coincide.

Solucionado el problema te dejo un ćodigo correspondiente a tu misma función pero un poco más estética:
Código (cpp) [Seleccionar]

bool isPerfect(size_t number){
size_t sum = 0;
for(size_t divisor = 1; divisor < number; divisor++)
if(number % divisor == 0)
sum += divisor;
return (sum == number);
}


Y el programa principal también se puede mejorar un poco ya que en cada iteración estás llamando a la función dos veces seguidas de las cuales la primera no sirve ya que el valor de retorno se está perdiendo. En vez de usar <system("pause") es mejor que uses <cin.get()>.
Código (cpp) [Seleccionar]

int main(){
int limit;
cout << "Introduce el limite superior: ";
cin >> limit;

for(size_t number = 1; number <= limit; number++)
if(isPerfect(number))
cout << number << endl;
        cin.get();
}
Título: Re: Programa para calcular numeros perfectos entre 1 y N
Publicado por: tokyo13 en 27 Febrero 2019, 22:38 PM
Muchísimas gracias por responder! Ya está solucionado. Parece mentira como un error tan simple te lo manda todo a tomar viento.