Zinsrechnung und Schleife
-
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...
-
OK hab's geschafft.
Letztes Problem is nur, dass er nach 12Raten nicht unterbricht und auf der nächsten Seite fortsetztAuf jedenfall vielen Dank soweit!!
-
Es ist wirklich hilfreich, das Struktogramm zu schreiben oder wenigstens zu skizzieren, bevor man sich an den Quelltext heranmacht. Zumindest bei Aufgabenstellungen die Ungeübte wegen mehrerer Schleifen und Abfragen überfordern können.
Programmieren ist learning by doing und learning funktioniert bei vielen nicht durch "doing the große Aufgabe" ohne Vorwissen, denn diese Aufgabe setzt gewisse Kenntnisse und ein Verständnis für die Befehle und Abläufe voraus. Programmierung ist abstrakt - das macht sie zu lernen so schwer. Schau dir die vorangegangenen Übungen an, da werden Schritt für Schritt Schleifen, Eingaben, Ausgaben etc. eingeführt. (Ich muss das Programm auch schreiben :-))