Problem bei C++ Programm
-
Hallo Comuunity Mitglieder,
ich habe ein Problem bei einem C++ Programm. Hier erstmal die Aufgabenstellung::
Schreiben Sie ein Programm:
welches nach Eingabe eines Anfangskapitals,
eines Zinssatzes,
eines jährlichen Sparvolumens (dieses Summe wird jedes Jahr vor der Verzinsung zusätzlich eingezahlt),
und
der Laufzeit in Jahrenfür jedes Jahr einen gesonderten Kontoauszug berechnet.
Dieser Kontoauszug soll den
jährlichen Zuwachs(nach Verzinsung) des Kapitals,
sowie den Zinsgewinn,
als auch das angesparte Kapital(nach Verzinsung) selbst enthalten.Schreiben Sie eine Funktion
void verzins(int n, float anfKap, float volumen, float zins, struct beleg dat[]),
die die Kontoauszüge für alle n Jahre berechnet.
Die Kontoauszüge sollen übersichtlich mit der Funktionvoid zeig(int n, struct beleg dat[])
angezeigt werden.
In main sind beide Funktionen zu testen.Eine mögliche Datenstruktur für den Kontoausszug eines Jahres könnte sein:
struct beleg
{
double delta;
// delta - Veränderung des Sparguthabens in einem Jahr
double zins;
double kapital;
};Hier mal mein aktueller Fortschritt.....
// StudentTyp.cpp #include <string> #include <iostream> using namespace std; struct beleg { double delta; // delta - Veränderung des Sparguthabens in einem Jahr double zinsg; double kapital; }; void einlesen() { double Kapital; double Zinssatz; double Sparvolumens; int Laufzeit; cout<<"Kapital?: ";cin>>Kapital; cout<<"Zinssatz?: ";cin>>Zinssatz; cout<<"Sparvolumens?: ";cin>>Sparvolumens; cout<<"Laufzeit?: ";cin>>Laufzeit; } void verzins(int n, float anfKap, float volumen, float zins, struct beleg []) { float delta; delta = ((anfKap+volumen)/100) * zins ; } void zeig(int n ,beleg b[]) { int i=0; for(i;i<n;i++) { cout<<"\nKontoauszug "<<i+1<<"\nZuwachs: "<<b[i].delta<<"\nZinsgewinn: "<<b[i].zinsg<<"\nKapital: "<<b[i].kapital<<endl; } } int main() { int n=0; beleg b[2]; for(n;n<1;n++) { einlesen(); cout<<endl; } zeig(n,b); cout<< endl << endl; system("PAUSE"); return 0; }Mein Problem ist, dass ich nicht weiß wie genau man das "void verzins" aufbaut und wie man es hinbekommt das er für jedes Jahr einen neuen Kontoauszug berechnet. !!! ICh weiß "main" ist zur zeit komplett falsch!!!
schonmal danke für eure Hilfe

-
Bist du sicher, dass das keine Aufgabe aus einem C-Lehrbuch ist? Sieht nämlich überhaupt nicht nach C++ aus. Falls auf dem Buch so etwas wie "C/C++", "in 21 Tagen", "für Dumme", "komplett", "von A bis Z" oder sinngemäß ähnliches steht, dann schmeiß es lieber gleich weg.
Mein Problem ist, dass ich nicht weiß wie genau man das "void verzins" aufbaut und wie man es hinbekommt das er für jedes Jahr einen neuen Kontoauszug berechnet.
Du gehst die Jahre in einer Schleife durch und erstellst für jedes Jahr den Kontoauszug.
-
Ne das ist eine Aufgabe aus meinem C++ Unterricht an einer Uni

-
berndderbernd schrieb:
Ne das ist eine Aufgabe aus meinem C++ Unterricht an einer Uni

