www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "C/C++" - call by reference fkt in class
call by reference fkt in class < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

call by reference fkt in class: Hilfestellung, Korrektur
Status: (Frage) beantwortet Status 
Datum: 19:02 Di 08.01.2013
Autor: pina7

Aufgabe
Ein Kredit wird in festen (konstanten) monatlichen Raten zurückgezahlt. Schreiben Sie ein Programm, das die Kreditsumme (Kapital), den (jährlichen) Zinssatz und die monatliche Zahlung (Rate = Zinsen + Tilgung) einliest, daraus Restschuld, Zinsen und Tilgung am Ende jedes Monat berechnet und diese Daten jeweils in einer Zeile als tabellarische Übersicht hinter einer Monats-Nr. ausgibt, bis der Kredit vollständig zurückgezahlt ist.
Der Kredit soll in einer Klasse verwaltet werden. Überlegen Sie sich, welche Informationen die Klasse benötigt. Die Klasse soll über eine Funktion „getCredit“ verfügen, die die monatliche Tilgung als Parameter entgegennimmt. Außerdem sollen die Restschuld, die Zinsen, sowie die Tilgung an den Aufrufer zurückgegeben werden. Sehen Sie sich dazu das Kapitel „Call by Reference“ im Skript an. Die Funktion selbst soll vom Typ bool sein und so lange „false“ zurückgeben, bis die Restschuld auf 0 gesunken ist.
Hinweise: Es gilt: Monatszinsen = Kapital * Jahreszinssatz/100/12. Außerdem ist zu beachten, dass die letzte Rate ein Sonderfall ist, da die Rate die Restschuld nicht übersteigen sollte.
Beispiel: Kapital = 50.000 €, Zinssatz = 4% pro Jahr, Monatsrate = 300 €, Ausgabe:
Monat     Restschuld [Euro]     Zinsen [Euro]    Tilgung[Euro]
1            49866.67                 166.67              133.33
2            49732.89                 166.22              133.78
...           ...                            ...                    ...
244        204.72                     1.68                 298.32
245        0.00                         0.68                 204.72

Hallo. Bei dieser Aufgabe benötige ich bitte Hilfe bzgl. der bool Funktion. Bisher liefert mir mein Programm nur die erste Zeile und hierbei ist auch die Restschuld nicht richtig. Ebenso habe ich noch keine gute Möglichkeit zum Formatieren der Tabelle (Zeilenabstand) gefunden. Dankeschön
1:
2: #pragma once
3: #include "stdafx.h"
4:
5: class Credit
6: {
7: protected:
8: float m_Kapital;
9: float m_Zinssatz; 
10: float m_Rate; 
11:
12: public:
13: float Kapital;
14: float Zinssatz; 
15: float Rate; 
16:
17: float Restschuld; // Restschuld = Kapital-Rate
18: float Zinsen; //Zinsen = Rate-Tilgung;
19: float Tilgung; //Tilgung = Rate-Zinsen;
20: int Monat;
21:
22: void setValues(float Kapital, float Zinssatz, float Rate);
23:
24: bool getCredit();
25: };
26:
27:
28: #include "stdafx.h"
29: #include <iostream>
30: #include "Credit.h"
31: #include <iomanip>
32:
33: using namespace std;
34:
35: void Credit::setValues(float Kapital, float Zinssatz, float Rate)
36: {
37: m_Kapital = Kapital;
38: m_Zinssatz = Zinssatz;
39: m_Rate = Rate;
40: }
41:
42: bool Credit::getCredit()
43: {
44: Restschuld = Kapital-Rate;
45: Monat = 0;
46:
47: if (Restschuld > 0)
48: {
49: float neueRestschuld = Restschuld;
50: Zinsen = Kapital*Zinssatz/100/12;
51: Tilgung = Rate-Zinsen;
52: neueRestschuld = Kapital-Rate;
53:
54: cout << setw(10) << Monat << fixed << setprecision(2) << "     " << Restschuld << "     " << fixed << setprecision(2) << "     " << Zinsen << "     " << fixed << setprecision(2) << "      " << Tilgung << "      " << endl << endl;
55:
56: Monat ++; 
57:
58: return false;
59: }
60:
61: else if (Restschuld == 0)
62: {
63: return true;
64: }
65: }
66:
67: int _tmain(int argc, _TCHAR* argv[])
68: {
69: Credit MyCredit;  
70:
71: cout << "Kreditrueckzahlung" << endl << endl;
72: cout << "Bitte Kapital eingeben: " << endl << endl;
73: cin >> MyCredit.Kapital;
74: cout << "Bitte Zinssatz eingeben: " << endl << endl;
75: cin >> MyCredit.Zinssatz;
76: cout << "Bitte Rate eingeben: " << endl << endl;
77: cin >> MyCredit.Rate;
78:
79: MyCredit.setValues(MyCredit.Kapital,MyCredit.Zinssatz,MyCredit.Rate);
80:
81: cout << setw(10) << "Monat   " << "   Restschuld [Euro]   " << "   Zinsen [Euro]   " << "   Tilgung [Euro]   " << endl << endl;
82:
83: MyCredit.getCredit();
84:
85: system("pause");
86: return 0;
87: }


        
Bezug
call by reference fkt in class: Antwort
Status: (Antwort) fertig Status 
Datum: 19:58 Di 08.01.2013
Autor: MathePower

