Glückwunsch!
Glückwunsch, dein Programm funktioniert, und du bist am Ende des C++-Kurses angekommen! Es gibt Punktzahl und Note jedes Schülers aus, berechnet den Durchschnitt, findet den besten Schüler, addiert den Bonus für die fehlerhafte Frage und korrigiert eine Punktzahl anhand des Namens. Und das alles hast du selbst geschrieben.
Eine letzte Verbesserung. Die Lehrerin will auf einen Blick sehen, wie viele Schüler den Test nicht bestanden haben. Füge am Ende der Ergebnisse eine Zeile mit der Anzahl der Noten F hinzu. Das ist Zählen mit einer Bedingung, aus der Lektion über Schleifen: Ein Zähler beginnt bei 0, eine Schleife geht die Punktzahlen aller durch, und jedes Mal, wenn note() 'F' zurückgibt, steigt der Zähler um 1.
Was du gelernt hast. Sieh dir an, wie jeder Teil des Kurses seinen Platz in deinem Programm gefunden hat:
- Variablen und Arithmetik halten die Summe der Punktzahlen und den Zähler. Der Durchschnitt hat Nachkommastellen, weil du in einer
double-Variable addiert hast. - Bedingungen entscheiden über die Note (
else ifin der richtigen Reihenfolge), halten die Punktzahlen bei höchstens 50 und prüfen, ob ein Schüler gefunden wurde. - Vektoren enthalten die Namen und die Punktzahlen. Was zusammengehört, hat denselben Index.
- Schleifen gehen die Schüler durch, um sie auszugeben, ihre Punktzahlen zu addieren, den besten zu finden, einen Schüler anhand des Namens zu finden (mit
break) und die Noten F zu zählen. - Funktionen teilen das Programm in Teile mit klaren Aufgaben:
note(),durchschnitt()undbesterSchueler()berechnen ein Ergebnis und geben es zurück,addierePunkte()undkorrigierePunkte()ändern die Daten, undgibErgebnisseAus()gibt aus. - Referenzen übergeben die Vektoren ohne Kopie. Mit
constliest eine Funktion sie nur, ohneconstkann sie sie ändern. - Text (
std::string) sind die Namen der Schüler, und du vergleichst sie mit==. - Und wenn etwas nicht funktionierte, sagten dir die Fehlermeldungen des Compilers, was falsch war und in welcher Zeile. Es lohnt sich immer, zuerst den ersten Fehler zu beheben.
Zeiger brauchtest du im Projekt nicht: Für Funktionsparameter sind Referenzen einfacher und sicherer. Aber du wirst sie in fremdem Code und in Bibliotheken sehen, und du brauchst sie, wenn du etwas über dynamischen Speicher lernst.
C++ auf deinem eigenen Computer. Hier kompiliert und startet dein Browser die Programme. Auf deinem eigenen Computer hast du mehrere Möglichkeiten:
- Ein Online-Compiler braucht keine Installation. Auf onlinegdb.com wählst du zum Beispiel C++ als Sprache, fügst dein Programm ein und startest es mit der Schaltfläche Run. Eingaben von der Tastatur funktionieren dort auch.
- Windows: Installiere Visual Studio Community, das kostenlos ist, und wähle bei der Installation die Workload „Desktopentwicklung mit C++“. Erstelle dann ein neues Projekt „Konsolen-App“, ersetze den Beispielcode durch dein Programm und starte es mit
Strg+F5. Visual Studio Code ist ein anderes Programm: nur ein Editor, für den du einen Compiler separat installieren müsstest. - macOS: Installiere im Terminal die Werkzeuge mit dem Befehl
xcode-select --install(die Xcode Command Line Tools). Speichere dein Programm alsmain.cpp, wechsle im Terminal mitcdin seinen Ordner und kompiliere es:clang++ main.cpp -o main. Das erzeugt ein Programm namensmain, das du mit./mainstartest. - Linux: Installiere den Compiler g++, zum Beispiel unter Ubuntu mit
sudo apt install g++. Kompiliere dann dein Programm mitg++ main.cpp -o mainund starte es mit./main.
Der Teil -o main legt fest, wie das fertige Programm heißen soll. Nach jeder Änderung am Code musst du es erneut kompilieren, sonst führst du die alte Version aus. Hier auf der Website hat die Schaltfläche Ausführen das für dich erledigt. Meldet der Compiler auf einem Mac Fehler oder Warnungen zu neueren C++-Funktionen, füge -std=c++17 hinzu: clang++ -std=c++17 main.cpp -o main verwendet dieselbe Version der Sprache wie diese Website.
Wie es weitergeht. Du kennst jetzt die Grundlagen, aus denen jedes C++-Programm gebaut ist. Hier sind einige Ideen, was du als Nächstes lernen kannst:
- Eingaben des Benutzers. Auf deinem Computer funktioniert
std::cin:std::cin >> punktzahl;wartet, bis der Benutzer eine Zahl eintippt und die Eingabetaste drückt, und speichert sie in der Variable. (Hier im Browser gibt es niemanden, der tippen könnte, deshalb funktioniert es nicht.) Die Lehrerin könnte dann die Punktzahlen eintippen. - Strukturen und Klassen. Statt zweier Vektoren, die du in derselben Reihenfolge halten musst, kannst du mit
structeinen eigenen Typ erstellen, zum Beispielstruct Schueler { std::string name; int punkte; };, und alle Schüler in einen einzigenstd::vector<Schueler>legen. Klassen (class) geben den Daten eigene Funktionen. std::map. Sie speichert Werte unter Schlüsseln: Mit einerstd::map<std::string, int>setzt du eine Punktzahl anhand des Namens, etwapunkte["Lena"] = 35;, und brauchst keine Schleife, um den Schüler zu finden.- Dateien. Die Bibliothek
<fstream>kann Daten aus einer Datei lesen und in eine schreiben, sodass die Ergebnisse nicht verschwinden, wenn das Programm endet. - Algorithmen. Die Bibliothek
<algorithm>hat fertige Funktionen für das, wofür du Schleifen geschrieben hast:std::sortsortiert einen Vektor,std::max_elementfindet das größte Element undstd::findsucht. Jetzt weißt du, wie sie innen funktionieren. - Eigene Projekte und Wettbewerbe. Ein Zahlenratespiel, ein Quiz, Tic-Tac-Toe in einem verschachtelten Vektor. Am meisten lernst du, indem du eigene Probleme löst. C++ ist auch bei Programmierwettbewerben sehr beliebt, zum Beispiel bei den Informatik-Olympiaden, die viele Länder für Schüler weiterführender Schulen veranstalten.
Und wenn du eine andere Sprache ausprobieren möchtest: Die Kurse Python und JavaScript warten auf dich.
So schreibst du es:
Anweisungen
- 1
Füge am Ende von
gibErgebnisseAus()unter der Zeile mit dem besten Schüler eine Zeile mit der Anzahl der Schüler hinzu, die durchgefallen sind. Ein Zähler beginnt bei0, und eine Schleife erhöht ihn um 1 für jeden Schüler, dessennote()'F'ist. Unsere Klasse hat einen:Durchgefallen: 1 - 2
Prüfe, dass die Zahl nach
"Durchgefallen: "aus der Zählervariable ausgegeben wird und nicht direkt in den Code geschrieben ist. Nur dann zählt das Programm auch für eine andere Klasse richtig.