Zinsrechnung und Schleife
-
ja, da war ich mir noch nicht so sicher wie das geht...
wollte in die while schleife noch ne if schleife machen...
und dann irgendwie:
if (i==12) {break?? (irgendwas das die ausgabe unterbrincht?)
clrscr;
}Danke für deine Hilfe!!
-
break ist da wohl etwas zu hart - du willst die Schleife ja nicht abbrechen, sondern nur kurz anhalten. Da reicht es aus, mit getch() auf eine Eingabe des Nutzers zu warten und anschließend den Seitenkopf neu zu schreiben.
-
irgendwie funktioniert das nicht
ich finde meinen Fehler nicht
*weiter suchen tu*
-
wie wärs, wenn du mal die fehlermeldung postest, die du erhältst, oder kommen einfach falsche werte dabei raus?
-
ich bekomm keine fehlermeldung...
das programm endet einfach, sobald er die Rate ausgerechnet hat...
-
*mal den Code überflogen hat* Du müsstest nach dem getch() und dem Bildschirm löschen (btw,
clrscr;
ist kein Funktionsaufruf, sondern einfach nur sinnlos) den Tabellenkopf neu ausgeben.Eine andere Möglichkeit wäre es, eine doppelte Schleife zu verwenden:
int num=0; while(betr>=0) { //Tabellenkopf schreiben for(int i=0;i<12 && betr>=0;++i,++num) { //Kreditdaten aktualisieren und ausgeben } printf("Bitte return drücken!"); getch(); }
PS: Du kannst deine Codes auch direkt in die Beiträge reinkopieren - da steigen deine Chancen, daß sie auch gelesen werden
-
würd ich ja gerne, aber wie get das? über die taste c# ??
-
//*************************************************************************** // dateiname.erw : Berechnung der Rückzahlung eines Ratenkredits // Projekt : Praktikumsaufgabe 1 // Autor/in : Swantje // Version : 1.0 // Datum : 13.11.2007 letzte Aenderung am : tt.mm.jjjj // Beschreibung : maximal 5 Zeilen // Compiler : Borland C++ V 5.02 //*************************************************************************** #include <stdio.h> /* Ein-/Ausgabe der c-Bibliothek laden*/ #include <conio.h> /* Borland Bildschirm-Bibliothek laden*/ #include <math.h> int main (void) /*Programmstart*/ { /* ---------------------- */ /* Variablen Vereinbarung */ /* ---------------------- */ double bet; /*Kreditbetrag*/ double zin; /*Nominalzinsen in % */ double laz; /*Laufzeit*/ double x; double n; /*Anzahl der Raten*/ double zr; /*Zinsrate pro Zahlung*/ double rat; /*Rate*/ double EZ; /*Effektivzins*/ double btr; double ztr; int ranz; double Zinsen; double Tilg; double Rest; int i=1; int num=0; char dummy[81]; /* zum Anhalten des Programms*/ /* -------------------------------- */ /* Programmteile Eingabebildschirm */ /* -------------------------------- */ /*Bildschirm löschen */ printf ("Bankhaus Nepp & Soehne -> Berechnung von Ratenkrediten S. Barre, S. Meinke\n"); printf ("****************************************************** \n"); /* Unterstrichen, Leerzeile ausgeben*/ printf ("\n\n"); /* Leerzeile*/ printf ("Kreditbetrag [T.EURO] : "); /*Eingabeaufforderung*/ scanf ("%lf", &bet); /*positiver ganzzahliger Wert wird von Tastatur eingelesen*/ if (bet==0) {return 0;} /*Anweisung: Stop des Programms bei Wert 0*/ printf ("Nominalzinsen [%] : "); /*Eingabeaufforderung*/ scanf (" %lf",&zin); /*Zinsen werden von Tastatur eingelesen*/ printf ("Laufzeit [J.MM] : "); /*EIngabeaufforderung*/ scanf (" %lf",&x); /*Laufzeit wird von Tastatur eingelsen*/ printf ("Raten/Jahr : "); /*Eingabeaufforderung*/ scanf (" %lf",&n); /*Rate wird von Tastatur eingelesen*/ if (n<1) { /*Anweisung: Ratenzahlung auf 1-12 begrenzen*/ n=1; } else if (n>12) { n=12; } gets (dummy); /*------------------------------------*/ /* Programmteil Ausgabebildschirm */ /*------------------------------------*/ btr=bet*1000; ztr=zin/100; laz=(int)x+(x-(int)x)*100/12; zr = zin/n/100; rat = (btr*zr)/(1-(1/pow(1+zr,n*laz))); printf("Rate [EURO] : %.2f", rat); printf ("\n\n"); printf ("\n\n"); gets (dummy); /*-----------------------------------*/ /* Tabellenkopf / Wertzuweisung */ /*-----------------------------------*/ printf("RatenNr Zinsen Tilgung Restschuld \n"); printf("------------------------------------------ \n"); while (bet>=0) { printf("%d",&i); Zinsen=btr*zin/100/n; Tilg=rat-Zinsen; Rest=btr-Tilg; printf(" | %2d |%9.2f | %9.2f | %9.2f %% | \n", i, Zinsen, Tilg , Rest); btr=Rest; i+=i; while(betr>=0) { printf("RatenNr Zinsen Tilgung Restschuld \n"); printf("------------------------------------------ \n"); for(int i=0;i<12 && betr>=0;++i,++num) { //Kreditdaten aktualisieren und ausgeben } printf("Press return ->"); getch(); } } gets (dummy); { return 0; }}
-
Swantje schrieb:
würd ich ja gerne, aber wie get das? über die taste c# ??
Fast - die Taste "C/C++" ist für C-Codes
Zu deinem Programm: Die Berechnungen "Zinsen=..." und die dazugehörige Ausgabe gehören in die innerste Schleife - an der Stelle bringen sie nicht viel. (und dadurch, daß im Inneren der Schleife nicht viel passiert, hast du eine Endlosschleife, die nur ständig auf Eingaben wartet)
-
Die Berechnungen "Zinsen=..." und die dazugehörige Ausgabe gehören in die innerste Schleife
irgendwie bin ich gerade erritiert. Also in die for schleife oder wie? Oder was is eine innere Schleife? *lieb frag*
Danke für deine gedult mit mir!!
-
Swantje schrieb:
Die Berechnungen "Zinsen=..." und die dazugehörige Ausgabe gehören in die innerste Schleife
irgendwie bin ich gerade erritiert. Also in die for schleife oder wie?
Ja genau - dort wo der Kommentar "//Kreditdaten aktualisieren und ausgeben" steht.
Oder was is eine innere Schleife? *lieb frag*
Eine "innere Schleife" ist eine Schleife, die im Inneren einer anderen Schleife liegt (in diesem Fall die "for(i=0...)" im Inneren der "while(betr>=0)").
-
Eine "innere Schleife" ist eine Schleife, die im Inneren einer anderen Schleife liegt (in diesem Fall die "for(i=0...)" im Inneren der "while(betr>=0)").
Danke
Also ich hab das jetzt wie folgt hier bei mir stehen:
/*------------------------------------*/ /* Programmteil Ausgabebildschirm */ /*------------------------------------*/ btr=bet*1000; ztr=zin/100; laz=(int)x+(x-(int)x)*100/12; zr = zin/n/100; rat = (btr*zr)/(1-(1/pow(1+zr,n*laz))); printf("Rate [EURO] : %.2f", rat); printf ("\n\n"); printf ("\n\n"); gets (dummy); /*-----------------------------------*/ /* Tabellenkopf / Wertzuweisung */ /*-----------------------------------*/ printf("RatenNr Zinsen Tilgung Restschuld \n"); printf("------------------------------------------ \n"); while (bet>=0) { printf("%d",&i); while(betr>=0) { printf("RatenNr Zinsen Tilgung Restschuld \n"); printf("------------------------------------------ \n"); for(int i=0;i<12 && betr>=0;++i,++num) { Zinsen=btr*zin/100/n; Tilg=rat-Zinsen; Rest=btr-Tilg; printf(" | %2d |%9.2f | %9.2f | %9.2f %% | \n", i, Zinsen, Tilg ,Rest); btr=Rest; i+=i; } printf("Press return ->"); getch(); } } gets (dummy); { return 0;
aber irgendwie rechnet mein Programm nichts...
-
kanns sein, dass bet und betr irgendwie falsche werte erhalten? weil ja die schleifen abgebrochen werden, wenn diese kleiner 0 werden. von daher denke ich, dass es evtl daran hängen könnte, hast du die irgendwie initialisiert, hab jetz bloß mal im allgmeinen durch geschaut, bin nicht in die tiefe gegangen so
-
Danke für den Tip.
ich hab es jetzt einheitlich gemacht:
while (btr>=0) { printf("%d",&i); while(btr>=0) { printf("RatenNr Zinsen Tilgung Restschuld \n"); printf("------------------------------------------ \n"); for(int i=0;i<12 && btr>=0;++i,++num)
aber geht auch nicht
-
Du solltest mal versuchen, die Variablennamen einheitlich zu verwenden ('betr' und 'btr' sind zwei verschiedene Variablen - und die Zählvariable i der for-Schleife kollidiert mit der außenstehenden Variablen i).
-
Okay, ich glaube ich hab den Durchblick verloren...
-
JAAAAAAAAAAAAAAAAAA!!!! Es funktioniert!!! Zumindest rechnet er... zwar noch nicht bis 0 aber die ersten 4 Wete rechnet er
Also er gibt mir die ersten 4 werte, dann muss ich enter drücken und dann kommen die nächsten 4. Solange bis ich einen betrag von 0 euro habe. Jetzt muss ich nur noch den Schritt weg bekommen, dass er immer nach 4 werten die enter taste zum weiter ausgeben braucht...
-
http://www.uploadarea.de/upload/15m5dygxvy2vjuoujekpr1gpi.html
1. ich habe jetzt an Anfang meiner Ausgabe so zich tausend zahlen. Wie bekomme ich die weg? bzw. wo kommen die her?
2. in der nächsten Spalte steht immer
1
3
7
1
3
7aber das muss eigentlich
1
2
3
4
5
werden...wie kann ich das ändern? bzw. wieso macht er das??
-
Schau dir mal an, welche Variablen wo inkrementiert (und initialisiert) werden.
-
ja, das mit den Zahlen 1-12 hab ich schon hinbekommen. Problem sind grad die aus der ersten Spalte. Diese 7-stellige Zahl...