Zinsrechnung und Schleife



  • http://www.siteupload.de/p554204-kreditapdf.html

    da ist meine Aufgabe. Und der Ausgabe-Bildschirm wurde uns mit rangehängt, damit wir sehen, wie es nachher aussehen soll...

    Und da steht 83,33



  • Da stehen doch auch alle nötigen Formeln in der Aufgabe - inklusive der Zinsrate (der Nominalzins gilt pro Jahr, also mußt du ihn noch durch die Ratenzahl dividieren - "Zinsen=Betrag*Nominalzins/100/Ratenzahl;").



  • 😮 *schäm* das hatte ich total übersehen...

    Ist meine Schleife soweit den richtig? *lieb frag*



  • Soweit ich das überblicke, sieht das gut aus. Allerdings fehlt noch die "neue Seite"-Erkennung, die in der Aufgabe gefordert ist (nach jeweils 12 Raten die Schleife unterbrechen und auf Eingabe warten).



  • 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...


Anmelden zum Antworten