CPP01 am 04.08.2018

Algorithmus, Baumdurchlauf, Compiler, Interpreter...; Cobol, Pascal, C/C++, Java & Co.
Antworten
w1cked
Mitglied
Mitglied
Beiträge: 39
Registriert: 18.08.11 00:06

Hallo zusammen,

da schon einige Zeit nichts mehr zu CPP01 gepostet wurde, hier mal meine Erfahrungen zur gestrigen Klausur. Disclaimer: ich habe sowohl privat als auch beruflich seit vielen Jahren mit Programmieren und Scripting zu tun und habe mir daher eher nicht so schwer getan wie vielleicht andere. Meine Vorbereitungszeit betrug circa 15 Stunden, die sich hauptsächlich um Auffrischung der C++ Syntax drehte.

Meine Empfehlung für die Vorbereitung ist:
- das Heft CPP101 bearbeiten, die anderen Hefte könnt ihr vergessen
- die drei Musterklausuren trotz der inhaltlichen Fehler und komischen Formatierung gut anschauen, da die Aufgabentypen ein gutes Gefühl dafür geben, was in der Klausur kommt
- Dozent/in (aktuell Frau Schröder) anschreiben und um das Skript aus dem aktuellen Seminar und um Hinweise zur anstehenden Klausur bitten - das hat mir sehr geholfen!
- Microsoft Visual Studio 2017 Community ist eine hervorragende kostenlose Entwicklungsumgebung für C++, die bei Fehlern auf eine sehr gute Onlinereferenz verweist und damit beim Lernen und Verstehen ungemein hilft

Klausuraufbau:
- 7 Detailaufgaben, alle zu bearbeiten
- 3 Komplexaufgaben, davon zwei zu bearbeiten

Detailfragen

1. eine Funktion und einige Aufrufe in einer main()-Funktion waren gegeben und man sollte die Ausgabe davon angeben. Die Schwierigkeit war ein Pointer, der erhöht wurde (char* v = [...]; v++;) und Stringmanipulation
2. Multiple Choice mit Aussagen zu UML Diagrammen und Vererbung
3. Klassenvariable, Instanzvariable und lokale Variable erklären und jeweils ein Beispiel dazu angeben
4. operator<< Überladung als friend-Methode implementieren
5. Eine Funktion n_pow(int basis, int exponent) war zu implementieren, die die Ausgabe "Der 3er Exponent von 3 ist 27" erzeugt
6. Verschiedene Datentypen als Variable auf dem Heap anlegen, initialisieren und löschen
7. Ich glaube eine Aufgabe mit einem vector durch den man iterieren musste, bin mir aber nicht mehr sicher...

Komplex B.1
UML-Diagramm zu einem Reisebüro war gegeben. Es gab u.A. Klassen zu Kunden, eine abstrakte Klasse Reise und davon abgeleitete Spezialisierungen Schiffsreise und Flugreise und eine Datumsklasse. Man sollte die Klassen, Attribute und Methoden sowie Konstruktoren schreiben. Die abgeleiteten Reise-Klassen hatten ausgeben()-Funktionen (Polymorphie). Man musste auch Methoden zur vector-Manipulation (fuegeHinzu()) schreiben. Am Schluss war eine Beispielausgabe angegeben und man sollte in einer main()-Funktion noch die passenden Objekte anlegen und Methoden aufrufen, um die Ausgabe zu erhalten. Diese Komplexaufgabe war deutlich einfacher als die anderen beiden.

Komplex B.2
Es war nur eine Klasse "TAN" als UML gegeben. Das Szenario war, dass ein Kunde max. drei Mal zur Eingabe einer TAN (Transaktionsnummer) aufgefordert und die Eingabe mit einer zu generierenden Liste von TANs verglichen werden sollte. Hierzu waren die Klasse und Methoden zu implementieren, um ein Array mit 100 6-stelligen Zufallszahlen zu füllen, das Array in 4 Spalten nach einem vorgegebenen Muster auszugeben und eine dialog()-Funktion, die Eingaben abfragt und gegen das Array abprüft. Dies war aus meiner Sicht mit Abstand die schwerste Klausuraufgabe, da man nicht einfach aus einem Klassendiagramm ablesen konnte, sondern sich erst mal selbst einen Lösungsweg ausdenken musste (für den Zufallsgenerator random6() : long z.B. - wie kommt man mit der rand() : int Funktion zu 6-stelligen TANs). Ich habe daher die anderen beiden bearbeitet ;).

Komplex B.3
Die dritte Komplexaufgabe war vom Aufbau sehr ähnlich wie die erste, nur umfangreicher. Diesmal ging es um ein Szenario mit Angeboten, Angebotspositionen und Geschäftskunden. Es waren mehrere abgeleitete Klassen, 1:1 und 1:n Beziehungen angegeben. Die Klassen, Attribute, Methoden und Konstruktoren waren zum Teil zu schreiben. Auch operator<< Überladungen kamen wieder dran. Die Aufgabe hatte ein paar Fallstricke und man musste viel hin und her blättern, war ansonsten wie die erste gut lösbar, wenn man sich mit den Musterklausuren auseinandergesetzt hat.

Fazit
Ich war mit der Klausur nach knapp über 2 Stunden fertig und habe 10 Seiten nahezu vollgeschrieben. Wenn man Komplex 2 bearbeiten wollte, dann hätte man sicherlich die 3 Stunden voll ausschöpfen müssen.

Um die Klausur zu bestehen muss man auf jeden Fall richtig sattelfest in der Syntax von C++ und beim Lesen von UML-Diagrammen sein. Man muss auch unbedingt die Unterschiede zwischen Pointer, Address und Value bzw. call-by-ref, call-by-address und call-by-value verstanden haben und mit den entsprechenden Operatoren (* und &) arbeiten können. Die Überladung der operator<<(ostream&, Klasse&) Funktion kommt anscheinend immer dran, damit kann man sich einfach Punkte sichern.

Falls noch jemand geschrieben hat, dann kann derjenige ja gern noch ergänzen, was ich vergessen habe ;).

Ich wünsche allen viel Glück, die es noch vor sich haben!
Danielmuc
Mitglied
Mitglied
Beiträge: 15
Registriert: 21.04.17 19:48

Vielen Dank W1cked!
Danke für die Ausführlichkeit!
Antworten