Sie sind auf Seite 1von 4

Michael Roth

Michael Roth

Programmieren/Algorithmen & Datenstrukturen 2 - Klausur -

15.07.2015

Zu Beachten:

‹berpr¸fen Sie Ihr Examplar auf Vollst‰ndigkeit (4 Seiten).

Tragen Sie Ihren Namen, Vornamen und Matrikelnummer auf dem Login Zettel ein.

Lassen Sie alle ausgegebenen Zettel auf Ihrem Platz!

Zul‰ssige Hilfsmittel: B¸cher, installierte C++ Referenz, Ordner mit Unterlagen. Lose Bl‰tter werden von der Aufsicht konfisziert.

Lesen Sie zun‰chst alle Aufgaben durch und stellen Sie Verst‰ndnisfragen zu Beginn der Klausur.

Inhaltliche Fragen werden w‰hrend der Klausur nicht beantwortet.

Bearbeitungszeit: 180 Minuten. Punkte:

Die Klausur ist mit 50 Punkten sicher bestanden.

Die Punkte entsprechen Prozentpunkten, 100% der Punkte sind damit 100 Punkte.

1 Einleitung

In dieser Klausur sollen Sie verschiedene Auswertungen auf die Ergebnisse der Volksz‰hlung von 2011 bzw. von vorhergehenden Z‰hlungen. Die Daten liegen in einer Textdatei mit folgendem Aufbau vor:

Name des Bundeslandes

Name der Stadt

Gesamtbevˆlkerung Zensus 2011

M‰nnliche Bevˆlkerung Zensus 2011

Weibliche Bevˆlkerung Zensus 2011

Gesamtbevˆlkerung vorhergehender Zensus

M‰nnliche Bevˆlkerung vorhergehender Zensus

Weibliche Bevˆlkerung vorhergehender Zensus

Hinweis: Ihnen stehen zwei Dateien zur Verf¸gung: Eine ASCII-kodierte und eine UTF-8-kodierte.

Falls Sie beim Laden der Datei Probleme mit Sonderzeichen bekommen, probieren Sie die jeweils andere. In der Regel sollte unter NetBeans die UTF-8 Datei und unter Visual Studio die ASCII Datei funktionieren.

2 Regeln

Schreiben Sie Kommentare (nur da) wo benˆtigt. Beispielsweise wenn Sie sich nicht sicher sind, ob ein bestimmter Algorithmus funktioniert. Oder falls eine oder mehrere Zeilen Ihnen Laufzeit- bzw. Compilerfehler geben, Sie aber sicher sind, diese f¸r eine korrekte Lˆsung zu benˆtigen.

Beachten Sie unbedingt const-correctness

Etwaig benˆtigte Konstruktoren, Kopierkonstruktoren, Zuweisungsoperatoren und De- struktoren sind nicht zwangsl‰ufig in den Aufgabenstellungen beschrieben. F¸gen Sie diese, wenn benˆtigt, eigenst‰ndig hinzu

Hinweis: Sie d¸rfen zu den Klassen beliebig Methoden und Attribute hinzuf¸gen, wenn Sie f¸r Ihre Lˆsung einen Bedarf sehen. Dies betrifft vor allem get- und set-Methoden

M.Roth

Programmieren/Algorithmen & Datenstrukturen 2, Seite 2 von 4

15.07.2015

3 Aufgaben

1. Klasse bzw. Struktur Data

Gesamt: 12 Punkte

[2 P.]

(a) Definieren Sie eine Klasse oder eine Struktur, um die Bevˆlkerungszahlen einer Volks- z‰hlung aufnehmen zu kˆnnen. Dar¸ber hinaus soll das Jahr der Z‰hlung abgespeichert werden.

 

[3 P.]

(b) Implementieren Sie einen < -Operator, der true ergibt, wenn der linksseitige Operand neuer ist als der rechtsseitige. (Vergleichen Sie also die Jahreszahlen der Data -Objekte)

[3 P.]

(c) Sehen Sie eine Methode oder einen Operator vor, der den Inhalt eines Data -Objektes sinnvoll ausgibt. Die volle Punktzahl erreichen Sie, falls Sie mit einer Methode bzw einem Operator auf alle denkbaren ostream Objekte schreiben kˆnnen.

[4 P.]

(d) Implementieren Sie den Eingabestromoperator :

 

1

struct

Data

   

2

{

3

 

//

4

friend

std::istream&

operator>>(std::istream&

is,

Data&

obj);

5

};

 

zum Einlesen eines Data -Objektes aus einem beliebigen Eingabestrom. Hinweis: Nichtbenutzen bzw. Nicht-Implementieren des Operators f¸hrt nicht zu Punkt- abzug beim Einlesen der Daten aus der Datei.

 

2. Klasse Town

 

Gesamt: 17 Punkte

Implementieren Sie eine Klasse Town, die alle Informationen einer Stadt aufnehmen kann. Diese sind:

 

Name des Bundeslandes

 

Name der Stadt

(Mindestens) Zwei Data -Objekte mit den Ergebnissen der Z‰hlungen

 

(a) Um mehr als ein Data -Objekt zu speichern gibt es mehrere Mˆglichkeiten:

[3 P.]

i.

Einen geeigneten STL-Container (list, vector, etc.)

 

ii.

Ein Array (-1 Punkt)

 

iii.

Zwei Attribute vom Typ Data (-2 Punkte)

 