Hallo pina7,

> Ein Kredit wird in festen (konstanten) monatlichen Raten
> zurückgezahlt. Schreiben Sie ein Programm, das die
> Kreditsumme (Kapital), den (jährlichen) Zinssatz und die
> monatliche Zahlung (Rate = Zinsen + Tilgung) einliest,
> daraus Restschuld, Zinsen und Tilgung am Ende jedes Monat
> berechnet und diese Daten jeweils in einer Zeile als
> tabellarische Übersicht hinter einer Monats-Nr. ausgibt,
> bis der Kredit vollständig zurückgezahlt ist.
>  Der Kredit soll in einer Klasse verwaltet werden.
> Überlegen Sie sich, welche Informationen die Klasse
> benötigt. Die Klasse soll über eine Funktion
> „getCredit“ verfügen, die die monatliche Tilgung als
> Parameter entgegennimmt. Außerdem sollen die Restschuld,
> die Zinsen, sowie die Tilgung an den Aufrufer
> zurückgegeben werden. Sehen Sie sich dazu das Kapitel
> „Call by Reference“ im Skript an. Die Funktion selbst
> soll vom Typ bool sein und so lange „false“
> zurückgeben, bis die Restschuld auf 0 gesunken ist.
>  Hinweise: Es gilt: Monatszinsen = Kapital *
> Jahreszinssatz/100/12. Außerdem ist zu beachten, dass die
> letzte Rate ein Sonderfall ist, da die Rate die Restschuld
> nicht übersteigen sollte.
>  Beispiel: Kapital = 50.000 €, Zinssatz = 4% pro Jahr,
> Monatsrate = 300 €, Ausgabe:
>  Monat     Restschuld [Euro]     Zinsen [Euro]    
> Tilgung[Euro]
> 1            49866.67                 166.67              
> 133.33
>  2            49732.89                 166.22              
> 133.78
>  ...           ...                            ...          
>          ...
>  244        204.72                     1.68                
> 298.32
>  245        0.00                         0.68              
>   204.72
>  Hallo. Bei dieser Aufgabe benötige ich bitte Hilfe bzgl.
> der bool Funktion. Bisher liefert mir mein Programm nur die
> erste Zeile und hierbei ist auch die Restschuld nicht
> richtig. Ebenso habe ich noch keine gute Möglichkeit zum
> Formatieren der Tabelle (Zeilenabstand) gefunden.
> Dankeschön
>  
1:
2: >  #pragma once
3: >  #include "stdafx.h"
4: >  
5: > class Credit
6: >  {
7: >  protected:
8: >   float m_Kapital;
9: >   float m_Zinssatz; 
10: >  float m_Rate; 
11:
12: > public:
13: >   float Kapital;
14: >   float Zinssatz; 
15: >  float Rate; 
16:
17: >  float Restschuld; // Restschuld = Kapital-Rate
18: >   float Zinsen; //Zinsen = Rate-Tilgung;
19: >   float Tilgung; //Tilgung = Rate-Zinsen;
20: >   int Monat;
21: >  
22: >  void setValues(float Kapital, float Zinssatz, float 
23: > Rate);
24: >  
25: >  bool getCredit();
26: >  };
27: >  
28:
29: > #include "stdafx.h"
30: >  #include <iostream>
31: >  #include "Credit.h"
32: >  #include <iomanip>
33: >  
34: > using namespace std;
35: >  
36: > void Credit::setValues(float Kapital, float Zinssatz, float 
37: > Rate)
38: >  {
39: >   m_Kapital = Kapital;
40: >   m_Zinssatz = Zinssatz;
41: >   m_Rate = Rate;
42: >  }
43: >  
44: > bool Credit::getCredit()
45: >  {
46: >   Restschuld = Kapital-Rate;
47: >   Monat = 0;
48: >  
49: >  if (Restschuld > 0)
50: >   {
51: >   float neueRestschuld = Restschuld;
52: >   Zinsen = Kapital*Zinssatz/100/12;
53: >   Tilgung = Rate-Zinsen;
54: >   neueRestschuld = Kapital-Rate;
55: >  
56: >  cout << setw(10) << Monat << fixed << setprecision(2) << 
57: > "     " << Restschuld << "     " << fixed << 
58: > setprecision(2) << "     " << Zinsen << "     " << fixed << 
59: > setprecision(2) << "      " << Tilgung << "      " << endl 
60: > << endl;
61: >  
62: >  Monat ++; 
63:
64: >  return false;
65: >   }
66: >  
67: >  else if (Restschuld == 0)
68: >   {
69: >   return true;
70: >   }
71: >  }
72: >  
73: > int _tmain(int argc, _TCHAR* argv[])
74: >  {
75: >   Credit MyCredit;  
76:
77: >  cout << "Kreditrueckzahlung" << endl << endl;
78: >   cout << "Bitte Kapital eingeben: " << endl << endl;
79: >   cin >> MyCredit.Kapital;
80: >   cout << "Bitte Zinssatz eingeben: " << endl << endl;
81: >   cin >> MyCredit.Zinssatz;
82: >   cout << "Bitte Rate eingeben: " << endl << endl;
83: >   cin >> MyCredit.Rate;
84: >  
85: >  MyCredit.setValues(MyCredit.Kapital,MyCredit.Zinssatz,MyCredit.Rate);
86: >  
87: >  cout << setw(10) << "Monat   " << "   Restschuld [Euro]   
88: > " << "   Zinsen [Euro]   " << "   Tilgung [Euro]   " << 
89: > endl << endl;
90: >  
91: >  MyCredit.getCredit();
92: >  
93: >  system("pause");
94: >   return 0;
95: >  }
96: >  



