C++ klausur vom 04.10.2005

Algorithmus, Baumdurchlauf, Compiler, Interpreter...; Cobol, Pascal, C/C++, Java & Co.
Antworten
soenke
Forums-Profi
Forums-Profi
Beiträge: 80
Registriert: 05.12.04 22:22
Wohnort: Hamburg

hi,

heute c++ klausur in pinneberg geschrieben (die gleiche klausur wurde auch an 3 weiteren standorten geschrieben). konzipiert wurde die klausur von prof. EG hoffmann.

die detailaufgaben (30 pkt) waren ziemlich einfach und halt wie immer recht theoretisch. was sind objekte, klasse, klassenvariablen, membervaribalen, friends, übergabe per referenz, heap und stack erklären etc

dann gabs 3 komplex, 2 davon zu lösen (jeweils 30 pkt).

die erste war prozedurale programmierung, habe ich mich nicht weiter angeschaut.

die zweite war eine handy-klasse und eine telefonkarten-klasse nach UML diagramm programmieren. war machbar. aber sehr viel schreibarbeit. erst nur die deklarationen und dann die funktionen mit inhalt.

die handy-klasse hat ein objekt der telefonkartenklasse als member. die aggregation von objekten innerhalb eines anderen objekts (heisst innerhalb eines objektes befindet sich ein weiteres objekt als membervariable) scheint also sehr beliebt zu sein bei eg hoffmann.

dann sollte man dazu noch ein testprogramm schreiben, was alle funktionen testet. habe ich nicht vollständig gemacht, da es sehr viele fälle sind, die man beachten musste. habe es dann nur als text drun ter geschrieben, was "fehlt" :)

die dritte komplex war abstraktion und vererbung sowie vektor/array.

aus der beschreibung sollten uml diagramme einer abstrakten haus-klasse gemalt werden (mit virtueller methode "ausgabe()". von dieser leiten sich dann einfamilienhaus und geschäftshaus ab (vererbung). in der oberklasse sollten halt die gemeinsamkeiten gekapselt werden.

dann sollte das programmiert werden. auch die output-funktionen der unterklassen, die nichts anderen machen sollten, als alle membervariablen der klasse komma-getrennt auszugeben.

danach sollte man eine "firma" klasse, die immobilienobjekte verwaltet, per uml definieren, die "haus" objekte in einem array aggregiert (also ein array bestehend aus zeigern auf haus-objekte). man konnte es als array ODER vektor machen. da ich mir den STL kram nicht weiter angegguckt hatte, habe ich ein array gemacht.

dann wurde ein hauptprogramm gegeben, das firma und zwei hausobjekte instanziert. diese beiden objekte werden dann "haus" per methode "fuegehinzu" oder so hinzugefügt und in das array/vektor hinzugefügt (hier war es dann ein array bestehend aus zeigern auf Haus-Objekte, also "Haus * haeuser[];".

dann gab es noch zwei methoden von "Firma", die man programmieren musste. ausgabe(), die alle häuser ausgibt (im prinzip also for-schleife über das haeuser array und dann ausgabe() methode von "Haus" aufrufen), und eine weitere ("jahresVerguetungBerechnen() o. ä.), die auch wieder alle häuser durchgeht und den verwaltungsaufwand berechnet (war aus der aufgaben-stellung ersichtlich und einfache multiplikation des haus-preises mit einer konstanten klassen-variable, die man zuor auch noch angelegt hat).

alles in allem habe ich 2.5 stunden von den 3 gegebenen gebraucht - ist ne menge schreibarbeit und programmieren auf dem papier IST *HARDCORE* :) denn man hat kein strg-c und strg-v

ansonsten gibts ja immer in den seminaren noch eine musterklausur zum schluss. bei interesse kann ich die euch zuschicken.

gruss und viel erfolg, soenke
Zuletzt geändert von soenke am 05.10.05 18:53, insgesamt 1-mal geändert.
Benutzeravatar
Tinka
Forums-Profi
Forums-Profi
Beiträge: 102
Registriert: 21.04.05 22:47
Wohnort: Kiel

so, ergänzend die prozedurale Aufgabe.
Es gab einiges an Hilfe hierzu. Die Zufallszahlenfunktion als Beispiel in einem Lottozahlenprogramm, sowie Tipps, wie man an der ein oder anderen Stelle vorgehen kann.
Es ging darum, in einer Funktion eine TAN Liste mit 100 6-stelligen Zufallszahlen zu erzeugen und auszugeben. Dann sollte der Kunde - iTAN mäßig, nach einer bestimmten, zufällig ausgewählten TAN gefragt werden, die Eingabe verglichen und entweder "OK" ausgegeben werden, oder "falsch, sie haben noch x Versuche" und nach einer neuen TAN gefragt werden. Bei 3 Fehlversuchen soll das eBanking gesperrt werden.
Dann sollte ergänzt werden um eine Abfrage "wollen sie noch weiter probieren". Schwerpunkt war eindeutig die rand() Funktion, sowie diverse Schachtelungen von if, for und while.

Mit den Tipps aber gut zu schaffen.

Gruß,
Tinka (die bestimmt keine 2 erwartet, aber hoffentlich bestanden hat)
Gast

Ich hab die 3. Aufgabe nicht verstanden? Was wollte der mit seinen Prozenten?

Gruß
René
Gast

Ich war leider nicht bei Hoffmann direkt im Seminar, sondern im Nebenraum bei seinem Kolegen, wir haben viel Zeit vertrödelt.

Deshalb ein paar Fragen zu den Fragen:

- Was ist eine konstante Klassenvariable (ne Konstante in ein Klasse?)
- Was ist Garbage und wie läßt es sich vermeiden.
- Welchen Vorteil hat eine Initiierungsliste beim Konstruktor.

Gruß
René
Benutzeravatar
Tinka
Forums-Profi
Forums-Profi
Beiträge: 102
Registriert: 21.04.05 22:47
Wohnort: Kiel

Klassenvariablen existieren einmal pro Klasse, nicht pro Objekt. Bsp. die Matrikulationsnummer bei Studenten, die für die Klasse Student existiert, aber nicht bei jedem neuen "Objekt" Student neu angelegt wird. Man kann ohne explizites Objekt auf diese Klassenvariablen zugreifen. Und wenn das Ding konstant ist, ist es eben für alle Objekte der Klasse gleich. Aber begegnet sind mir bisher nur variable Klassenvariablen :-)

Garbage sind nicht (mehr) refernzierte Bereiche auf dem Heap. Objekt mit new angelegt, delete vergessen, Zeiger anders verwendet, und das nicht gelöschte Objekt bleibt bis zum nächsten Start des Rechners da liegen. Vermeidbar durch braves verwenden von delete.

Initialisierungslisten haben einen Effizienzgewinn, da das Anlegen des Objektes im selben Schritt wie das Initialisieren stattfindet. Nicht nacheinander.


Auf jeden Fall sollte man sich vor der Klausur das Skript von Proffessor Hoffmann aus der Arbeitsgruppe C++ runterladen und die Übungsaufgaben machen. Da kam eigentlich alles in irgendeiner Form drin vor, was er dann am Ende auch wiissen wollte.

Gruß Tinka - die wieder besonders dämliche Fehler eingebaut hat :oops:
Benutzeravatar
Tinka
Forums-Profi
Forums-Profi
Beiträge: 102
Registriert: 21.04.05 22:47
Wohnort: Kiel

Hi Rene,

wo kamen Prozente drin vor? Aufgabe drei war die mit Handy und Telefonkarte?!?!
Oder welche Aufgabe drei meinst Du???

Gruß,
Tinka
Gast

Aufgabe 4: Nach Haus, EFH, GH kam plötzlich die Anforderung FIRMA zu programmieren mit einer Angabe von 6% oder so ähnlich. Was sollte das? Verkaufsprovision? Aber wovon? Soll das Haus dann aus dem Array verschwinden? ... Zu kompliziert gedacht??? Die Aufgabenstellung war nicht klar!!!

Konstante Klassenvariable ist für mich:

class myClass
{
const int c = 5;
}


Geschwindigkeitsvorteile hab ich auch genannt bzgl. INIT-Liste.


Script von Hoffmann hab ich mir durchgelesen, stand leider nicht alles drin und "unser" Seminar war ja - wie allseits bekannt - äußerst dünn.


Wird knapp bei mir. Kann nur hoffen, dass die Dimplom-Prüfungen irgendwie zuvor geprüft werden und dort nicht so ein mit der heißen Nadel gestrickter unklarer Kram drankommt.

Gruß
soenke
Forums-Profi
Forums-Profi
Beiträge: 80
Registriert: 05.12.04 22:22
Wohnort: Hamburg

hi,

doch die aufgabenstellung war klar. es war eine hausverwaltung die dafür geld genommen hat, die häuser zu verwalten. und zwar 6(?) prozent des kaufpreises pro jahr. also eine simple multiplikation :]

PS: Ich war auch in dem blah-seminar, printf() !!!!!
Benutzeravatar
ReneK
Forums-Profi
Forums-Profi
Beiträge: 169
Registriert: 23.06.05 11:14
Wohnort: jwd

Also mir war das nicht klar, sorry... irgendwie war nach 2 Stunden die Luft raus, um das, was sich Prof Hoffmann gedacht, aber nicht geschrieben hat, geistig zu ergänzen.
Benutzeravatar
Tinka
Forums-Profi
Forums-Profi
Beiträge: 102
Registriert: 21.04.05 22:47
Wohnort: Kiel

Hm,
ich bin eigentlich Spezialist darin, Aufgaben nicht zu verstehen. Aber diese Klausur fand ich ausgesprochen verständlich und klar?!?!
Aber ich hatte ja auch den Vorteil des Hoffmann-Seminars....

War da in der Detailaufgabe nach einer konstanten Klassenvariablen gefragt? Shit - man sollte wohl doch die Aufgabe genau lesen. Hab nur Klassenvariable allgemein (also mit static, ohne Objekt aufrufbar etc) geschrieben. Naja, wird mit Sicherheit nicht mein einziger Fehler bleiben.

Ich hab konsequent die Funktionen als cKlasse:: void cKlasse funktion() definiert. Hoffentlich bekomme ich das als Wiederholungsfehelr gewertet und nicht als grobes Nicht-Verstehen von C. Da hatte ich echt einen Aussetzer - aber konsequent :wink:
Dazu eine ganz neue Form des Methodenaufrufes:
this-> karte.ausschalten(). Ich fürchte, das gilt auch nicht, aber ich konnte nicht nicht entscheiden, welchen Operator ich nehmen sollte....

Das mit der Luft rau nach gut 2h kann ich auch nur bestätigen! Das war schon reichlich.

Tinka
Gast

Naja, 2/3 der Aufgabe 4 fehlen mir dann. Wird knapp ...
soenke
Forums-Profi
Forums-Profi
Beiträge: 80
Registriert: 05.12.04 22:22
Wohnort: Hamburg

noten sind nun nach langer zeit *ENDLICH* online!
Benutzeravatar
Tinka
Forums-Profi
Forums-Profi
Beiträge: 102
Registriert: 21.04.05 22:47
Wohnort: Kiel

Juckuu, das lange Warten hat gelohnt, das Thema ist erledigt!

Tinka - total erleichtert
Martin0815
Forums-Scout
Forums-Scout
Beiträge: 374
Registriert: 23.09.04 15:43
Kontaktdaten:

Anonymous hat geschrieben:
Konstante Klassenvariable ist für mich:

class myClass
{
const int c = 5;
}
knapp daneben!

Wie Tinka bereits sagte sind Klassenvariablen eben nur einmal pro Klasse vorhanden. Deine Definition wäre eine konstante Objektvariable.

Eine konstante Klassenvariable würde wohl so aussehen:

class myClass
{
static const int c = 5;
...
}
Sys

Hi,

leider werde von Prof. Hoffmann nur das Script haben, da "mein" CPP01-Seminar eine andere Person halten wird.

Gibt es noch ein paar prüfungsrelevante Tipps (außer üben, üben, üben)?

von Matthias
Antworten