Du meinst aus dem "C mit cout"-Unterricht, der böserweise C++ genannt wurde. Traurig. so etwas
.
-
Etwas sinnvolle Codeformatierung (Sauberes Einrücken und einheitliche Formatierungen) würde das Lesen wesentlich erleichtern.
berndderbernd schrieb:
Mein Problem ist, dass ich nicht weiß wie genau man das "void verzins" aufbaut...
Bevor du dir darüber den Kopf zerbrichst, solltest du überhaupt erst einmal dein restliches Programm fehlerfrei bekommen.
1. Dein "einlesen" liest nur temporäre Werte ein.
2. Du definierst ein Array von 2 Belegen, einlesen rufst du nur einmal auf.
3. Die Laufvariable einer for-Schleife definiert man üblicherweise auch in dieser (Ausnahmen hierzu sind eher selten).Zu deinen anderen Problem verweigere ich Hilfe, da du da noch nicht einmal einen Ansatz überlegt hast.
-
berndderbernd schrieb:
Ne das ist eine Aufgabe aus meinem C++ Unterricht an einer Uni

Jetzt mal ernsthaft, hol dir ein gutes Buch. Das ist gesünder als diese "Uni".
Die Idee mit meinem A-Style Formattierer war gar nicht so unsinnig

-
Für den Unterricht an meiner UNi kann ich nichts

So ich bin jetzt schon ein bisschen weiter jedoch heult er jetzt nach eingabe der Werte rum und bricht das Programm ab. Weiß jemand warum? Eigendlich heult er im Main rum, da ihm da i.was fehlt.....// StudentTyp.cpp #include <string> #include <iostream> using namespace std; struct beleg { double delta; // delta - Veränderung des Sparguthabens in einem Jahr double zinsg; double kapital; }; void einlesen() { double anfKap; double zins; double volumen; int n; cout<<"Kapital?: ";cin>>anfKap; cout<<"Zinssatz?: ";cin>>zins; cout<<"Sparvolumens?: ";cin>>volumen; cout<<"Laufzeit?: ";cin>>n; } beleg ein(float anfKap, float zins) { beleg b; b.kapital=anfKap; b.zinsg=zins; b.delta=anfKap*zins; return b; } void verzins(int n, float anfKap, float volumen, float zins, struct beleg b[]) { int i=2; for(i;i<n;i++) { b[i].delta = (b[i-1].kapital+volumen) *zins/100; b[i].zinsg=zins; b[i].kapital=b[i-1].kapital+volumen+b[i].delta; } } void zeig(int n ,beleg b[]) { int i=1; cout<<"\nAuszug \tZuwachs \tZinsgewinn \tKapital "<<endl; for(i;i<n;i++) { cout<<i<<"\t"<<b[i].delta<<"\t"<<b[i].zinsg<<"\t"<<b[i].kapital<<endl; } } int main() { int n=1; float anfKap, volumen, zins; beleg b[100]; einlesen(); cout<<endl; b[n]=ein(anfKap,zins); verzins(n,anfKap,volumen,zins,b); zeig(n,b); cout<< endl << endl; system("PAUSE"); return 0; }
-
Drück dich doch mal präzise aus. Glaubst du wirklich, irgendjemand könnte mit
jedoch heult er jetzt nach eingabe der Werte rum
oder
Eigendlich heult er im Main rum, da ihm da i.was fehlt
auch nur irgendetwas anfangen? Lies dir bitte mal den ersten und den dritten Link in meiner Signatur durch.
Auch ganz wichtig: Stelle Compilerwarnungen an, behandle Warnungen wie Fehler, denn bei Anfängern sind die Warnungen meistens auch welche. Dein Programm liefert bei meinem Compiler:
test.cc: In function ‘void verzins(int, float, float, float, beleg*)’: test.cc:41:8: warning: statement has no effect [-Wunused-value] for(i;i<n;i++) ^ test.cc: At global scope: test.cc:36:6: warning: unused parameter ‘anfKap’ [-Wunused-parameter] void verzins(int n, float anfKap, float volumen, float zins, struct beleg b[]) ^ test.cc: In function ‘void zeig(int, beleg*)’: test.cc:53:8: warning: statement has no effect [-Wunused-value] for(i;i<n;i++) ^ test.cc: In function ‘int main()’: test.cc:67:24: warning: ‘anfKap’ may be used uninitialized in this function [-Wuninitialized] b[n]=ein(anfKap,zins); ^ test.cc:67:24: warning: ‘zins’ may be used uninitialized in this function [-Wuninitialized] b[n]=ein(anfKap,zins); ^ test.cc:69:35: warning: ‘volumen’ may be used uninitialized in this function [-Wuninitialized] verzins(n,anfKap,volumen,zins,b);Und tatsächlich: Alles sind dicke Fehler.
Wobei ich geschummelt habe, denn eigentlich sagt er:
test.cc: In function ‘int main()’: test.cc:74:17: error: ‘system’ was not declared in this scope system("PAUSE"); ^Da du Funktionen benutzt, ohne die passenden Header einzubinden. Abgesehen davon, dass es sowieso Unsinn ist (siehe FAQ), ist system nämlich aus cstdlib. Verlasse dich niemals auf indirekte Abhängigkeiten.
-
Okay.. Also nach eingabe der Werte bricht er das Programm ab und gibts folgene Fehlermeldung aus.
Run-Time Check Failure #3 - The variable 'zins' is being used without being initialized.
Run-Time Check Failure #3 - The variable 'anfKap' is being used without being initialized.
Run-Time Check Failure #3 - The variable 'zins' is being used without being initialized.Damit bezieht er sich auf den Code im Main().
-
berndderbernd schrieb:
Okay.. Also nach eingabe der Werte bricht er das Programm ab und gibts folgene Fehlermeldung aus.
Run-Time Check Failure #3 - The variable 'zins' is being used without being initialized.
Run-Time Check Failure #3 - The variable 'anfKap' is being used without being initialized.
Run-Time Check Failure #3 - The variable 'zins' is being used without being initialized.Damit bezieht er sich auf den Code im Main().
Das ist doch eindeutig, was soll man dazu noch sagen? Außer dass der Compiler dir das auch so schon hätte sagen können, siehe mein edit im vorherigen Beitrag. Eine genaue Erklärung, warum dein Programm falsch ist, hat dir asc schon vor Stunden gegeben.
-
Sorry aber ich habe Informatik erst seit 3 Monaten und dann auch nur alle 2 Wochen und kann daher mit dieser Fehlermeldung überhaupt nichts anfangen. Ich weiß leider nicht was ich verändern muss & da ich das Programm nur einreichen kannm, wird es auch schwer jemanden an meiner Uni zu finden der mit meine Fehler erklären kann.
-
berndderbernd schrieb:
Sorry aber ich habe Informatik erst seit 3 Monaten und dann auch nur alle 2 Wochen und kann daher mit dieser Fehlermeldung überhaupt nichts anfangen. Ich weiß leider nicht was ich verändern muss & da ich das Programm nur einreichen kannm, wird es auch schwer jemanden an meiner Uni zu finden der mit meine Fehler erklären kann.
Tut mir leid, dann kann ich dir nicht anders helfen, als für dich deine Hausaufgabe zu machen. Und das mach ich nicht. Was ist an der Fehlermeldung und ascs Erklärung denn nicht verständlich? Verstehst du das Englisch nicht?
-
1>c:\users\marvin\documents\visual studio 2010\projects\bb\bb\bbb.cpp(58): warning C4700: Die nicht initialisierte lokale Variable "zins" wurde verwendet.
1>c:\users\marvin\documents\visual studio 2010\projects\bb\bb\bbb.cpp(58): warning C4700: Die nicht initialisierte lokale Variable "volumen" wurde verwendet.
1>c:\users\marvin\documents\visual studio 2010\projects\bb\bb\bbb.cpp(58): warning C4700: Die nicht initialisierte lokale Variable "anfKap" wurde verwendet.Das versteh ich einfach nicht, da ich sie ja initialisiert habe...
-
Wo initialisierst du denn deine Variablen? Du initialisierst keine dieser 3, du list auch keine Werte mittels std::cin>> für diese Variablen ein.
Das Problem ist, dass du invoid einlesen()geneau die 3 Variablen definiert hast, die du in main() definiert hast.
Praktisch so:
int main() { double anfkap, zins, volumen; //dann die Funktion void einlesen() //dort gibt es die gleichen Variablen, denen du über std::cin werte zuweistÜberleg mal genau, welchen du Werte zuweist und welchen nicht.
Wenn du lokale Variablen ohne initialisierung bzw. ohne dass du ihnen Werte zuweist, verwendest, dann ist das undefiniertes Verhalten.
Tipp: hol dir ein Buch, arbeite dieses sorgfältig durch. Denn dieser Code wird selbst nach Initialisierung deiner Variablen nicth das machen, wofür es programmiert ist.gruß
syntax
-
Ja die die ich in "void einlesen" habe denen weise ich ja darunter werte zu. Oder lasse sie einlesen.
In die, die ich in Main definiert habe denen weise ich keine werte zu aber wenn ich diese nicht dort definiere kann ich die funktion verzinse(...) nicht in main aufrufen ohne das das programm meckert das "anfkap,volumen, etc" nicht definiert sind.
-
berndderbernd schrieb:
Ja die die ich in "void einlesen" habe denen weise ich ja darunter werte zu. Oder lasse sie einlesen.
Prinzipiell ist aber eine Funktion sinnlos, die nur lokale Werte verwendet. Dir sind sicherlich schon Funktionsparameter bekannt, und entweder (was ich hoffe) Referenzen als Parameter, oder zumindest Zeiger (was der C-Stil wäre).
Ich bin mal sehr freundlich:
void einlesen(double& kapital, double& zinssatz, double& sparvolumen, int& laufzeit) { //... }Hilft dir das schon einmal ein wenig auf die Sprünge?
-
Ja das kommt mir bekannt vor.. Zeiger hatten wir damals glaub ich immer so
double * zinsdefiniert
-
berndderbernd schrieb:
Ja das kommt mir bekannt vor.. Zeiger hatten wir damals glaub ich immer so
double * zinsdefiniert
Ich hoffe doch, dass du den Unterschied zwischen Zeigern und Referenzen kennst.
Man würde doch glauben, dass Studenten C++ besser beherrschen als drittklassige Hobbyprogrammierer wie ich...
-
Naja c++ interessiert mich nicht wirklich, also hast du als hobbyprogrammierer wissen als ich , da du dich immerhin mehr dafür interessiert.... ich kenne den unterschied nicht und lasse das programm jetzt einfach so, da ich des rätels lösung nicht kenne.
-
berndderbernd schrieb:
Naja c++ interessiert mich nicht wirklich, also hast du als hobbyprogrammierer wissen als ich , da du dich immerhin mehr dafür interessiert.... ich kenne den unterschied nicht und lasse das programm jetzt einfach so, da ich des rätels lösung nicht kenne.
Aha. C++ ist aber sehr tückisch. Besser du weißt, was du überhaupt schreibst, bevor du noch ausversehen deine Festplatte formattierst, oder dein PC anfängt zu brennen... (Tipp: so wenig
reinterpret_castwie möglich)
-
berndderbernd schrieb:
Naja c++ interessiert mich nicht wirklich, also hast du als hobbyprogrammierer wissen als ich , da du dich immerhin mehr dafür interessiert.... ich kenne den unterschied nicht und lasse das programm jetzt einfach so, da ich des rätels lösung nicht kenne.
Anders gesagt: du hast dir erhofft, hier eine Komplettlösung zu erhalten. Dich wirklich mit dem Problem ausienanderzusetzen hast du keine Lust, interessiert dich ja eh nicht.
Wenn du dich an das allgemein übliche gute Benehmen im Netz gehalten hättest und die mit wichtig gekennzeichneten Threads im Forum vor deinem ersten Post gelesen hättest, wüsstest du, dass hier weder Hausaufgaben gemacht werden noch Leuten ohne Eigeninitiative geholfen wird. Das hätte dir und uns ne Menge Zeit gespart.