numero perfecto

Iniciado por deberesa123, 16 Abril 2015, 03:50 AM

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

deberesa123

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 (cpp) [Seleccionar]


#include <iostream>

using namespace std;

int LeerEnteroPositivo_()
{
    int a=0;

    while(a<=0)          
       cin>>a;

    return a;
}

int EsPerfecto(int a)
{
    int suma=0;

    for (int i=1;i<a;i++)
        if(a%i==0)
                suma+=i;

  return suma;
}

bool Perf (int a)
{

     return (EsPerfecto(a)==a);
}

bool esDivisor (int b, int c)
{
int b = 0;
int c = 0;
return ((b/c)%=0)
}

int main()
{
 int numeroA;
 int a;
 int b;

 cout<<"Dame un numero entero positivo:"<<endl;
 numeroA = LeerEnteroPositivo_ ();


 cout << " Es perfecto el primer numero ? ( 0= Falso, 1=Verdadero)"<< Perf(numeroA)  << endl;
 cin>> a;
 cin>> b;
 cout << "Es divisor?" << esDivisor (int a, int b) << endl;

}




[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

eferion

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

Nasty35

Primero, tienes que seguir el enunciado, si te pide que crees la función esDivisor pues úsala, y creala bien:
Código (cpp) [Seleccionar]
bool esDivisor (int b, int c)
{
   int b = 0;
   int c = 0;
   return ((b/c)%=0)
}

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 (cpp) [Seleccionar]
  cin>> a;
  cin>> b;

Es equivalente a:
Código (cpp) [Seleccionar]
cin >> a >> b; // se simplifica en una línea

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

eferion

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.