Die Funktionen setValues und getCredit sind etwas abzuändern.

In der Funktion setValues ist der Monat auf 0
und die Restschuld dem Kapital zu setzen.

Dann ist die Funktion getCredit wie folgt zu ändern:


1:
2: bool Credit::getCredit()
3:   {
4:    //Restschuld = Kapital-Rate;
5:    //Monat = 0;
6:   
7:   if (Restschuld > 0)
8:    {
9:                 // Zinsen sind von der Restschuld zu berechnen
10:
11:    float neueRestschuld = Restschuld;
12:
13:    Zinsen = Restschuld*Zinssatz/100/12;
14:    Tilgung = Rate-Zinsen;
15:    neueRestschuld =Restschuld-Rate;
16:
17:                 // Erhöhe die Klassenvariable Monat um 1
18:                Monat++;
19:
20:   cout << setw(10) << Monat << fixed << setprecision(2) << 
21:  "     " << Restschuld << "     " << fixed << 
22:  setprecision(2) << "     " << Zinsen << "     " << fixed << 
23:  setprecision(2) << "      " << Tilgung << "      " << endl 
24:  << endl;
25:   
26:   //Monat ++; 
27:                // Setze Restschuld auf neueRestschuld
28:               Restschuld=neueRestschuld;
29:  
30:   return false;
31:    }
32:   
33:   else if (Restschuld == 0)
34:    {
35:    return true;
36:    }
37:   }



Gruss
MathePower

Bezug
                
Bezug
call by reference fkt in class: Korrektur
Status: (Frage) beantwortet Status 
Datum: 21:12 Di 08.01.2013
Autor: pina7

