Programmierübungen C++
Vorbereitende Übungen
- Strukturen, Funktionen, Referenz-Parameter: Worte sortieren.
Musterlösung:
sortwords-ptr.cpp,
sortwords-ref.cpp.
- Referenz-Returnwerte: Zahlen zählen.
Musterlösung:
count.cpp,
count-sorted.cpp.
Für Interessierte: Dasselbe gelöst mit Verwendung des STL-map-Templates:
count-map.cpp.
- C++ I/O, Referenzen, new für Arrays, Default-Parameter: Rangliste sortieren.
Musterlösung:
rangliste.cpp.
Klassen, Vererbung
- Klassen und Vererbung: Geometrische Objekte
Wir verwenden für die grafische Anzeige
SDL
(siehe auch hier),
hier gibt es die Installationsanleitung
und hier meine "Zwischenschicht" zur SDL: sdlinterf.c und
sdlinterf.h.
- Teil 1: Erste Klassen und Objekte.
Ausgangsbasis: point.cpp.
Musterlösung: rect.cpp.
- Teil 2: File-Aufteilung, dynamisch angelegte Objekte.
Musterlösung:
color.h,
rect.h,
rect.cpp,
main.cpp.
- Teil 3: Copy-Konstruktor usw..
Musterlösung:
color.h,
rect.h,
rect.cpp,
main.cpp.
- Teil 4: Vererbung und clone: Ellipsen.
Musterlösung:
color.h,
graobj.h,
graobj.cpp,
rect.h,
rect.cpp,
circ.h,
circ.cpp,
main.cpp.
- Teil 5: Objekte die Pointer enthalten: Zusammengesetzte geometrische Objekte.
Musterlösung:
color.h,
graobj.h,
graobj.cpp,
rect.h,
rect.cpp,
circ.h,
circ.cpp,
comp.h,
comp.cpp,
main.cpp.
- Klassen und Vererbung: Inventarliste
- Teil 1: Abgeleitete und abstrakte Klassen, statische Member.
Wem das main zu wenig spannend ist: Mein
main.cpp.
Musterlösung:
inventar.h,
inventar.cpp,
zubeh.h,
zubeh.cpp,
comp.h,
comp.cpp,
main.cpp.
- Teil 2: Copy-Konstruktor und clone.
Wem das main zu wenig spannend ist: Mein
main.cpp.
Musterlösung:
inventar.h,
inventar.cpp,
zubeh.h,
zubeh.cpp,
comp.h,
comp.cpp,
main.cpp.
- Teil 3: Objekte, die Pointer enthalten.
Wem das main zu wenig spannend ist: Mein
main.cpp.
Musterlösung:
inventar.h,
inventar.cpp,
zubeh.h,
zubeh.cpp,
comp.h,
comp.cpp,
sammel.h
(alternativ: sammel-mit-new.h),
sammel.cpp,
main.cpp.
- Vererbung, Klasse mit dyn. Daten: Array-Klasse mit Statistiken
Programm zum Vervollständigen: array-abgel-main.cpp,
Soll-Ausgabe: result.txt.
Musterlösung:
array-abgel.cpp.
- Vererbung: Klassen für Zahlenlose.
Musterlösung:
lose.cpp.
Operatoren
- Operatoren: Bruchrechnen.
Ausgangsbasis für main:
taschenr.c
(einfacher Rechner mit double-Werten).
Musterlösung:
bruch.cpp.
- Operatoren: String-Klasse.
Hauptprogramm zum Testen: strings-main.cpp
Erwartete Ausgabe: strings-out.txt
Musterlösung:
strings.cpp.
Erweiterung mit Index- und Typumwandlungsoperator:
Hauptprogramm zum Testen: strings-main-stud.cpp
Erwartete Ausgabe: strings-stud-out.txt
Musterlösung:
strings-stud.cpp.
- Objekte mit dyn. Arrays: Rechen-Operatoren auf Arrays
Hauptprogramm zum Testen: array-main.cpp
Erwartete Ausgabe: result.txt
Musterlösung:
array.cpp.
- Objekte mit dyn. Arrays: Klasse mit bel. vielen Zählern.
Musterlösung:
lotto.cpp.
- Objekte mit dyn. Arrays: Objekte für Messreihen, Mittelwert.
Musterlösung:
messw.cpp.
Erweiterung auf Templates.
Musterlösung:
messw-templ.cpp.
- Objekte mit dyn. Arrays, optional Templates: Addition mit Gedächtnis.
Musterlösung:
adder.cpp,
adder-tmpl.cpp.
Diverses
- Teil 1: Function Pointer: Array-Klasse mit apply
Musterlösung:
funptr.cpp.
Teil 2: Abgeleitete Klassen: Erweiterung der Array-Klasse
Musterlösung:
funptr-minmax.cpp.
- Arrays von Pointern: Wege-Optimierung (Floyd-Warshall).
Programm zur Angabe:
matrix-angabe.cpp.
Musterlösung:
matrix.cpp.
- Zweidim. Arrays, Arrays von Pointern: Gleichungslösen nach Gauss.
Musterlösung:
gauss.cpp,
gauss-dyn.cpp.
File I/O
- Files lesen & schreiben: File klein schreiben, File zentrieren.
Musterlösung:
filelower.cpp,
center.cpp,
center-multi.cpp.
- Files, Stringstreams: Einlesen von Dec/Hex/Oct-Zahlen.
Musterlösung:
hexoct.cpp.
GUI-Programmierung (wxWidgets)
Informationen zu wxWidgets:
Meine Installationsanleitung für CodeBlocks (DHGE),
das Reference Manual
und meine Webseite zu wxWidgets.
- GUI-Programmierung mit vordefinierten Elementen:
- GUI-Programmierung mit freier Gestaltung des Hauptfensters:
Exceptions
- Exceptions, Stringstreams: Datumsrechner mit Fehlerbehandlung
Programm zum Umbauen: datum-diff-xcpt-angabe.cpp.
Musterlösung:
datum-diff-xcpt-2.cpp,
datum-diff-xcpt-3.cpp,
datum-diff-xcpt-4.cpp.
- Exceptions: Bruchrechner mit Fehlerprüfung.
Musterlösung:
bruch-xcpt.cpp.
- Exceptions: Datenerfassung.
Musterlösung:
mittelw.cpp.
Templates
Siehe auch "Operatoren / Messreihen" und "Operatoren / Addition mit Gedächtnis"!
- Templates: Einfache Template-Funktion haeufigstes.
Musterlösung:
haeufigstes.cpp.
- Template-Funktionen: Notenliste verwalten.
Musterlösung:
noten.cpp.
- Template-Klassen für Paare und Arrays.
Musterlösung:
paar.cpp.
- Template-Klassen: Zeichen / Worte / Längen zählen.
Für die weniger Mutigen: Hauptprogramm zum Erweitern: textcnt-main.cpp.
(die Guten sollen es selbst versuchen!)
Musterlösung:
textcnt.cpp,
textcnt-2.cpp.
STL (Standard Templates Library)
Siehe auch "wxWidgets / File Viewer mit Wort-Index" und die alternative Lösung zu "Vorbereitende Übungen / Zahlen zählen"!
- STL-Klassen: Zeichen / Worte / Längen zählen mit STL-map.
Musterlösung:
textcnt-stl.cpp, mit Ableitung:
textcnt-stl-abl.cpp.
- Statische Member und Methoden, STL list bzw. set:
Grafische Objekte mit Farbkreis und Liste aller Objekte (mit SDL-Grafik).
Code zum Erweitern:
color.h,
graobj.h,
graobj.cpp,
circ.h,
circ.cpp,
rect.h,
rect.cpp,
main.cpp.
Musterlösung Schritt 1:
color.h,
color.cpp,
graobj.h,
graobj.cpp,
circ.h,
circ.cpp,
rect.h,
rect.cpp,
main.cpp.
Musterlösung Schritt 2:
color.h,
color.cpp,
graobj.h,
graobj.cpp,
circ.h,
circ.cpp,
rect.h,
rect.cpp,
main.cpp.
Musterlösung Schritt 3:
color.h,
color.cpp,
graobj.h,
graobj.cpp,
circ.h,
circ.cpp,
rect.h,
rect.cpp,
main.cpp.
- Templates, STL vector, File-I/O, Exceptions: Datei mit Umordnen der Zeilen kopieren.
Musterlösung:
file-perm.cpp,
mit STL Zufallszahlen:
file-perm-random.cpp,
mit STL shuffle:
file-perm-shuffle.cpp.
- Templates, STL vector & forward_list, File-I/O, Exceptions: Merge-Sort, rekursiv.
Musterlösung:
merge-sort-list.cpp.
Musterlösung mit Zusatzaufgabe:
merge-sort-list-2.cpp.