Rade Kutil
Lehrveranstaltungen
UV Programmiersprachen: C/C++ (WS17)

Inhalt

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

Skriptum

Hier gibt es das Skriptum zum herunterladen: PDF, 536KiB. 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 gate.dat connection.dat type.dat function.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, dritten und vierten 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 65 Leuten rätseln, was für ein Programm ich nun aufrufen soll. Und bitte keines der Datei-Argumente weglassen, auch wenn du die Datei nicht brauchst.

Bis zum Do 7. Dez. soll das C-Programm programmiert werden. Das Programm wird von mir mit evtl. Verbesserungsvorschlägen kommentiert. Bis Ende Dez. kann das Programm dann noch verbessert werden. Alle C-Files und Header-Files sollen in einem Unterverzeichnis c/ sein. Bis zum Do 11. Jan. soll das C++-Programm programmiert werden, und zwar im Unterverzeichnis cpp/. Bis zum Do 25. Jan. 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 gate.dat, connection.dat, type.dat und function.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 gate.dat enthält:

gateId typeId

Ein Eintrag bedeutet, dass die Schaltung ein Gate mit der Nummer gateId vom Typ typeId enthält. Die Ids sind numerisch, können aber beliebig groß werden, daher bitte nicht als Array-Index verwenden. Die zweite Datei connection.dat enthält:

vonGateId vonPin nachGateId nachPin

Jede Zeile stellt eine Verbindung von Output-Pin vonPin von vonGateId zu Input-Pin nachPin von nachGateId dar. Jedes Input-Pin ist mit genau einem Output-Pin verbunden. Die Input-Pins sind mit 0,1,2,... durchgehend nummeriert. Die Output-Pins ebenso. Die dritte Datei type.dat enthält:

typeId name anzahlInputPins anzahlOutputPins delay

Jede Zeile definiert für jeweils einen Typ mit der Id typeId den Namen, der keine Leerzeichen enhält, sowie die Anzahl der Input- und Output-Pins. delay enthält die Verzögerung der Ausgänge in Bezug auf Änderung der Eingänge. Die vierte Datei function.dat enthält:

typeId inputBits outputBits

Ein Eintrag bedeutet, dass für ein Gate vom Typ typeId eine gewisse Input-Pin-Belegung zu der angegebenen Output-Pin-Belegung führt. Die Belegungen sind in den Bits der Felder inputBits und outputBits angegeben. So bekommt man z.B. mit inputBits&(1<<2) das zweite Input-Bit.

Benotungskriterien

Grundsätzlich muss das Programm funktionieren, damit es eine positive Note gibt. Das heißt, es muss compilierbar sein und das gewünschte Ergebnis liefern. Davon abgesehen, sollten folgende Kriterien beachtet werden:

Anmeldung mit Subversion

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

  1. Ein Verzeichnis mit dem Usernamen im Repository anlegen:

    svn mkdir https://svn.cosy.sbg.ac.at/lv/ccpp/abcdefg -m Anmeldung

  2. Das Verzeichnis auschecken:

    svn checkout https://svn.cosy.sbg.ac.at/lv/ccpp/abcdefg

  3. Anmeldungsdaten (Nachname, Vorname) in die Datei anmeldung.txt im Verzeichnis abcdefg eintragen:

    Bcdefg
    Arnold

  4. Anmeldungsdaten commiten:

    svn add anmeldung.txt
    svn commit -m Anmeldung

Statt abcdefg natürlich den eigenen Usernamen verwenden.

2017-10-19 22:44