¿Por qué no va este código?

Iniciado por GominaTilted, 24 Noviembre 2018, 17:56 PM

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

GominaTilted

Muy buenas, no entiendo por qué en este código solo se opera bien la primera vez que se realiza el bucle.


#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;
}

AlbertoBSD

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!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

GominaTilted

Exacto, me he dado cuenta nada más preguntarlo. Muchas gracias.

GominaTilted

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.


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;
}

K-YreX

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).
Código (cpp) [Seleccionar]

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