Unterfunktionproblem
-
Hallo!
hab ein kleines C++ Problem, ich will diesen einfache Programm:
#include <iostream> using namespace std; int main() { float note,b=0,anzahl,d=0,e=0, max=0, min=1000; //Definition der verschiedenen Zahlenwerte (float) cout << "Geben Sie ein, wie viele Tests Sie bewerten wollen: "; //Textausgabe cin >> anzahl; //Werteingabe do //Beginn der do-while Schleife {cout << "Bitte Note eingeben: "; b++; cin >> note; //Noteneingabe d=d+note; if (note>max) //Wenn note>max, Gleichsetzung { max=note; } if (note<min) //Wenn note<min, Gleichsetzung { min=note; } } while (b<anzahl); //Bedingung und Aktionen von "while" e=d/anzahl; //Definition von e cout << "Durchschnittsnote: "<< e << endl; //Ausgabe der errechneten Werte cout << "Max.: " << max << endl; cout << "Min.: " << min << endl; return 0; }in Unterfunktionen aufteilen lassen, so weit so gut, hier ist meine Version welche aber nicht funktioniert (Fehlermeldungen):
#include <iostream> #include <stdlib.h> using namespace std; void beginn(); void ausgabe(); int main() { float note,b=0,anzahl,d=0,e=0, max=0, min=1000; //Definition der verschiedenen Zahlenwerte (float) cout << "Geben Sie ein, wie viele Tests Sie bewerten wollen: "; //Textausgabe cin >> anzahl; //Werteingabe do //Beginn der do-while Schleife { beginn(void); if (note>max) //Wenn note>max, Gleichsetzung { max=note; } if (note<min) //Wenn note<min, Gleichsetzung { min=note; } } while (b<anzahl); //Bedingung und Aktionen von "while" e=d/anzahl; //Definition von e ausgabe(void); return 0; } void beginn(void) { cout << "Bitte Note eingeben: "; b++; cin >> note; //Noteneingabe d=d+note; return 0; } void ausgabe(void) { cout << "Durchschnittsnote: "<< e << endl; //Ausgabe der errechneten Werte cout << "Max.: " << max << endl; cout << "Min.: " << min << endl; return 0; }Es will einfach nicht funktionieren, ich weiß das "void" keine Werte zurückgiebt, darum habe ich das RETURN am Ende jeder Unterfunktion eingegeben, dachte es wäre ne ziemlich einfache Aufgabe am Anfang, aber.........Pustekuchen. Hab auch schon probiert die verschiedenen floats in die Klammer rechts von VOID zu tippen, war aber auch nichts.....
Schon mal Danke im Voraus für die (hoffentlich) hilfreichen Antworten!

Schönes WE noch,
Hallohallo
-
Dein Hauptproblem ist, dass die Variablen in den Funktionen nicht "sichtbar" sind.
Üblicherweise übergibst Du Variablen aus dem Hauptprogramm an Funktionen beim Funktionsaufruf. Zum Beispiel:#include <iostream> void ausgabe(const float&, const float&, const float&); void tu_nix(); int main(){ float min = 42.0f, max = 4711.f, act = 1701.0f; ausgabe(act, min, max); // Funktion mit Argumenten tu_nix(); // Funktion ohne Argumente } void ausgabe(const float& act, const float& min, const float& max) { if(min < act && act < max) std::cout << act << " liegt zwischen " << min << " und " << max << ".\n"; } void tu_nix(){}
-
Danke für die Antwort!!!
Hab es probiert, hilft aber auch nichts, krieg leider noch immer Fehlermeldungen...
-
Dank meiner hellseherischen Fähigkeiten bin ich nun in der Lage, die Lösung für dein Problem herauszufinden.

-
Nathan schrieb:
Dank meiner hellseherischen Fähigkeiten bin ich nun in der Lage, die Lösung für dein Problem herauszufinden.