1:
2: class Credit
3: {
4: protected:
5: float m_Kapital;
6: float m_Zinssatz; 
7: float m_Rate; 
8:     
9: public:
10: float Kapital;
11: float Zinssatz; 
12: float Rate; 
13: int Monat;
14:     float Restschuld; // Restschuld = Kapital-Rate
15:
16: float Zinsen; //Zinsen = Rate-Tilgung;
17: float Tilgung; //Tilgung = Rate-Zinsen;
18:
19: void setValues();
20: bool getCredit();
21: };
22:
23:
24: #include "stdafx.h"
25: #include <iostream>
26: #include "Credit.h"
27: #include <iomanip>
28:
29: using namespace std;
30:
31: void Credit::setValues()
32: {
33: m_Kapital = Kapital;
34: m_Zinssatz = Zinssatz;
35: m_Rate = Rate;
36: Monat = 0;
37: Restschuld = Kapital;
38: }
39:
40: bool Credit::getCredit()
41: {
42: if (Restschuld > 0)
43: {
44: float neueRestschuld = Restschuld;
45: Zinsen = Restschuld*Zinssatz/100/12; // Zinsen sind von der Restschuld zu berechnen 
46: Tilgung = Rate-Zinsen;
47: neueRestschuld = Restschuld-Rate;
48:         Monat ++; // Erhöhe die Klassenvariable Monat um 1
49:
50: cout << Monat << fixed << setprecision(2) << "          " << Restschuld << "        " << fixed << setprecision(2) << "         " << Zinsen << "     " << fixed << setprecision(2) << "          " << Tilgung << "        " << endl << endl;
51:
52:       Restschuld=neueRestschuld; // Setze Restschuld auf neueRestschuld
53:
54: return false;
55: }
56:
57: else if (Restschuld == 0)
58: {
59: return true;
60: }
61: }
62:
63: int _tmain(int argc, _TCHAR* argv[])
64: {
65: Credit MyCredit;  
66:
67: cout << "Kreditrueckzahlung" << endl << endl;
68: cout << "Bitte Kapital eingeben:" << endl << endl;
69: cin >> MyCredit.Kapital;
70: cout << "Bitte Zinssatz eingeben:" << endl << endl;
71: cin >> MyCredit.Zinssatz;
72: cout << "Bitte Rate eingeben:" << endl << endl;
73: cin >> MyCredit.Rate;
74:
75: MyCredit.setValues();
76:
77: cout << "Monat   " << "   Restschuld [Euro]   " << "   Zinsen [Euro]   " << "   Tilgung [Euro]   " << endl << endl;
78:
79: MyCredit.getCredit();
80:
81: system("pause");
82: return 0;
83: }


Hallo und danke für die Hilfe. Es bleibt leider bei einem Funktionsdurchlauf, ich erhalte nur die erste Ausgabe. Was passt hier noch nicht? Danke

Bezug
                        
Bezug
call by reference fkt in class: Antwort
Status: (Antwort) fertig Status 
Datum: 21:20 Di 08.01.2013
Autor: MathePower

Hallo pina7,

>
1:
2: >  class Credit
3: >  {
4: >  protected:
5: >   float m_Kapital;
6: >   float m_Zinssatz; 
7: >  float m_Rate; 
8:
9: > public:
10: >   float Kapital;
11: >   float Zinssatz; 
12: >  float Rate; 
13: >  int Monat;
14: >      float Restschuld; // Restschuld = Kapital-Rate
15: >  
16: >  float Zinsen; //Zinsen = Rate-Tilgung;
17: >   float Tilgung; //Tilgung = Rate-Zinsen;
18: >  
19: >  void setValues();
20: >   bool getCredit();
21: >  };
22: >  
23:
24: > #include "stdafx.h"
25: >  #include <iostream>
26: >  #include "Credit.h"
27: >  #include <iomanip>
28: >  
29: > using namespace std;
30: >  
31: > void Credit::setValues()
32: >  {
33: >   m_Kapital = Kapital;
34: >   m_Zinssatz = Zinssatz;
35: >   m_Rate = Rate;
36: >   Monat = 0;
37: >   Restschuld = Kapital;
38: >  }
39: >  
40: > bool Credit::getCredit()
41: >  {
42: >   if (Restschuld > 0)
43: >   {
44: >   float neueRestschuld = Restschuld;
45: >   Zinsen = Restschuld*Zinssatz/100/12; // Zinsen sind von 
46: > der Restschuld zu berechnen 
47: >  Tilgung = Rate-Zinsen;
48: >   neueRestschuld = Restschuld-Rate;
49: >          Monat ++; // Erhöhe die Klassenvariable Monat um 
50: > 1
51: >  
52: >  cout << Monat << fixed << setprecision(2) << "          " 
53: > << Restschuld << "        " << fixed << setprecision(2) << 
54: > "         " << Zinsen << "     " << fixed << 
55: > setprecision(2) << "          " << Tilgung << "        " << 
56: > endl << endl;
57: >  
58: >  Restschuld=neueRestschuld; // Setze Restschuld auf 
59: > neueRestschuld
60: >  
61: >  return false;
62: >   }
63: >  
64: >  else if (Restschuld == 0)
65: >   {
66: >   return true;
67: >   }
68: >  }
69: >  
70: > int _tmain(int argc, _TCHAR* argv[])
71: >  {
72: >   Credit MyCredit;  
73:
74: >  cout << "Kreditrueckzahlung" << endl << endl;
75: >   cout << "Bitte Kapital eingeben:" << endl << endl;
76: >   cin >> MyCredit.Kapital;
77: >   cout << "Bitte Zinssatz eingeben:" << endl << endl;
78: >   cin >> MyCredit.Zinssatz;
79: >   cout << "Bitte Rate eingeben:" << endl << endl;
80: >   cin >> MyCredit.Rate;
81: >  
82: >  MyCredit.setValues();
83: >  
84: >  cout << "Monat   " << "   Restschuld [Euro]   " << "   
85: > Zinsen [Euro]   " << "   Tilgung [Euro]   " << endl << 
86: > endl;
87: >  
88: >  MyCredit.getCredit();
89: >  
90: >  system("pause");
91: >   return 0;
92: >  }
93: >  


>  
> Hallo und danke für die Hilfe. Es bleibt leider bei einem
> Funktionsdurchlauf, ich erhalte nur die erste Ausgabe. Was
> passt hier noch nicht? Danke


Der Aufruf der Funktion getCredit ist in eine Schleife zu verpacken.


Gruss
MathePower

Bezug
                                
Bezug
call by reference fkt in class: noch nicht ganz richtig
Status: (Frage) beantwortet Status 
Datum: 00:27 Mi 09.01.2013
Autor: pina7

Hallo,

nun habe ich das Programm soweit, dass es mehrfach durchläuft.
Jedoch liefert es andere Ergebnisse als das Beispiel aus der Aufgabe.
Wenn ich die Werte 50000, 4% und 300 eingebe ist meine letzte ausgegebene Zeile
167     200.00      0.67     299.33

im Beispiel der Aufgabe ging es bis Monat 245.

Ich musste (habe) die Variablen Restschuld und neueRestschuld global definiert, sonst habe ich keinen Weg zum Schleifenverlauf "Aufruf der getPrice Funktion" gefunden. Könnte das daran liegen? Oder ist es, weil der Sonderfall letzte Rate (ich wüsste nicht wie ich das machen soll) nicht behandelt wurde?
Vielen Dank
1:
2: class Credit
3: {
4: protected:
5: float m_Kapital;
6: float m_Zinssatz; 
7: float m_Rate; 
8:     
9: public:
10: float Kapital;
11: float Zinssatz; 
12: float Rate; 
13: int   Monat;
14:
15: float Zinsen; //Zinsen = Rate-Tilgung;
16: float Tilgung; //Tilgung = Rate-Zinsen;
17:
18: void setValues();
19: bool getCredit(float Restschuld);
20: };
21:
22: #include "stdafx.h"
23: #include <iostream>
24: #include "Credit.h"
25: #include <iomanip>
26:
27: using namespace std;
28:
29: float Restschuld;
30: float neueRestschuld;
31:
32: void Credit::setValues()
33: {
34: m_Kapital = Kapital;
35: m_Zinssatz = Zinssatz;
36: m_Rate = Rate;
37: Monat = 0;
38: Restschuld = Kapital;
39: }
40:
41: bool Credit::getCredit(float Restschuld)
42: {
43: if (Restschuld > 0)
44: {
45: neueRestschuld = Restschuld;
46: Zinsen = Restschuld*Zinssatz/100/12; // Zinsen sind von der Restschuld zu berechnen 
47: Tilgung = Rate-Zinsen;
48: neueRestschuld = Restschuld-Rate;
49: Monat ++; // Erhöhe die Klassenvariable Monat um 1
50:
51: cout << Monat << fixed << setprecision(2) << "          " << Restschuld << "        " << fixed << setprecision(2) << "         " << Zinsen << "     " << fixed << setprecision(2) << "          " << Tilgung << "        " << endl << endl;
52:
53:   Restschuld=neueRestschuld; // Setze Restschuld auf neueRestschuld
54:
55: return Restschuld, false;
56: }
57:
58: else if (Restschuld == 0)
59: {
60: return true;
61: }
62: }
63:
64: int _tmain(int argc, _TCHAR* argv[])
65: {
66: int Programmwiederholung = 0;
67:
68: do
69: {
70:
71: system("cls");
72:
73: Credit MyCredit;  
74:
75: cout << "Kreditrueckzahlung" << endl << endl;
76: cout << "Bitte Kapital eingeben:" << endl << endl;
77: cin >> MyCredit.Kapital;
78: cout << "Bitte Zinssatz eingeben:" << endl << endl;
79: cin >> MyCredit.Zinssatz;
80: cout << "Bitte Rate eingeben:" << endl << endl;
81: cin >> MyCredit.Rate;
82:
83: MyCredit.setValues();
84:
85: cout << "Monat   " << "   Restschuld [Euro]   " << "   Zinsen [Euro]   " << "   Tilgung [Euro]   " << endl << endl;
86:
87: do
88: {
89: MyCredit.getCredit(Restschuld);
90: Restschuld=neueRestschuld;
91: }while (Restschuld > 0);
92:
93: cout << "0 fuer erneute Berechnung, andernfalls 1 eingeben:" << endl << endl;
94: cin >> Programmwiederholung;
95:
96: }while (Programmwiederholung == 0);
97:
98: system("pause");
99: return 0;
100:
101: }




