Einführung in C/C++ unter Voraussetzung von Programmierkenntnissen in Java.
Hier gibt es das Skriptum zum herunterladen: PDF, 518K oder PS, gzipped, 275K. Außerdem noch die Beispiel-Programme aus dem Skriptum.
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
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 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.
Zur Programmabgabe und daher zur effektiven Anmeldung wird Subversion verwendet. Anmelden bis spätestens 22.3.. Folgende Schritte sind zu tun:
Ein Verzeichnis mit dem Usernamen im Repository anlegen:
svn mkdir https://svn.cosy.sbg.ac.at/lv/ccpp/rkutil -m Anmeldung
Das Verzeichnis auschecken:
svn checkout https://svn.cosy.sbg.ac.at/lv/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"
Statt rkutil
natürlich den eigenen Usernamen
verwenden.