Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: GominaTilted en 24 Noviembre 2018, 17:56 pm



Título: ¿Por qué no va este código?
Publicado por: GominaTilted en 24 Noviembre 2018, 17:56 pm
Muy buenas, no entiendo por qué en este código solo se opera bien la primera vez que se realiza el bucle.

Código:
#include <iostream>
using namespace std;

int main ()
{
int num = 1;
int suma = 0;
int div = 1;

cout << "Este programa nos dice si un numero entero introducido por teclado es perfecto, abundante o deficiente." << endl << endl;

while (num != 0)
{
cout << "Dame un numero (introduce 0 para salir): ";
cin >> num;

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

if (num == 0)
{
cout << "";
}

else if (suma == num)
{
cout << "El numero " << num << " es perfecto." << endl << endl;
}

else if (suma > num)
{
cout << "El numero " << num << " es abundante." << endl << endl;
}

else
{
cout << "El numero " << num << " es deficiente." << endl << endl;
}

}

return 0;
}


Título: Re: ¿Por qué no va este código?
Publicado por: AlbertoBSD en 24 Noviembre 2018, 18:03 pm
Seguramente es por que la variable Suma, solo se inicializa antes del ciclo, y no dentro de el mismo.

Asi en la segunda vuelta su valor ya no es  0 antes de hacer cualquier calculo.

saludos!


Título: Re: ¿Por qué no va este código?
Publicado por: GominaTilted en 24 Noviembre 2018, 18:11 pm
Exacto, me he dado cuenta nada más preguntarlo. Muchas gracias.


Título: Re: ¿Por qué no va este código?
Publicado por: GominaTilted en 24 Noviembre 2018, 20:13 pm
Bueno, vuelvo con otra duda xD. Esta vez este código no sé por qué no funciona. La función debe de detectar los numeros abundantes dentro de un rango introducido por el usuario (ambos extremos excluidos), y mostrar la suma de ellos. Por ejemplo, entre 1 y 13 debería de dar 12, y da 177.

Código:
int SumaAbundantes (int x, int y)
{
int suma = 0, i, div, resultado = 0;

cout << "Dame un entero positivo: ";
cin >> x;
cout << "Dame otro entero positivo: ";
cin >> y;

for (i = x + 1; i < y; i++)
{
for (div = 1; div < i; div++)
{
if ((i % div) == 0)
{
suma = suma + div;

if (suma > i)
{
          resultado = resultado + i;
}
cout << resultado << endl;
}

}

}

cout << "La suma de los numeros enteros abundantes positivos entre " << x << " y " << y << " es " << resultado;

return resultado;
}


Título: Re: ¿Por qué no va este código?
Publicado por: K-YreX en 24 Noviembre 2018, 22:03 pm
Primero: no entiendo muy bien el objetivo del programa, osea no entiendo que es lo que quieres calcular, por lo que haré uso de mi imaginación.
Segundo: por qué pasas como parámetros x e y si nada más empezar la función los modificas?? :huh:
Tercero: estás seguro de que la suma y el resultado sólo deben ponerse a 0 al empezar la función y no habrá que ponerlos a 0 en cada iteración?? Y lo digo como pregunta porque repito que no sé cual es el propósito de la función pero estos suelen ser los errores más comunes por eso te los comento.

Y si no se arregla con lo que te he dicho explícame por favor el uso de esa función y cómo la usas en el <main> ya que no sé qué dos parámetros le pasas (aunque no haces uso de ellos).