Bezug
                                        
Bezug
call by reference fkt in class: Antwort
Status: (Antwort) fertig Status 
Datum: 15:26 Mi 09.01.2013
Autor: MathePower

Hallo pina7,

> Hallo,
>  
> nun habe ich das Programm soweit, dass es mehrfach
> durchläuft.
> Jedoch liefert es andere Ergebnisse als das Beispiel aus
> der Aufgabe.
>  Wenn ich die Werte 50000, 4% und 300 eingebe ist meine
> letzte ausgegebene Zeile
> 167     200.00      0.67     299.33
>  
> im Beispiel der Aufgabe ging es bis Monat 245.
>  
> Ich musste (habe) die Variablen Restschuld und
> neueRestschuld global definiert, sonst habe ich keinen Weg


Die Variable "Restschuld" ist doch eine Klassenvariable,
daher ist sie nicht global zu definieren.


> zum Schleifenverlauf "Aufruf der getPrice Funktion"


Hier bringst Du etwas durcheinander.
Die getPrice-Funktion war beim Spielzeugladen gefragt.


> gefunden. Könnte das daran liegen? Oder ist es, weil der
> Sonderfall letzte Rate (ich wüsste nicht wie ich das
> machen soll) nicht behandelt wurde?

Nein.

Die Funktion getCredit() hat keinen Parameter.

Der mehrfache Schleifendurchlauf
wird durch eine einfache Schleife realisiert:

1:
2: while ( !MyCredit.getCredit())
3: {
4: }


Dann ist ebn noch der Fall der letzten Rate zu behandeln.


>  Vielen Dank
>  
1:
2: >  class Credit
3: >  {
4: >  protected:
5: >   float m_Kapital;
6: >   float m_Zinssatz; 
7: >  float m_Rate; 
8:
9: > public:
10: >   float Kapital;
11: >   float Zinssatz; 
12: >  float Rate; 
13: >  int   Monat;
14: >  
15: >  float Zinsen; //Zinsen = Rate-Tilgung;
16: >   float Tilgung; //Tilgung = Rate-Zinsen;
17: >  
18: >  void setValues();
19: >   bool getCredit(float Restschuld);
20: >  };
21: >  
22: > #include "stdafx.h"
23: >  #include <iostream>
24: >  #include "Credit.h"
25: >  #include <iomanip>
26: >  
27: > using namespace std;
28: >  
29: > float Restschuld;
30: >  float neueRestschuld;
31: >  
32: > void Credit::setValues()
33: >  {
34: >   m_Kapital = Kapital;
35: >   m_Zinssatz = Zinssatz;
36: >   m_Rate = Rate;
37: >   Monat = 0;
38: >   Restschuld = Kapital;
39: >  }
40: >  
41: > bool Credit::getCredit(float Restschuld)
42: >  {
43: >   if (Restschuld > 0)
44: >   {
45: >   neueRestschuld = Restschuld;
46: >   Zinsen = Restschuld*Zinssatz/100/12; // Zinsen sind von 
47: > der Restschuld zu berechnen 
48: >  Tilgung = Rate-Zinsen;
49: >   neueRestschuld = Restschuld-Rate;
50: >   Monat ++; // Erhöhe die Klassenvariable Monat um 1
51: >  
52: >  cout << Monat << fixed << setprecision(2) << "          
53: > " << Restschuld << "        " << fixed << setprecision(2) 
54: > << "         " << Zinsen << "     " << fixed << 
55: > setprecision(2) << "          " << Tilgung << "        " << 
56: > endl << endl;
57: >  
58: >  Restschuld=neueRestschuld; // Setze Restschuld auf 
59: > neueRestschuld
60: >  
61: >  return Restschuld, false;
62: >   }
63: >  
64: >  else if (Restschuld == 0)
65: >   {
66: >   return true;
67: >   }
68: >  }
69: >  
70: > int _tmain(int argc, _TCHAR* argv[])
71: >  {
72: >   int Programmwiederholung = 0;
73: >  
74: >  do
75: >   {
76: >  
77: >  system("cls");
78: >  
79: >  Credit MyCredit;  
80:
81: >  cout << "Kreditrueckzahlung" << endl << endl;
82: >   cout << "Bitte Kapital eingeben:" << endl << endl;
83: >   cin >> MyCredit.Kapital;
84: >   cout << "Bitte Zinssatz eingeben:" << endl << endl;
85: >   cin >> MyCredit.Zinssatz;
86: >   cout << "Bitte Rate eingeben:" << endl << endl;
87: >   cin >> MyCredit.Rate;
88: >  
89: >  MyCredit.setValues();
90: >  
91: >  cout << "Monat   " << "   Restschuld [Euro]   " << "   
92: > Zinsen [Euro]   " << "   Tilgung [Euro]   " << endl << 
93: > endl;
94: >  
95: >  do
96: >   {
97: >   MyCredit.getCredit(Restschuld);
98: >   Restschuld=neueRestschuld;
99: >   }while (Restschuld > 0);
100: >  
101: >  cout << "0 fuer erneute Berechnung, andernfalls 1 
102: > eingeben:" << endl << endl;
103: >   cin >> Programmwiederholung;
104: >  
105: >  }while (Programmwiederholung == 0);
106: >  
107: >  system("pause");
108: >   return 0;
109: >  
110: > }
111: >  

