C While Schleife endet nicht

Jinjay95

Cadet 2nd Year
Registriert
Jan. 2015
Beiträge
20
Hey

Ich programmiere momentan etwas mit der While Schleife und würde gerne mit C etwas programmieren wodurch mithilfe einer while-Schleife zu einem gegebenen Anfangskapital bei einem vorgegebenem jährlichen Zinssatz berechnet, wie viele Jahre benötigt werden, damit das Kapital eine bestimmte Zielsumme überschreitet.

Mein Code sieht momentan so aus:
Code:
main()
{
	
	system("CLS");
	float Kapital, Zins, Endkapital, Zinsbetrag;
	int Jahr;
	
	printf("Dieses Programm liest das Anfangskapital, den Zinssatz und\ndie Zielsumme ein und gibt die Jahre aus bis die Zielsumme erreicht ist.");
	printf("\n\nGeben Sie nun bitte Ihr Anfangskapital an = ");
	
	scanf("%f", &Kapital);
	
	printf("\nPrima, nun geben Sie bitte den Zinssatz an z.B. 5\n\nIhr Zinssatz = ");
	
	scanf("%f", &Zins);
	
	printf("\nSehr gut, anschliessend bitte das Zielkapital was erreicht werden soll\n\nIhr Zielkapital = ");
	
	scanf("%f", &Endkapital);
	
	Zinsbetrag = Kapital * Zins / 100;
	
	while(Endkapital != Kapital){
		
		Kapital + Zinsbetrag;
		Jahr++;
		printf("Jahr %i", Jahr);
		
	}
	
	
	
	
}


Das Problem ist dass die Schleife einfach nicht endet..

Hat jemand den Fehler entdeckt?
 
Ich bin kein Experte in C aber ich würde sagen du berechnest in Zeile 25 zwar das neue Kapital aber du musst das dem Kapital auch zuweisen :)
 
Wie auch, wenn weder 'Endkapital' noch 'Kapital' innerhalb der Schleife modifiziert wird?
 
Das muss in der while-schleife kapital+=Zinsbetrag heißen, und deine Abbruchbedingung ist auch unsicher, weil du nicht weißt, ob du exakt treffen wirst. Dann eher while(Endbetrag>Kapital). Den Rest debugge ich dir aber nicht. *es graust mich*
 
Ebrithil schrieb:
Ich bin kein Experte in C aber ich würde sagen du berechnest in Zeile 25 zwar das neue Kapital aber du musst das dem Kapital auch zuweisen :)

Ah habs jetzt durch Kapital = Kapital + Zinsbetrag hinbekommen, dankesehr :)
 
Und außerdem - Zinseszins? Willst du das nicht ?
 
Zinseszins ist durch die Zyklische Berechnung schon dabei.

edit: stimmt, dafür müsste die Zinssatzberechnung indie Schleife mit rein...

mfg
 
Alles ist bis jetzt perfekt bis auf dass die Schleife immer weiter läuft und das Printf immer ausgegeben wird, mein Code sieht nun so aus:

Code:
main()
{
	
	system("CLS");
	float Kapital, Zins, Endkapital, Zinsbetrag;
	int Jahr = 0;
	
	printf("Dieses Programm liest das Anfangskapital, den Zinssatz und\ndie Zielsumme ein und gibt die Jahre aus bis die Zielsumme erreicht ist.");
	printf("\n\nGeben Sie nun bitte Ihr Anfangskapital an = ");
	
	scanf("%f", &Kapital);
	
	printf("\nPrima, nun geben Sie bitte den Zinssatz an z.B. 5\n\nIhr Zinssatz = ");
	
	scanf("%f", &Zins);
	
	printf("\nSehr gut, anschliessend bitte das Zielkapital was erreicht werden soll\n\nIhr Zielkapital = ");
	
	scanf("%f", &Endkapital);
	
	Zinsbetrag = Kapital * Zins / 100;
	if(Endkapital <= Kapital){
		
		printf("\n\nBeachten Sie dass das Anfangskapital groesser als das Endkapital sein muss!\n");
		
	}
	while(Endkapital > Kapital){
		
		Kapital = Kapital + Zinsbetrag;
		Jahr++;
		printf("Es werden %i Jahre benoetigt.\n", Jahr);
		
	}
	
	
	
	
}

Und das Programm tut was es soll: Unbenannt.png

Kann man irgendwie das Problem beheben dass eben nur da stehen soll es werden 20 Jahre benötigt statt die vorherigen Jahre auch noch anzuzeigen?
 
Nimm das Printf aus der Schleife raus...
 
bitte
 
Und wieder einem armen Anfänger keine Chance gegeben, Kompetenz zu entwickeln. Und ihm stattdessen beigebracht, dass er bei jedem kleinen Stocken nicht selber denken muss, weil ja immer irgend einer da ist, der ihm alle intellektuelle Arbeit abnimmt.

Ganz große Leistung.
 
Zuletzt bearbeitet:
Zinseszinsen werden immer noch nicht in Betracht gezogen. Das solltest du vielleicht auch noch mit einbauen.

Alternativ könntest du die Formel für den Zinseszins verwenden: http://de.wikipedia.org/wiki/Zinseszins

Die einfach nach n umstellen: n=log2(Kn/K0)/log2(1+Prozent/100)

Aber da du den Logarithmus vermutlich noch nicht kennst, wäre das wohl etwas zu viel verlangt.
 
Zuletzt bearbeitet:
asdfman schrieb:
Und wieder einem armen Anfänger keine Chance gegeben, Kompetenz zu entwickeln. Und ihm stattdessen beigebracht, dass er bei jedem kleinen Stocken nicht selber denken muss, weil ja immer irgend einer da ist, der ihm alle intellektuelle Arbeit abnimmt.

Ganz große Leistung.

Das ist doch Quark. Der Code ist gemacht, an einem Vergleichsoperator lässt man niemanden verzweifeln.
 
Naja... wenn man nicht selbst drauf kommt das ein print in einer Schleife mehrfach und ausserhalb halt nur einmal ausgeführt wird erweckt halt schon den Eindruck das man es gar nicht lernen möchte sondern nur an einer Lösung interessiert ist.
 
Seh ich auch so, hier mangelt es eklatant an Eigenleistung.
Wenn wir hier von einem wirklich interessanten und komplexen Problem reden würden, bei dem nachfolgende Generationen von der Lösung noch etwas hätten, dann sähe das anders aus. Aber bei solchen Trivial-Geschichten wie "Wieso schreibt der mir so viel, wenn der SChreibbefehl in der Schleife steht?" solltet ihr euch alle auf Hilfe zur Selbsthilfe beschränken:
Erklärt dem Jungen, wie man Programmabläufe schematisch darstellt. Es geht doch nix über einen schönen Programmablaufplan (erzeugt mit der brandneuen App "Stift+Papier"), um solche Hirnfürze ganz schnell selbst zu finden.
 
Klar ist es besser jemand in die Richtige Richtung zu schubsen und er kommt selber darauf (AHA-Effekt - hier z.B Ausgabe von Kapital in der While-Schleife), aber sich darüber zu streiten wie die richtige Vorgehensweise ist, ist auch nicht förderlich. Das wichtigste ist schliesslich das jemand versteht warum eine bestimmte Änderung nötig ist.

In diesem Sinne: Für Zinseszins reicht es die "Zinsbetrag = Kapital * Zins / 100;" mit in die While-Schleife zu übernehmen, weil dann der Zinsbetrag immer vom aktuellen (jährlichen) Kapital-Betrag ausgeht.
 
Zurück
Oben