Rade Kutil
Lehrveranstaltungen
VP Programmiersprachen: C/C++ (WS06/07)

Inhalt

Einführung in C/C++ unter Voraussetzung von Programmierkenntnissen in Java.

Skriptum

Hier gibt es das Skriptum zum herunterladen: PDF, 480K oder PS, gzipped, 260K.

Programmieraufgaben

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.

Anmeldung

Zur Anmeldung wird Subversion verwendet. Anmelden bis spätestens So 22.10. Folgende Schritte sind zu machen:

  1. Ein Verzeichnis mit dem Usernamen im Repository anlegen:

    svn mkdir svn+ssh://svn.cosy.sbg.ac.at/export/LV_svn/ccpp/rkutil -m Anmeldung
  2. Das Verzeichnis auschecken:

    svn checkout svn+ssh://svn.cosy.sbg.ac.at/export/LV_svn/ccpp/rkutil
  3. 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
  4. Anmeldungsdaten commiten:

    svn add anmeldung.txt
    svn commit -m "Anmeldungsdaten eingetragen"
Statt rkutil natürlich den eigenen Usernamen verwenden.

2007-09-11 22:27