Rade Kutil
Lehrveranstaltungen
VP Programmiersprachen: C/C++ (SS09)

Inhalt

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

Skriptum

Hier gibt es das Skriptum zum herunterladen: PDF, 518K oder PS, gzipped, 275K. Außerdem noch die Beispiel-Programme aus dem Skriptum.

Programmieraufgaben

Jeder bekommt eine individuelle Programmieraufgabe, die für C und C++ gilt, in einer Datei aufgabe.txt in seinem Subversion-Verzeichnis. Die erste Zeile dieser Datei ist programm stadt.dat gebiet.dat strasse.dat [weitere parameter]. Das heißt: Du sollst ein Programm namens programm erzeugen, das als erstes Kommando­zeilen­argument 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 80 Leuten rätseln, was für ein Programm ich nun aufrufen soll.

Bis zum So 3. Mai soll das C-Programm programmiert werden. Das Programm wird von mir mit evtl. Verbesserungsvorschlägen kommentiert. Bis So 17. Mai kann das Programm dann noch verbessert werden. Alle C-Files und Header-Files sollen in einem Unterverzeichnis c/ sein. Bis zum So 14. Juni soll das C++-Programm programmiert werden, und zwar im Unterverzeichnis cpp/. Bis zum So 28. Juni 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 stadt.dat, gebiet.dat und strasse.dat zugreifen. (Jetzt mit etwas mehr Daten zum Testen!) Der exakte Filename wird allerdings auf der Kommandozeile übergeben. Die Dateien zum Testen bitte hier herunterladen (und nicht ins Subversion einchecken). Die erste Datei stadt.dat enthält Städte mit folgenden Angaben:

StadtId Name Einwohner GebietId Meereshöhe

Die Einträge sind durch ein Leerzeichen getrennt. Eine Stadt ist eindeutig durch StadtId (natürliche Zahl) identifiziert. Die zweite Datei gebiet.dat enthält Regionen (R), Länder (L) und Kontinente (K), in denen die Städte angesiedelt sind. Eine Zeile enthält:

GebietId Name ObergebietId Typ

GebietId ist eine eindeutige Id (natürliche Zahl), die in stadt.dat referenziert wird. Name ist der Name des Gebiets. Obergebiet ist z.B. die Id eines Landes von dem das Gebiet Teil ist. Der Typ kann R, L oder K sein (siehe oben). R kann Obergebiet L oder R haben, L kann Obergebiet K haben. Die dritte Datei strasse.dat definiert Straßen zwischen den Städten. Eine Zeile enthält:

VonStadtId NachStadtId Entfernung

Straßen sind natürlich in beide Richtungen benutzbar, jedoch nur in einer Richtung (von VonStadt nach BisStadt) eingetragen. Entfernung gibt die Länge der Straße in km an.

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 .cc-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 Id-Referenzen nach dem Einlesen in Pointer umzuwandeln, da die Dateien nicht nach Id sortiert sein müssen. Bitte nach Möglichkeit keine globalen Variablen verwenden. In C++ müssen allerdings die Sortieralgorithmen der STL und passende Container verwendet werden, die das Suchen beschleunigen.

Anmeldung mit Subversion

Zur Programmabgabe und daher zur effektiven Anmeldung wird Subversion verwendet. Anmelden bis spätestens 22.3.. Folgende Schritte sind zu tun:

  1. Ein Verzeichnis mit dem Usernamen im Repository anlegen:

    svn mkdir https://svn.cosy.sbg.ac.at/lv/ccpp/rkutil -m Anmeldung
  2. Das Verzeichnis auschecken:

    svn checkout https://svn.cosy.sbg.ac.at/lv/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.

2009-05-14 21:51