Jeder bekommt eine individuelle Programmieraufgabe in einer Datei
aufgabe.txt
in seinem Subversion-Verzeichnis. Die erste
Zeile dieser Datei ist programm personen.dat stand.dat [weitere
parameter]
. Das heißt: du sollst ein Programm namens
programm
erzeugen, das als erstes Kommandozeilenargument
einen Dateinamen akzeptiert und als zweiten auch. Dahinter kommen
möglicherweise noch weitere Parameter, wenn es die Aufgabe verlangt.
Der Name des Programms ist ganz wichtig (also
programm
), sonst muss ich bei 86 Leuten rätseln, was für
ein Programm ich nun aufrufen soll.
Bis zum So 3.12. soll das C-Programm programmiert werden.
Das Programm wird von mir mit evtl. Verbesserungsvorschlägen
kommentiert. Bis So 17.12. kann das Programm dann noch
verbessert werden. Alle C-Files und Header-Files sollen in einem
Unterverzeichnis c/
sein. Bis zum So 14.1. soll
das C++-Programm programmiert werden, und zwar im Unterverzeichnis
cpp/
. Bis zum So 28.1. kann dann noch verbessert
werden. Erstelle in diesen Unterverzeichnissen auch ein
Makefile
. Mittels make
ohne Argumente muss
das Programm programm
erzeugt werden. Adde nur
.c
-Files, .h
-Files und das
Makefile
(und natürlich die Verzeichnisse c/
und cpp/
) ins Subversion-Repository. Ich übersetze das
Programm selbst.
Die zu erstellenden Programme sollen auf die Dateien personen.dat
und stand.dat
zugreifen. Der exakte Filename wird
allerdings auf der Kommandozeile übergeben. Die Dateien zum Testen
bitte hier herunterladen (und nicht ins Subversion
einchecken). Die erste Datei personen.dat
enthält die
Daten für eine Person pro Zeile. Eine Zeile enthält:
Vorname Nachname Geschlecht Geburtsjahr Todesjahr
Vater-Vorname Vater-Nachname Vater-Geburtsjahr Mutter-Vorname
Mutter-Nachname Mutter-Geburtsjahr
Die Einträge sind durch ein Leerzeichen getrennt. Eine Person ist
eindeutig durch Vorname, Nachname und Geburtsjahr identifiziert. Alle
referenzierten Personen (Vater, Mutter) existieren in der Datei. Ist
Vater oder Mutter unbekannt, sind Vorname, Nachname und Geburtsjahr
durch - - 0
ersetzt. Die zweite Datei
stand.dat
enthält Eheschließungen (H
) und
Scheidungen (S
). Eine Zeile enthält:
Typ Jahr_der_Standesaenderung Gatte-Vorname -Nachname
-Geburtsjahr Gattin-Vorname -Nachname -Geburtsjahr
Die Ausgabe deines Programms kommt auch in eine Datei. Diese Datei soll ein ähnliches Format haben (z.B. eine Person pro Zeile, Personen immer durch Vorname, Nachname und Geburtsjahr identifizieren). Beachte: es gibt verschiedene Personen mit gleichem Vor- und Nachnamen. Durch die Sortierung der Dateien kann ein Vater weiter unten in der Datei stehen als der Sohn.
Worauf ich bei Programmen Wert lege: Nicht alles in ein
.c-File geben, das Hauptprogramm programm.c
soll nur die
Funktion main
enthalten, in C++ am besten für jede Klasse
ein Header-File und (falls notwendig) ein .c-File. Beim Einlesen der
Dateien am besten für jede Zeile ein struct
-Objekt
bzw. in C++ ein Klassenobjekt erzeugen. In C liegt das Augenmerk noch
nicht auf Performance, Suchen und Sortieren in Arrays kann durch
lineares Iterieren und Bubble-Sort o.ä. implementiert werden, es ist
allerdings geschickt, die Vater- und Mutter-Referenzen nach dem
Einlesen in Pointer auf Vater und Mutter umzuwandeln, damit diese nur
einmal gesucht werden müssen. In C++ müssen allerdings die
Sortieralgorithmen der STL und passende Container verwendet werden,
die das Suchen beschleunigen.
Zur Anmeldung wird Subversion verwendet. Anmelden bis spätestens So 22.10. Folgende Schritte sind zu machen:
Ein Verzeichnis mit dem Usernamen im Repository anlegen:
svn mkdir svn+ssh://svn.cosy.sbg.ac.at/export/LV_svn/ccpp/rkutil -m Anmeldung
Das Verzeichnis auschecken:
svn checkout svn+ssh://svn.cosy.sbg.ac.at/export/LV_svn/ccpp/rkutil
Anmeldungsdaten (Nachname, Vorname, Matrikelnummer,
Emailadresse, jeweils in eigene Zeile) in die Datei
anmeldung.txt
eintragen:
cd rkutil
cat >anmeldung.txt
Kutil
Rade
9420697
rkutil@cosy.sbg.ac.at
Anmeldungsdaten commiten:
svn add anmeldung.txt
svn commit -m "Anmeldungsdaten eingetragen"
rkutil
natürlich den eigenen Usernamen verwenden.