>  


Gruss
MathePower  

Bezug
                                                
Bezug
call by reference fkt in class: Rückfrage
Status: (Frage) beantwortet Status 
Datum: 20:27 Mi 09.01.2013
Autor: pina7

Hallo und erneut vielen Dank. Der Hinweis mit while (!MyCredit.getCredit()){} ist schön, das kannte ich so noch nicht.
Aber... es bleibt dabei, dass das Programm bei Zeile 167 schon beim Ende der Rückzahlung angekommen ist. Ich habe das mit Excel (Sonderfall letzte Rate nicht berücksichtigt) überprüft, und es sind 245 Monate wie im Beispiel der Aufgabe. Desweiteren weiß ich nicht, wie man die letzte Rate berechnet, habe hierzu keine Formel gefunden. Viele Grüße

1:
2: class Credit
3: {
4: protected:
5: float m_Kapital;
6: float m_Zinssatz; 
7: float m_Rate; 
8:     
9: public:
10: float Kapital;
11: float Zinssatz; 
12: float Rate; 
13: int   Monat;
14:
15: float Restschuld;
16: float Zinsen; //Zinsen = Rate-Tilgung;
17: float Tilgung; //Tilgung = Rate-Zinsen;
18:
19: void setValues();
20: bool getCredit();
21: };
22:
23: #include "stdafx.h"
24: #include <iostream>
25: #include "Credit.h"
26: #include <iomanip>
27:
28: using namespace std;
29:
30: void Credit::setValues()
31: {
32: m_Kapital = Kapital;
33: m_Zinssatz = Zinssatz;
34: m_Rate = Rate;
35: Monat = 0;
36: Restschuld = Kapital;
37: }
38:
39: bool Credit::getCredit()
40: {
41: if (Restschuld > 0)
42: {
43: float neueRestschuld;
44: neueRestschuld = Restschuld;
45: Zinsen = Restschuld*Zinssatz/100/12; // Zinsen sind von der Restschuld zu berechnen 
46: Tilgung = Rate-Zinsen;
47: neueRestschuld = Restschuld-Rate;
48:
49: Monat ++; // Erhöhe die Klassenvariable Monat um 1
50:
51: cout << Monat << fixed << setprecision(2) << "          " << Restschuld << "        " << fixed << setprecision(2) << "         " << Zinsen << "     " << fixed << setprecision(2) << "          " << Tilgung << "        " << endl << endl;
52:
53:   Restschuld=neueRestschuld; // Setze Restschuld auf neueRestschuld
54:
55: return false;
56: }
57:
58: else if (Restschuld == 0)
59: {
60: return true;
61: }
62: }
63:
64: int _tmain(int argc, _TCHAR* argv[])
65: {
66: int Programmwiederholung = 0;
67:
68: do
69: {
70: system("cls");
71:
72: Credit MyCredit;  
73:
74: cout << "Kreditrueckzahlung" << endl << endl;
75: cout << "Bitte Kapital eingeben:" << endl << endl;
76: cin >> MyCredit.Kapital;
77: cout << "Bitte Zinssatz eingeben:" << endl << endl;
78: cin >> MyCredit.Zinssatz;
79: cout << "Bitte Rate eingeben:" << endl << endl;
80: cin >> MyCredit.Rate;
81:
82: MyCredit.setValues();
83:
84: cout << "Monat   " << "   Restschuld [Euro]   " << "   Zinsen [Euro]   " << "   Tilgung [Euro]   " << endl << endl;
85:
86: while (!MyCredit.getCredit())
87: {
88: }
89:
90: cout << "0 fuer erneute Berechnung, andernfalls 1 eingeben:" << endl << endl;
91: cin >> Programmwiederholung;
92:
93: }while (Programmwiederholung == 0);
94:
95: system("pause");
96: return 0;
97: }


Bezug
                                                        