[3 P.] (b) Sehen Sie eine Methode oder einen Operator vor, der den Inhalt eines Town -Objektes sinnvoll ausgibt. Die volle Punktzahl erreichen Sie, falls Sie mit einer Methode bzw einem Operator auf alle denkbaren ostream Objekte schreiben kˆnnen. Es sollte mindestens Name der Stadt, Bundesland sowie die Gesamtbevˆlkerung ausgegeben werden.

[4 P.]

(c) Implementieren Sie den Eingabestromoperator :

1

class

Town

2

{

3

//

4

friend

std::istream&

operator>>(std::istream&

is,

Town&

obj);

5

};

zum Einlesen eines Town -Objektes aus einem beliebigen Eingabestrom. Hinweis: Nichtbenutzen bzw. Nicht-Implementieren des Operators f¸hrt nicht zu Punkt- abzug beim Einlesen der Daten aus der Datei.

(d) Die folgenden Methoden und Operatoren werden vor allem in Aufgabe 4 benˆtigt. Wenn Sie sich entscheiden, einige der hier geforderten Methoden und Operatoren nicht zu

M.Roth

Programmieren/Algorithmen & Datenstrukturen 2, Seite 3 von 4

15.07.2015

[3 P.]

implementieren bleiben die Punkte in Aufgabe 4 davon unber¸hrt, vorausgesetzt Sie lˆsen die dort gestellte Fragestellung. Implementieren Sie einen Vergleichsoperator, der true liefert, falls zwei Town-

i.

[1 P.]

Objekte identisch sind. Das ist der Fall wenn sowohl Bundesland als auch Stadtname ¸bereinstimmen. ii. Eine Funktions sameState soll true liefern, wenn das als Parameter ¸bergebene

Town-Objekt im gleichen Bundesland liegt. [3 P.] iii. Eine Funktion getPop(bool) soll die Gesamtbevˆlkerung einer Stadt zur¸ck geben. Der bool -Wert im Parameter bestimmt dar¸ber, ob dieser von j¸ngsten oder ‰ltesten Z‰hlung stammen soll.

3. Klasse Country

Gesamt: 26 Punkte

Die Klasse Country soll als Sammlung aller Town -Objekte dienen. Sie kˆnnen die Art und Anzahl der aus Ihrer Sicht benˆtigten Container frei w‰hlen. Es ist ratsam, dass Sie zun‰chst die unter Aufgabe 4 gestellten Fragen studieren, um geschickt w‰hlen zu kˆnnen. Beachten Sie vor allem, wie Sie mit verschiedenen Sortierungen wie beispielsweise in den Aufgaben 4 . a und 4 . b umgehen!

[26 P.] (a) Der (einzige) Konstruktor der Klasse soll einen string als Parameter akzeptieren. Dieser ist der Name der zu ladenden Datei. Im Konstruktor soll die angegebene Datei komplett ausgelesen werden und die dortigen Daten in Town-Objekten gespeichert werden. Hinweis: Die Jahreszahlen der Z‰hlungen sind:

Neueste Z‰hlung: 2011

Alte Z‰hlung: 1987 in der BRD (Baden-W¸rttemberg, Bayern, Bremen, Ham- burg, Hessen, Niedersachsen, Nordrhein-Westfalen, Rheinland-Pfalz, Saarland, Schleswig-Holstein)

Alte Z‰hlung: 1981 in der DDR (Brandenburg, Mecklenburg-Vorpommern, Sachsen, Sachsen-Anhalt, Th¸ringen)

4. Auswertungen

Gesamt: 45 Punkte

Die folgenden Auswertungen sollen als Methoden der Klasse Country implementiert werden. Schreiben Sie dar¸ber hinaus eine main, die ein Objekt von Country erzeugt und die St‰dteliste l‰dt. Implementieren Sie weiterhin ein textbasiertes Auswahlmen¸, um die Auswertungen einzeln ausgeben zu lassen.

[5 P.]

(a) Ausgabe aller St‰dte mit j¸ngster Gesamtbevˆlkerung sortiert nach Stadtname

[5 P.]

(b) Wie in a , allerdings sortiert nach Bundesland , gefolgt von Stadtname

[5 P.]

(c)

Der Benutzer soll einen Stadtnamen eingeben kˆnnen und, sofern die Stadt existiert, alle verf¸gbaren Informationen ausgegeben bekommen. Andernfalls bekommt der Benutzer eine entsprechende Meldung. Die Suche soll in der Laufzeitklasse O(log 2 (n)) erfolgen, andernfalls -3 Punkte

[10 P.]

(d) Es gibt eine Reihe von St‰dten in Deutschland mit einem nicht eindeutigem Namen, wie beispielsweise Zwingenberg , welches einmal in Hessen und einmal in Baden- W¸rttemberg liegt. Geben Sie eine Auflistung aller dieser doppelten (bzw. mehrfachen ) St‰dte aus. Hinweis: Gehen Sie nur nach den Namen, so wie sie in der Datei stehen. Die beiden

M.Roth

Programmieren/Algorithmen & Datenstrukturen 2, Seite 4 von 4

15.07.2015

St‰dte Frankfurt am Main und Frankfurt (Oder) sind demnach zwei verschiedene Stadtnamen!

[10 P.]

(e) Geben Sie eine Auflistung der gesamten Einwohner f¸r jedes Bundesland aus.

[10 P.]

(f) Vergleichen Sie die Ergebnisse der beiden Z‰hlungen und erstellen Sie eine Auflistung aller St‰dte sortiert nach dem relativen Wachstum.

Viel Erfolg!