Zeugnisnote ausrechnen
-
Nene.. so läuft das nicht.
- Wir machen das umgekehrt..std::vector<std::string> names; //Standardcontainer mit strings std::string temp = ""; //temporärer string std::cout << "Bitte geben sie alle ihre Namen und Spitznamen ein:" << std::endl; std::cin >> temp; while ( temp != "=" ) //solange man kein = eingibt { names.push_back ( temp ); //namen hinzufügen std::cin >> temp; // einlesen } std::cout << "Sie heissen also: " << std::endl; //alles ausgeben for (int i = 0; i < names.size (); i++ ) std::cout << name[ i ] << "\n";So. Ich greife da mal einen riesen Schritt voraus, wenn du, wie ich annheme mit einem herkömlichen Buch oder Tutorial lernst. Ich benutze da nämlich einen Standardcontainer und die string Klasse der Standardbibliothek, was du dir am besten auch gleich mal zu gemüte führst, weil du die noch sehr gut brauchen kannst. Und wenn du das verstanden hast, dann kannst du deine Aufgabe ganz elegant lösen.
Achte aber darauf, dass du obigen Code so ziemlich nicht Copy/Paste machen kannst, da es ein paar Stolperfallen hat, wenn du das jetzt auf dein Problem bezogen machst.
Referenzen gibt es hier:
std::vector:
http://www.cplusplus.com/reference/stl/vector/std::string:
http://www.cplusplus.com/reference/string/Alternativ oder zusätzlich kannst du auch mal googlen und schauen, was du zu dem Thema findest. (Das mit den Spitzen Klammern hat etwas mit Templates zu tun und musst du jetzt nocht nicht unbedingt verstehen. Wenn du weisst, wie man damit umgeht reicht das vorerst einmal).
-
Okay, ich versuchs mal

Ich hoffe dass ich auch irgendwann so gut programmieren kann o.ODanke schon mal und bis bald (sobald ich es verstanden hab^^)
-
Wenn du mir
das:std::vector<std::string> names; //Standardcontainer mit stringsnoch auf deutsch erklären könntest wärs gut.. ich kapiers nicht ganz..

und das:
//alles ausgeben for (int i = 0; i < names.size (); i++ ) std::cout << name[ i ] << "\n";Danke

-
Das ist ein Standardcontainer. Grundsätzlich ist das so etwas, wie ein Array, nur eben viel dynamischer, einfacher zu benutzen und sicherer.
Die Erstellung geschieht so:
std::vector< T > name;Und T steht hier für jeden beliebigen Typ, den man angeben kann. Da kann int, float oder auch eine selbst definierter Typ, wie std::string rein.
Die Benutzung ist denkbar einfach, wenn du dich an Arrays gewöhnt bist.
std::vector<int> zahlen; // zahlen ist ein vector, der Instanzen vom Typ int beinhaltet zahlen.push_back ( 2 ); // eine Zahl hinten anfügen zahlen.push_back ( 3 ); // und noch eine std::cout << zahlen[0]; // Zugriff auf das erste ElementDas schöne an dem Objekt ist, dass es auch noch Memberfunktionen anbietet, die vieles einfacher machen. Z.B musst du dir nicht selbst merken, wie viele Einträge im vector sind, weil er das selbst macht und du mit ::size() abfragen kannst. Damit sollte auch die zweite Frage beantwortet sein. Wie gesagt, kann ich da jetzt nicht alles beschreiben, aber schau mal bei dem Link zum vector. Da steht alles und dort sind auch die verfügbaren Memberfunktionen notiert und meist gibt es auch Beispiele dazu.
-
Jetzt hänge ich wieder. Stimmt das soweit oder hab ichs noch nicht verstanden?

Ich kann eine Note eingeben, dann kommt immer eine Fehlermeldung..#include <iostream> #include <string> using namespace std; int main() { vector<float> zahlen; int anzahl; float noten; float ergebnis; cout << "Hier können Sie Ihre Zeugnisdurchschnittsnote ausrechnen." << endl; cout << "Wie viele Fächer haben Sie?\t"; cin >> anzahl; cout << endl << endl; cout << "Geben Sie jetzt Ihre Noten ein: "; cin >> noten; while(noten != "=") { zahlen.push_back ( noten ); //noten hinzufügen cin >> noten; //einlesen } ergebnis = noten / anzahl; cout << "Ihr Schnitt ist: "; cout << ergebnis; return 0; }
-
Leider sehr viele Fehler... Du bist auf dem Holzweg

1. Du kannst keinen float-Wert mit einem char vergleichen (Zeile 20).
2. Zeile 26: Was soll das zein? Du teilst die letzte eingegebene Note durch die gelesene Anzahl der Noten!? Wofuer hast du dir dann den float-vector erstellt? Im Uebrigen braeuchte man fuer diese Berechnung gar keinen Container...Musst du das mit dem "=" unbedingt machen? Wenn ja, gaebe es da zwei Loesungen: 1. Die Einfache: Du benutzt fuer Noten ein char statt float - chars haben jedoch keine Kommastellen...
2. Der Umweg: Stichwort stringstreams
Wenn nicht, wurde ich das anders loesen. Evtl. mit einer zusatzlichen Eingabeaufforderungen, inder gefragt wird, ob noch eine weitere Note einzulesen ist.Viel Erfolg beim lernen...
Gruss
Cartman
-
OK. Mein Beispiel war vlt. ein wenig zu weit weg von deinem..(aber immerhin kennst du jetzt vector) Ist auch so verdammt schwer nicht gleich alles zu verraten.
Das mit dem = ist so wirklich blöde. Du kannst allerdings auch eine sicher ungültige Zahl als Abbruchargument nehmen (wenn du dich nicht auch noch mit stringstreams beschäftigen willst). Also z.B -1.0f oder so. (oder gleich alles, bis auf das, was Sinn macht).
Das mit dem vector habe ich absichtlich erwähnt, weil es imo natürlicher ist das auf die Art zu lösen, als gleich alles in die Berechnung einfliesen zu lassen und dann mit einem Counter (oder eingegebene Zahl) das zu lösen. Man will ja schliesslich eine beliebige Anzahl von Noten einlesen und dann eine Berechnung durchführen. Und nicht zuerst noch irgendwie die Anzahl im vornherein eingeben, oder etwas "frickliges" über Counter zu machen. Und den schönen Nebeneffekt natürlich, dass er mit vector vertrauter wird, was vor allem für Anfänger nervenschonender sein kann, als das mit Arrays zu machen.
-
#include <iostream> using namespace std; int main() { double anzahl=0; double summe=0; cout << "Hier können Sie Ihre Zeugnisduchschnittsnote ausrechnen." << endl; int note; while(cin>>note) { summe+=note; anzahl+=1; } double durchschnitt=summe/anzahl; cout<<durchschnitt; return 0; }
-
Kurze Frage volkard ... Wie kommt man aus der While-Schleife wieder raus oO?
-
FreakY<3Cpp schrieb:
Kurze Frage volkard ... Wie kommt man aus der While-Schleife wieder raus oO?
mit = statt einer note natürlich.
-
Ja, das programm kapier sogar ich und es funzt :p
Danke volkard, danke auch an drakon und die anderen

wenn ich wieder Fragen hab dann melde ich mich
-
Tox!c schrieb:
Ja, das programm kapier sogar ich und es funzt...
Ich will ja nicht fies sein, aber weißt Du wirklich, wieso die
while-Schleife abbricht, wenn man z.B. ein = eingibt?
-
Tachyon schrieb:
Tox!c schrieb:
Ja, das programm kapier sogar ich und es funzt...
Ich will ja nicht fies sein, aber weißt Du wirklich, wieso die
while-Schleife abbricht, wenn man z.B. ein = eingibt?ich vermute, daß ein = dafür sorgt, daß der integer nicht korrekt eingelesen werden kann.
die rückgabe von cin>>note ist cin.
und das müßte zusammen mit http://www.cppreference.com/wiki/io/fail
dafür sorgen, daß die schleife abbricht.
-
Ich hab halt gedacht, da man ja eine Interger eingeben muss, und "=" kein Integer ist, dass deshalb die Schleife abgebrochen wird.
So wie volkard das auch meint.
Oder?
-
Tox!c schrieb:
Ich hab halt gedacht, da man ja eine Interger eingeben muss, und "=" kein Integer ist, dass deshalb die Schleife abgebrochen wird.
So wie volkard das auch meint.
Oder?
Genau. Das einlesen in einen Integer war nicht erfolgreich, also wird das fail bit gesetzt und die Schleife abgebrochen.