Bezug
call by reference fkt in class: Antwort
Status: (Antwort) fertig Status 
Datum: 20:37 Mi 09.01.2013
Autor: MathePower

Hallo pina7,

> Hallo und erneut vielen Dank. Der Hinweis mit while
> (!MyCredit.getCredit()){} ist schön, das kannte ich so
> noch nicht.
> Aber... es bleibt dabei, dass das Programm bei Zeile 167


Die neue Restschuld berechnet sich doch so:

1:
2: neueRestschuld=Restschuld-Tilgung;


In Deinem Programmcode wird die neue Restschuld so berechnet:

1:
2: neueRestschuld=Restschuld-Rate;



> schon beim Ende der Rückzahlung angekommen ist. Ich habe
> das mit Excel (Sonderfall letzte Rate nicht
> berücksichtigt) überprüft, und es sind 245 Monate wie im
> Beispiel der Aufgabe. Desweiteren weiß ich nicht, wie man
> die letzte Rate berechnet, habe hierzu keine Formel
> gefunden. Viele Grüße
>  
1:
2: >  class Credit
3: >  {
4: >  protected:
5: >   float m_Kapital;
6: >   float m_Zinssatz; 
7: >  float m_Rate; 
8:
9: > public:
10: >   float Kapital;
11: >   float Zinssatz; 
12: >  float Rate; 
13: >  int   Monat;
14: >  
15: >  float Restschuld;
16: >   float Zinsen; //Zinsen = Rate-Tilgung;
17: >   float Tilgung; //Tilgung = Rate-Zinsen;
18: >  
19: >  void setValues();
20: >   bool getCredit();
21: >  };
22: >  
23: > #include "stdafx.h"
24: >  #include <iostream>
25: >  #include "Credit.h"
26: >  #include <iomanip>
27: >  
28: > using namespace std;
29: >  
30: > void Credit::setValues()
31: >  {
32: >   m_Kapital = Kapital;
33: >   m_Zinssatz = Zinssatz;
34: >   m_Rate = Rate;
35: >   Monat = 0;
36: >   Restschuld = Kapital;
37: >  }
38: >  
39: > bool Credit::getCredit()
40: >  {
41: >   if (Restschuld > 0)
42: >   {
43: >   float neueRestschuld;
44: >   neueRestschuld = Restschuld;
45: >   Zinsen = Restschuld*Zinssatz/100/12; // Zinsen sind von 
46: > der Restschuld zu berechnen 
47: >  Tilgung = Rate-Zinsen;
48: >   neueRestschuld = Restschuld-Rate;
49: >  
50: >  Monat ++; // Erhöhe die Klassenvariable Monat um 1
51: >  
52: >  cout << Monat << fixed << setprecision(2) << "          
53: > " << Restschuld << "        " << fixed << setprecision(2) 
54: > << "         " << Zinsen << "     " << fixed << 
55: > setprecision(2) << "          " << Tilgung << "        " << 
56: > endl << endl;
57: >  
58: >  Restschuld=neueRestschuld; // Setze Restschuld auf 
59: > neueRestschuld
60: >  
61: >  return false;
62: >   }
63: >  
64: >  else if (Restschuld == 0)
65: >   {
66: >   return true;
67: >   }
68: >  }
69: >  
70: > int _tmain(int argc, _TCHAR* argv[])
71: >  {
72: >   int Programmwiederholung = 0;
73: >  
74: >  do
75: >   {
76: >   system("cls");
77: >  
78: >  Credit MyCredit;  
79:
80: >  cout << "Kreditrueckzahlung" << endl << endl;
81: >   cout << "Bitte Kapital eingeben:" << endl << endl;
82: >   cin >> MyCredit.Kapital;
83: >   cout << "Bitte Zinssatz eingeben:" << endl << endl;
84: >   cin >> MyCredit.Zinssatz;
85: >   cout << "Bitte Rate eingeben:" << endl << endl;
86: >   cin >> MyCredit.Rate;
87: >  
88: >  MyCredit.setValues();
89: >  
90: >  cout << "Monat   " << "   Restschuld [Euro]   " << "   
91: > Zinsen [Euro]   " << "   Tilgung [Euro]   " << endl << 
92: > endl;
93: >  
94: >  while (!MyCredit.getCredit())
95: >   {
96: >   }
97: >  
98: >  cout << "0 fuer erneute Berechnung, andernfalls 1 
99: > eingeben:" << endl << endl;
100: >   cin >> Programmwiederholung;
101: >  
102: >  }while (Programmwiederholung == 0);
103: >  
104: >  system("pause");
105: >   return 0;
106: >  }
107: >  



Gruss
MathePower

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorhilfe.de