elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programa para calcular numeros perfectos entre 1 y N
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programa para calcular numeros perfectos entre 1 y N  (Leído 5,429 veces)
tokyo13

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Programa para calcular numeros perfectos entre 1 y N
« 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

Código:
#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 :)


En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Programa para calcular numeros perfectos entre 1 y N
« Respuesta #1 en: 27 Febrero 2019, 16:37 pm »

y si reemplazas, en esPerfecte, el <= por un < ?


En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Programa para calcular numeros perfectos entre 1 y N
« Respuesta #2 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
  1. bool isPerfect(size_t number){
  2. size_t sum = 0;
  3. for(size_t divisor = 1; divisor < number; divisor++)
  4. if(number % divisor == 0)
  5. sum += divisor;
  6. return (sum == number);
  7. }

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
  1. int main(){
  2. int limit;
  3. cout << "Introduce el limite superior: ";
  4. cin >> limit;
  5.  
  6. for(size_t number = 1; number <= limit; number++)
  7. if(isPerfect(number))
  8. cout << number << endl;
  9.        cin.get();
  10. }
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
tokyo13

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Programa para calcular numeros perfectos entre 1 y N
« Respuesta #3 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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programa para calcular numeros unlock
Dispositivos Móviles (PDA's, Smartphones, Tablets)
jlmn22 0 2,583 Último mensaje 10 Septiembre 2010, 15:22 pm
por jlmn22
Programa en C que imprime los primeros m números perfectos
Programación C/C++
ERIK546 3 22,499 Último mensaje 29 Junio 2012, 21:36 pm
por ERIK546
[JS] ¿Programa para calcular números primos?
Scripting
Linton 5 19,438 Último mensaje 23 Julio 2013, 07:40 am
por Linton
Programa Numeros Perfectos C++
Programación C/C++
HIDE_95 2 3,918 Último mensaje 4 Agosto 2015, 21:34 pm
por HIDE_95
Numeros amigos y numeros perfectos programa en C
Programación C/C++
estudiante_1 2 5,749 Último mensaje 11 Agosto 2015, 23:51 pm
por estudiante_1
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines