Logischer Fehler im Code / Funktionen
-
In dem switch-Statement, wo du Probleme hast, stehen keine Funktionsaufrufe, sondern lediglich (lokale) Funktions-Deklarationen. Beim Aufruf mußt/darfst du die Datentypen nicht mit angeben.
PS: Und wenn du dabei bist, dich über Funktionsaufrufe zu informieren, schau dir auch an, was Parameter machen.
-
so, erstmal danke für die Feedbacks.
#include <iostream> using namespace std; double zinsen_berechnen(double zinssatz, double kapital); double zinsatz_berechnen(double kapital, double zinsen); double kapital_berechnen(double zinsen, double zinssatz); int auswahl_eingeben(); int main() { int eingabe = auswahl_eingeben(); switch(eingabe) { case 1: double zinsen_berechnen(double zinssatz, double kapital); break; // warum hier double zinsen? - da der Benutzer doch etwa, 1000,40 € Kapital, und 0.40 Zinssatz eingeben kann. Und da ist der Double Typ besser als der Integer. case 2: double zinsatz_berechnen(double kapital, double zinsen); break; case 3: double kapital_berechnen(double zinsen, double zinssatz); break; // ergänze hier noch etwas - so etwas wie default ? } return 0; } int auswahl_eingeben() { int eingabe; // praktisch machbar - übersichtlicher, wenn du statt eingabe ... - was eingibst ? - ich kann es auch mit einer if anweisung schreiben, wenn's einfacher dadurch wird. cout<<"1 Zinsen berechnen "<<endl; cout<<"2 Zinssatz berechnen "<<endl; cout<<"3 Kapital berechnen "<<endl; cout<<"4 Ende "<<endl; cout<<"Ihre Auswahl: "; cin>>eingabe; return eingabe; } double zinsen_berechnen(double zinssatz, double kapital) // du übergibst hier weder Zinssatz noch Kapital - warum nicht? -die Werte werden doch unten eingegeben.. ?! { cout<<"Bitte geben Sie das gewünschte Kapital ein: "; cin>>kapital; // Und, wenn du es übergeben hättest, warum überschreiben ? cout<<"Bitte geben Sie den Zinssatz an: "; cin>>zinssatz; double zinsen = (kapital*zinssatz)/100; cout<<"Sie erhalten "<<zinsen<<" EUR"; return zinsen; // Warum die Rückgabe? Ist die Aufgabe noch umfangreicher - also benötigst du da noch den wert? - eigentlich nicht, soll bloß ein kleines Programm werden. Danke für den Hinweis :) }
Sorry, wenn ich euch damit nerve
-
Wir haben dich beide darauf hingewiesen.
Beratungsresistent?#include <iostream> using namespace std; double zinsen_berechnen(double kapital, double zinssatz); double zinsatz_berechnen(double kapital, double zinsen); double kapital_berechnen(double zinsen, double zinssatz); int auswahl_eingeben(); int main() { int eingabe = auswahl_eingeben(); cout << "eingabe fertig"; switch(eingabe) { case 1: zinsen_berechnen(1000, 0.4); break; case 2: double zinsatz_berechnen(double kapital, double zinsen); break; case 3: double kapital_berechnen(double zinsen, double zinssatz); break; default: ; } return 0; } int auswahl_eingeben() { int wahl; cout<<"1 Zinsen berechnen "<<endl; cout<<"2 Zinssatz berechnen "<<endl; cout<<"3 Kapital berechnen "<<endl; cout<<"4 Ende "<<endl; cout<<"Ihre Auswahl: "; cin>>wahl; return wahl; } double zinsen_berechnen(double kapit, double zinss) { cout<<"Bitte geben Sie das gewünschte Kapital ein: "; // du überschreibst hier die Eingabe !! cin>>kapit; cout<<"Bitte geben Sie den Zinssatz an: "; // hier auch cin>>zinss; double zinsen = (kapit*zinss)/100; cout<<"Sie erhalten "<<zinsen<<" EUR"; return zinsen; }
MfG f.-th.
-
Zeile 18 und 20 sollten auch noch entsprechend geändert werden.
-
super, funktioniert. Vielen Dank für die Hilfe
nochmal zum allgemeinen verständnis:
die oben genannten werte:
[cpp]int eingabe = auswahl_eingeben();
switch(eingabe)
{
case 1: zinsen_berechnen(1000, 0.4);
break;
case 2: zinssatz_berechnen(1000, 0.4);
break;
case 3: kapital_berechnen(1000, 0.4);
break;
}[/cpp]
können x-beliebige sein, da der Wert ja unten bei der Abfrage ja wieder überschrieben wird ?
gruß
-
So ist es.
Aber soll das so sein? Das ist meist nicht der gesuchte Weg.Teste mal:
double zinsen_berechnen(double kapit, double zinss) { double zinsen = (kapit*zinss)/100; cout<<"Sie erhalten "<<zinsen<<" EUR"; return zinsen; }
MfG f.-th.
-
"Das ist meist nicht der gesuchte Weg" ?! - es funktioniert doch..
Wenn ich den Code (implementiere ?!) rechnet er gleich alles aus, ohne mich zu fragen. (in diesen Fall nimmt er die Daten von der Switch anweisung her..(
switch(eingabe) { case 1: zinsen_berechnen(1000, 0.4); break; case 2: zinssatz_berechnen(1000, 0.4); break; case 3: kapital_berechnen(1000, 0.4); break;
-
Dann solltest du dir die Frage stellen, wieso du den Funktionen überhaupt Parameter übergibst, wenn du diese dann doch nicht verwenden willst. Entweder du schreibst eine zentrale Funktion, um die Werte einzugeben und übergibst deren Rückgaben an die Rechen-Funktionen oder du verwendest lokale Variablen.
-
Es kommt immer auf die Zusammenhänge an
Dann teste mal so was:
#include <iostream> using namespace std; double zinsen_berechnen(); double zinsatz_berechnen(double kapital, double zinsen); double kapital_berechnen(double zinsen, double zinssatz); int auswahl_eingeben(); int main() { int eingabe = auswahl_eingeben(); switch(eingabe) { case 1: cout << "Sie erhalten " << zinsen_berechnen() << " EUR" << " Zinsen" << endl; break; case 2: double zinsatz_berechnen(double kapital, double zinsen); break; case 3: double kapital_berechnen(double zinsen, double zinssatz); break; default: ; } return 0; } int auswahl_eingeben() { int wahl; cout<<"1 Zinsen berechnen "<<endl; cout<<"2 Zinssatz berechnen "<<endl; cout<<"3 Kapital berechnen "<<endl; cout<<"4 Ende "<<endl; cout<<"Ihre Auswahl: "; cin>>wahl; return wahl; } double zinsen_berechnen() { double kapit; double zinss; cout<<"Bitte geben Sie das gewünschte Kapital ein: ";hier die Eingabe !! cin>>kapit; cout<<"Bitte geben Sie den Zinssatz an: "; cin>>zinss; double zinsen = (kapit*zinss)/100; return zinsen; }
Da geht noch einiges eleganter
MfG f.-th.
-
Das Missgeschick meinerseits solltest du in den Griff kriegen.
MfG f.-th.