bist du aber fies daste ihm nicht den fehler zeigst!
-
Hallohallo schrieb:
Hab es probiert, hilft aber auch nichts, krieg leider noch immer Fehlermeldungen...
Das war ja auch nur ein Problem - Dein Programm müsste jetzt schon anders aussehen. Und die Fehlermeldungen müssten andere sein.
Soll jetzt jemand erahnen, welche Fehler noch im Code sind?Siehe: Den richtigen Code posten...
-
#include <iostream> #include <stdlib.h> using namespace std; void beginn(float&, float&, float&); void ausgabe(float&); int main() { float& anzahl=0, max=0, min=1000; //Definition der verschiedenen Zahlenwerte (float) cout << "Geben Sie ein, wie viele Tests Sie bewerten wollen: "; //Textausgabe cin >> anzahl; //Werteingabe do //Beginn der do-while Schleife { beginn(float& b; float& d; float& note); if (note>max) //Wenn note>max, Gleichsetzung { max=note; } if (note<min) //Wenn note<min, Gleichsetzung { min=note; } } while (b<anzahl); //Bedingung und Aktionen von "while" e=d/anzahl; //Definition von e ausgabe(float& e); return 0; } void beginn(float& b, const float& d, const float& note) { cout << "Bitte Note eingeben: "; b++; cin >> note; //Noteneingabe d=d+note; } void ausgabe(float& e) { cout << "Durchschnittsnote: "<< e << endl; //Ausgabe der errechneten Werte cout << "Max.: " << max << endl; cout << "Min.: " << min << endl; }Fehlermeldungen: Fehlermeldungen sind nicht kopierbar, steckt es mal in euren Compiler und seht selbst, bei mir sind's noch immer 14 errors, die meisten davon: Nicht deklarierte Zahlen in den ersten Programmzeilen.
-
Der Code ist derart, dass ich vorschlage:
Du setzt Dich nochmal hin, schaust in das Buch, mit dem Du C++ lernen willst und schreibst einfachere Programme.Es muss IMHO deutlich mehr Substanz an C++-Wissen auf Deiner Seite vorhanden sein, damit das hier erquickend für beide Seiten ist.
Nix für ungut...
-
[code="cli"]
#include <iostream>
#include <stdlib.h>
using namespace std;void beginn();
void ausgabe();int main()
{
float anzahl=0, max=0, min=1000, note,b,d,e; //Definition der verschiedenen Zahlenwerte (float)
cout << "Geben Sie ein, wie viele Tests Sie bewerten wollen: "; //Textausgabe
cin >> anzahl; //Werteingabedo //Beginn der do-while Schleife
{
void beginn(float b, float d, float note);if (note>max) //Wenn note>max, Gleichsetzung
{
max=note;
}if (note<min) //Wenn note<min, Gleichsetzung
{
min=note;
}}
while (b<anzahl); //Bedingung und Aktionen von "while"
e=d/anzahl; //Definition von e
void ausgabe(float e);
return 0;
}void beginn(float b, float d, float note)
{
cout << "Bitte Note eingeben: ";
b++;
cin >> note; //Noteneingabe
d=d+note;
}void ausgabe(float e, float max, float min)
{
cout << "Durchschnittsnote: "<< e; //Ausgabe der errechneten Werte
cout << "Max.: " << max;
cout << "Min.: " << min;
}[code="cpp"]
Hab die Fehlercodes jetzt alle ausgemärzt, das einzige Problem was ich noch habe ist, dass die Werte nicht in die Hauptschleife zurückgegeben werden, sprich ich geb die Anzahl der zu bewertenden Teste ein und dann ist tote Hose da die Werte der Nebenfunktion "beginn" nicht zurückgegeben werden, woran liegt das?
-
Sorry, hier gleich nochmal:
#include <iostream> #include <stdlib.h> using namespace std; void beginn(); void ausgabe(); int main() { float anzahl=0, max=0, min=1000, note,b,d,e; //Definition der verschiedenen Zahlenwerte (float) cout << "Geben Sie ein, wie viele Tests Sie bewerten wollen: "; //Textausgabe cin >> anzahl; //Werteingabe do //Beginn der do-while Schleife { void beginn(float b, float d, float note); if (note>max) //Wenn note>max, Gleichsetzung { max=note; } if (note<min) //Wenn note<min, Gleichsetzung { min=note; } } while (b<anzahl); //Bedingung und Aktionen von "while" e=d/anzahl; //Definition von e void ausgabe(float e); return 0; } void beginn(float b, float d, float note) { cout << "Bitte Note eingeben: "; b++; cin >> note; //Noteneingabe d=d+note; } void ausgabe(float e, float max, float min) { cout << "Durchschnittsnote: "<< e; //Ausgabe der errechneten Werte cout << "Max.: " << max; cout << "Min.: " << min; }
-
Furble Wurble schrieb:
void ausgabe(const float&, const float&, const float&);Wieso const-ref Furble?

