Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: deberesa123 en 16 Abril 2015, 03:50 am



Título: numero perfecto
Publicado por: deberesa123 en 16 Abril 2015, 03:50 am
Un número se considera perfecto si la suma de sus divisores es igual al número. Por ejemplo, los divisores de 6 son 1, 2, 3. Dado que, 1+2+3 = 6, 6 es un número perfecto.

Escribir un programa que pida al usuario un número positivo, y decida si es perfecto o no. El programa debe crear 2 funciones:

1. esPerfecto(int) que devuelve verdadero o falso si el número es perfecto

2. esDivisor(int a , int b) que devuelve verdero o falso segun si a es divisor de b, es decir, esDivisor(2, 6) devuelve verdadero, pero esDivisor(2, 5) devuelve falso.

Código
  1.  
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int LeerEnteroPositivo_()
  7. {
  8.     int a=0;
  9.  
  10.     while(a<=0)          
  11.        cin>>a;
  12.  
  13.     return a;
  14. }
  15.  
  16. int EsPerfecto(int a)
  17. {
  18.     int suma=0;
  19.  
  20.     for (int i=1;i<a;i++)
  21.         if(a%i==0)
  22.                 suma+=i;
  23.  
  24.   return suma;
  25. }
  26.  
  27. bool Perf (int a)
  28. {
  29.  
  30.      return (EsPerfecto(a)==a);
  31. }
  32.  
  33. bool esDivisor (int b, int c)
  34. {
  35. int b = 0;
  36. int c = 0;
  37. return ((b/c)%=0)
  38. }
  39.  
  40. int main()
  41. {
  42.  int numeroA;
  43.  int a;
  44.  int b;
  45.  
  46.  cout<<"Dame un numero entero positivo:"<<endl;
  47.  numeroA = LeerEnteroPositivo_ ();
  48.  
  49.  
  50.  cout << " Es perfecto el primer numero ? ( 0= Falso, 1=Verdadero)"<< Perf(numeroA)  << endl;
  51.  cin>> a;
  52.  cin>> b;
  53.  cout << "Es divisor?" << esDivisor (int a, int b) << endl;
  54.  
  55. }
  56.  
  57.  


[MOD] Usar las etiquetas GesHi, para publicar código.

esto es lo que tengo
me pueden ayudar a ver el error en la funcion esDivisor
y como hacer para que al rato de imprimir aparezca verdadero y falso en vez de 0 y 1


Título: Re: numero perfecto
Publicado por: eferion en 16 Abril 2015, 08:55 am
Pues mira que bien, ya tienes trabajo para casa, y además parece interesante.

¿pensabas que te íbamos a dar la solución así por las buenas?

A ver, una cosa es ayudar y otra hacer un trabajo a medida... ahora, si quieres presupuesto para hacerte la tarea seguro que más de uno te pasa un precio.

Un saludo


Título: Re: numero perfecto
Publicado por: Nasty35 en 21 Abril 2015, 16:31 pm
Primero, tienes que seguir el enunciado, si te pide que crees la función esDivisor pues úsala, y creala bien:
Código
  1. bool esDivisor (int b, int c)
  2. {
  3.   int b = 0;
  4.   int c = 0;
  5.   return ((b/c)%=0)
  6. }
wtf? si cambias sus valores a 0, y encima lo divides dará error por división por cero.
Lo mismo con lo demás, te recomiendo que borres todo y lo crees de nuevo, con 3 funciones (las que te pide y main, y ya)

Y por cierto:
Código
  1.  cin>> a;
  2.  cin>> b;
Es equivalente a:
Código
  1. cin >> a >> b; // se simplifica en una línea

Tu código es muy lioso... debes repasar un poco más :)


Título: Re: numero perfecto
Publicado por: eferion en 21 Abril 2015, 17:22 pm
Aparte de lo comentado, dos cositas más:

  • El código lo tienes que decorar eligiendo el lenguaje correspondiente en el desplegable que dice "GeSHi". Te crea dos etiquetas, una de apertura y otra de cierre... el código lo pegas dentro.
  • Editar un mensaje tiene sentido cuando nadie te ha respondido aún... si ya tienes respuesta, casi mejor añadir una respuesta al hilo para que éste tenga cierta coherencia.

Un saludo.