Ayuda con c++

Llevo 1 día entero intentando sacar esto pero no hay manera:

Me piden que construya un programa que calcule cuantos años han de pasar para que el capital inicial sea el doble. Los datos que se deben de leer son el capital inicial y el interés anual. He probado con while y for y no consigo hacerlo bien :(
No sé programar en C++ pero tal vez esto te sirva (es el ejemplo 11.6)

http://azul2.bnct.ipn.mx/c/funciones/ar ... n%2011.pdf

y tambien, http://www.forosdelweb.com/f130/ayuda-c ... es-839150/


Un tercer esquema:


#include<stdio.h>
#includezconio.h>
#include<math.h>


Main()
{
Float m, c, i;
Int n, t;
Clrscr();
Gotoxy(6,2);printf(“calculo del capital final o monto”);
Gotoxy(17,3);printf(“capital inicial:”);
Scanf(“%f”, & c);
Gotoxy(17,4);printf(“interés nominal:”);
Scanf(“%f”, &i);
Gotoxy(6,5);printf(“numeros de periodos por años:”);
Scanf(“%d”, &n);
Gotoxy(18,6);printf(“numero de año:”);
Scanf(“%d”, &t);
i=i
\
100;
M=c*
pow(1+i
\
n, n*t);
Gotoxy(19,7);printf(“capital final :%2f n”);
Gotoxy(6,8),printf(“pulse cualquier tecla.........”);
Getch()
}

/*PROGRAMA: CAPINI. C*/

#include<stdio.h>
#include<conio.h>
#include<math.H>
Main()
{
Float m, c, i;
Int n, t;
Clrscr();
Gotoxy(6,2);printf(“calculo del capital inicial”);
Gotoxy(19,3);printf(“capital final:”);scanf(“%f”, &m);
gotoxy(17,4);printf(“interés nominal:”);scanf(“%f”, &i);
Gotoxy(6,5);printf(“numero de periodo por año:”);scanf(“%d”, &n);
Gotoxy(18,6);pri
ntf(“numero de años:”);scanf(“%d”, &t);
i=i/100
C=m/pow(1+i/n, n*t);
Gotoxy(17,7);printf(“capital inicial: %2f”, c);
Gotoxy(6,8);printf(“pulse cualquier tecla.........”);
Getch();
}

---Calculo de número de años---

*programa: caltiemp. C*/
#include<stdio.h>
#include
<conio.h>
#include<math.h>
Main()
{
Float m, c, i;
Int n, t;
Gotoxy(6,2);printf(“calculo de numero de años”);


Aquí puedes ver el doc completo.

Bajo mi punto de vista en Pascal sería mucho más sencillo de hacer, pero C++ es imprescindible hoy día..






Saludos
Ese ejercicio 11.6 también lo hice y ese si lo hice bien. Pero con lo del doble no hay manera
:(
Gaararo escribió:Llevo 1 día entero intentando sacar esto pero no hay manera:

Me piden que construya un programa que calcule cuantos años han de pasar para que el capital inicial sea el doble. Los datos que se deben de leer son el capital inicial y el interés anual. He probado con while y for y no consigo hacerlo bien :(


int años = 0
double capital inicial, capital acumulado
double INTERÉS ANUAL
capital acumulado = capital inicial

mientras capital acumulado sea menor al doble del capital inicial{
incrementar años
capital acumulado += interés}

imprimir años
El problema es que así siempre suma el mismo interés y no se tiene en cuenta que el interés cambia cada año (a mayor capital mayor interés).
Aquí te dejo como quedaría implementada la función:

int calcular_interes(double capital_inicial, double interes_anual){
       double capital_actual = capital inicial;
       int anos_transcurridos;
       for(anos_transcurridos = 0; capital_actual <= capital_inicial * 2; ++anos_transcurridos)
                 capital_actual += capital_actual * interes_anual;
       return anos_transcurridos;
}


Si te fijas los calculo con el capital que tengo actualmente, de esta forma el interés va variando en cada iteración del bucle las cuales representan un año transcurrido.
Se podría realizar también con otros bucles, pero el for es el que más líneas de código te ahorrará en esta ocasión.

Espero que te sirva de ayuda, si te funciona dímelo, ya por curiosidad, pero estoy seguro de que lo hará.

Saludos.
Lo tengo hecho de esta forma:

double capital_inicial, interes, anos_transcurridos = 1, capital_actual;

(Aqui se introducen los datos con cin...)

capital_actual = capital_inicial;

for (anos_transcurridos=1; capital_actual <= capital_inicial;)
{
capital_actual += capital_actual * interes;
cout << " " << n << " anios para que el capital sea el doble << '\n';
}

Todo esto en int main (no me dejan en otro sitio xD).

El problema es que cuando muestra los años siempre me sale 1.
Gaararo escribió:Lo tengo hecho de esta forma:

double capital_inicial, interes, anos_transcurridos = 1, capital_actual;

(Aqui se introducen los datos con cin...)

capital_actual = capital_inicial;

for (anos_transcurridos=1; capital_actual <= capital_inicial;)
{
capital_actual += capital_actual * interes;
cout << " " << n << " anios para que el capital sea el doble << '\n';
}

Todo esto en int main (no me dejan en otro sitio xD).

El problema es que cuando muestra los años siempre me sale 1.


Si en el código fuente has escrito el bucle for, exactamente igual que ne el post, el bucle está mal por dos razones, primero no has hecho que la variable anos_transcurridos se incremente en cada iteración, lo que provocaría que en el resultado solo te saliera 1, ya que las inicializado a 1 y esta no ha sido modificada en todo el bucle.

En segundo lugar la condición del for está mal también si quieres llegar a cuando el capital inicial sea el doble del actual te falta multiplicar por 2 el capital inicial en la condición, es decir capital_actual <= capital_inicial * 2.

Por último decirte que la variable anos transcurridos la deberías de inicializar a 0 y no a 1, ya que antes de cualquier cálculo que hagas sobre el interés estarías sobre el año 0, porque quieres saber cuantos años transcurren desde que con el capital inicial X, llego al doble de este, por lo que justo al inicio aún no ha pasado ningún año, ejemplo, supón un interés anual del 50% y tengo un capital inicial de 100€, ahora mismo tengo eso, es decir año 0, cuando calcule por primera vez el interés y se lo añada al interés actual es cuando habrá pasado un año, por lo que en el año 1 tendría 150€, por lo que la condición aun se sigue cumpliendo y transcurriría otro año más, entonces año 2, y tendría 225€, por lo que la condición ya no se cumple y tendrías que has tardado 2 años en duplicarlo. Si inicializas el año a 1, el resultado de antes habría quedado 3, cosa que no es cierta.

Saludos.
He arreglado todo y he puesto 0 en los años y ahora me sale siempre 0. ¿Crees que debo de crear otra variable del interés?
Gaararo escribió:He arreglado todo y he puesto 0 en los años y ahora me sale siempre 0. ¿Crees que debo de crear otra variable del interés?


Pero has puesto dentro del for un "Años_transcurridos++"?? Si no lo has hecho, los años_transcurridos siempre están a 0.
Copia y pega el código tal cual lo tengas aquí, y así podremos ver más fácilmente el fallo que tienes.

Saludos
11 respuestas