-
Hallohallo schrieb:
Hallo!
hab ein kleines C++ Problem, ich will diesen einfache Programm:
#include <iostream> using namespace std; int main() { float note,b=0,anzahl,d=0,e=0, max=0, min=1000; //Definition der verschiedenen Zahlenwerte (float) cout << "Geben Sie ein, wie viele Tests Sie bewerten wollen: "; //Textausgabe cin >> anzahl; //Werteingabe do //Beginn der do-while Schleife {cout << "Bitte Note eingeben: "; b++; cin >> note; //Noteneingabe d=d+note; if (note>max) //Wenn note>max, Gleichsetzung { max=note; } if (note<min) //Wenn note<min, Gleichsetzung { min=note; } } while (b<anzahl); //Bedingung und Aktionen von "while" e=d/anzahl; //Definition von e cout << "Durchschnittsnote: "<< e << endl; //Ausgabe der errechneten Werte cout << "Max.: " << max << endl; cout << "Min.: " << min << endl; return 0; }in Unterfunktionen aufteilen lassen
Das Vorhaben erscheint mir nicht sinnvoll.
Ich bin ein Freund kleiner, sehr kleiner und extrem kleiner Funktionen, baue bei 200 Dateien im Durchschnitt 6 Zeilen pro Funktion (außer GUI), und würde hier dennoch alles in der main() lassen.
-
Hallohallo schrieb:
Fehlermeldungen: Fehlermeldungen sind nicht kopierbar, steckt es mal in euren Compiler und seht selbst (...)
*FACE...
...wait for it...
...PALM*
-
...
-
Hallohallo schrieb:
Fehlermeldungen: Fehlermeldungen sind nicht kopierbar, steckt es mal in euren Compiler und seht selbst, bei mir sind's noch immer 14 errors, die meisten davon: Nicht deklarierte Zahlen in den ersten Programmzeilen.
Vielleicht sind sie in Deiner IDE nicht markierbar. Also nicht kopierbar per Markieren und Kopieren.
Probier es anders. Zum Beispiel rechte Maustaste und im erscheinenden Kontextment "Kopieren" wählen.
Oder sag, welche IDE es ist und jemand findet es heraus, wie es geht.
Zur höchsten Not den Compiler aus der Konsole aufrufen und die Fehler in eine Datei schicken. Oder ideone benutzen.
-
out schrieb:
Furble Wurble schrieb:
void ausgabe(const float&, const float&, const float&);Wieso const-ref Furble?

My bad...

Zu lange hin und her editiert. Denk Dir einfach eine Übergabe per Wert.@Hallohallo:
Hmm: hast ja innerhalb von 25 Minuten gestern noch die übelsten Syntaxfehler rausgebügelt.
Schau Dir nochmal an, wie in C++ Funktionen aufgerufen werden, und wie Du Argumente übergibst (per Wert, bzw. per Referenz).
Z.B. werden in swordfishseingabe_2()beide Konventionen genutzt.
Allgemein solltest Du aus den Beispielen hier im Thread sehen, wie Funktionen nicht aufgerufen werden (Dein Code), bzw. wie sie aufgerufen werden (alle anderen Beispiele).Glückauf!
-
Hallo!
hab's nun endlich geschafft, nochmal hingesetzt und angesehen, siehe da: Der mir vorher völlig unbekannte Knackpunkt waren die "&"-Zeichen!!!
Programm funktioniert nun hervorragend!
#include <iostream> #include <stdlib.h> using namespace std; void beginn(float &b, float &d, float ¬e); void ausgabe(float &e, float &min, float &max); int main() { float anzahl=0, max=0, min=1000, note,b,d,e; //Definition der verschiedenen Zahlenwerte (float) cout << "Geben Sie ein, wie viele Tests Sie bewerten wollen: "; //Textausgabe cin >> anzahl; //Werteingabe do //Beginn der do-while Schleife { beginn(b,d,note); if (note>max) //Wenn note>max, Gleichsetzung { max=note; } if (note<min) //Wenn note<min, Gleichsetzung { min=note; } } while (b<anzahl); //Bedingung und Aktionen von "while" e=d/anzahl; //Definition von e ausgabe(e,min,max); return 0; } void beginn(float &b, float &d, float ¬e) { cout << "Bitte Note eingeben: "; b++; cin >> note; //Noteneingabe d=d+note; } void ausgabe(float &e, float &min, float &max) { cout << "Durchschnittsnote: "<< e; //Ausgabe der errechneten Werte cout << "\nMax.: " << max; cout << "\nMin.: " << min; }Danke für die Hilfe!
Hallohallo
-
Da ist ein Fehler drinnen, und ein krasser Schönheitsfehler.
Fehler: deine ganzen float Variablen sind nicht initialisiert. Wieso das trotzdem geht ist mir schleierhaft -- im Debug-Mode sollte dabei auf jeden Fall nur Unsinn rauskommen.
Krasser Schönheitsfehler: du verwendest floats als Zähler!?! Einmal der Schleifenzähler "b". Dann "anzahl", das zwar nicht selbst zählt, aber eben eine vom Benutzer eingegebene "Anzahl" darstellt.
Das funktioniert zwar, aber man macht es einfach nicht.
(Und bei der Eingabe kann der Benutzer dann als Anzahl 2,5 oder so eingeben -- was dann auch für die Division am Schluss übernommen wird -- vermutlich auch nicht in deinem Sinn)