Ayuda con C++. Calcular divisores.[Solucionado]

Hola, estoy haciendo los ejercicios de practicas de la asignatura de Fundamentos de la Programación y hay uno que no me sale. Pide calcular todos los divisores de un numero con do while, pero no consigo que me salga. A ver si me podeis echar una mano. Aqui dejo lo que he hecho
#include <iostream>
using namespace std;

int main(){
     
double numero;
double divisor;
cout << "Introduzca un número: ";
cin >> numero;
divisor=1;
do {
if((numero / divisor) == 0)
    cout << divisor; " es divisor ";
     divisor++;
}while(numero>0);
   cout << "\n\n";
   system("pause");
}

Un saludo
double numero;
double divisor;


Si estás trabajando con enteros, deberías declarar las variables como enteros.

if((numero / divisor) == 0)


El concepto de divisor no es que el resultado (cociente) de la división sea cero, sino que el resto sea cero. Para esto tienes que usar el operador "%" (resto) en vez del de "/" (división).

cout << divisor; " es divisor ";


En C++, para dar salida a la consola, el modo correcto de usar cout es, por ejemplo:

cout << "El resultado es " << una_variable << " blablabla";


En concreto, te sobra un punto y coma, y te falta un <<.

}while(numero>0);


El bucle no acabará nunca, porque no modificas la variable "numero" dentro del bucle, y por lo tanto siempre será mayor que cero. Lo que quieres es usar una condición para que el bucle acabe cuando ya hayas probado todos los candidatos a divisores (es decir, cuando ya hayas probado todos los divisores de 1 hasta el número).
Muchisimas gracias por responder. [tadoramo] [tadoramo] Ya si me sale bien.
Dejo el codigo por si a alguien tiene algún problema de como hacerlo
#include <iostream>
using namespace std;

int main(){
     
int numero;
int divisor;
cout << "Introduzca un número: ";
cin >> numero;
divisor=1;
do {
if((numero%divisor)==0)
    cout << " " << divisor <<" es divisor";
    divisor++;
}while(divisor<=numero);

   cout << "\n\n";
   system("pause");
}



Edito: Tengo otro problema, esta vez con este ejercicio:
Modifiquemos el ejercicio 2 del capital y los intereses de la primera relación. Supongamos
ahora que se quiere reinvertir todo el dinero obtenido (el original C más los
intereses producidos) en otro plazo fijo a un año. Y así, sucesivamente. Construid un
programa para que lea el capital, el interés y un número de años N, y calcule e imprima
todo el dinero obtenido durante cada uno de los N años, suponiendo que todo
lo ganado (incluido el capital original C) se reinvierte a plazo fijo durante el siguiente
año. El programa debe mostrar una salida del tipo:
Total en el año número 1 = 240
Total en el año número 2 = 288
Total en el año número 3 = 345.6

Me sale un bucle infinito y no doy con cual es el problema :S

#include <iostream>
using namespace std;

int main(){
     double capital;
     double interes;
     double total;
     double años;
     double i=1;
    cout << "Número de años: ";
    cin >> años;
    cout << "Capital depositado: ";
    cin >> capital;
    cout << "Introduzca el interes: ";
    cin >> interes;
   
for(i=1; i=años; i++)
{
    total=((capital+(capital*(interes/100)))+interes)*años;
    cout<<"Total en el año " << i << " es " << total;
    i++;
}
   cout << "\n\n";
   system("pause");
}
#include <iostream>
using namespace std;

int main(){
     double capital;
     double interes;
     double total;
     double años;
     double i=1;
    cout << "Número de años: ";
    cin >> años;
    cout << "Capital depositado: ";
    cin >> capital;
    cout << "Introduzca el interes: ";
    cin >> interes;
   
for(i=1; i=años; i++)
{
    total=((capital+(capital*(interes/100)))+interes)*años;
    cout<<"Total en el año " << i << " es " << total;
    i++;
}
   cout << "\n\n";
   system("pause");
}


for(i=1; i=años; i++)


Fíjate en la condición que has puesto en el bucle. En primer lugar, si solo usas un "=", C++ lo entiende como una asignación. Para comparar dos variables, tienes que usar dos signos de igual "==".

De todos modos, la condición que tienes que poner en el bucle no es la condición para que el bucle acabe, sino justo lo contrario, la condición para que el bucle siga. Es decir, quieres seguir mientras la variable "i" NO sea igual al año. Para esto tienes que usar el operador "!=" (no igual).

    i++;


Esta línea sobra, si te fijas, en el for ya has puesto "i++", por lo que cuando llegue al final del bucle ya te incrementará la variable "i", no hace falta que lo hagas manualmente como si usases un while.

Si dejas esta línea, en vez de incrementar los años de uno en uno, lo harás de dos en dos.

total=((capital+(capital*(interes/100)))+interes)*años;


Esta formula no te va a funcionar. Por ejemplo, porque no modificas ninguna de las variables que usas para el cálculo, así que el resultado va a ser el mismo todos los años.

El concepto de interés compuesto es que cada año que pasa tenemos lo mismo que el año anterior, más una fracción de lo del año anterior (definida por el interés).
Supongamos que empezamos con 100€ y un interés del 20%:
Año 1: Los 100€ con los que empezamos
Año 2: Los 100€ con los que empezamos, más el 20% de 100€ = 100+20 = 120€
Año 3: Los 120€ del año anterior, más el 20% de 120€ = 120+24=144€
Etc.

Matemáticamente:
Año n+1 = Año n + Año n * (Interés/100)


Cada vez que se ejecuta tu bucle, "pasa un año". Es decir, dentro de tu bucle, tienes que añadir el código necesario para calcular el dinero del año actual basándose en el que tenías el año anterior (que deberías tener almacenado en alguna variable).

---

Por cierto, usar acentos en los nombres de las variables no está permitido en C++ (no se que compilador usas pero no debería aceptarlo).

Y si quieres hacer que la consola salte de línea, añade un "endl" al "cout", ej:

cout << "lo que sea" << endl;
Ya me sale, muchisimas gracias de nuevo. Para saltar un linea utilizo
cout << "\n";

Pero es más sencillo poner endl. Gracias por el consejo [tadoramo] [tadoramo] [tadoramo]
Un saludo
4 respuestas