Universit¨ at Paderborn Fakult¨ at V (EIM) Institut f¨ ur ET & IT
ANGEWANDTE DATENTECHNIK (SOFTWARETECHNIK)
Prof. Dr.-Ing. F. Belli
WS 2012/2013
Ubung 12 ¨
Ubungen zum Fach Grundlagen der Datenverarbeitung ¨
Ubung 12, Rechner¨ ¨ ubungen am 21.1. und 22.1.2013 (Poolraum - P7.2.02.1):
Aufgabe 1:
Implementieren Sie ein C-Programm, welches entscheidet, ob der Inhalt von zwei Dateien identisch ist.
Das Programm soll dazu von der Kommandozeile die zwei Dateinamen der zu vergleichenden Dateien als Parameter ¨ubergeben bekommen (s.a. Folien 12.23 und 12.24 der Vorlesungsunterlagen).
Hinweise zur Implementierung:
• Definieren Sie Ihremain-Funktion wie folgt:int main(int argc, char *argv[])
argv[1]undargv[2]enthalten bei korrektem Aufruf des Programms die Namen der zu vergleichenden Dateien. Die Variableargcbeinhaltet die Anzahl der Elemente des Feldes,argv–argv[0]beinhaltet standardm¨aßig den Namen des Programms (z.B.Dateivergleich.exe) und wird automatisch durch die Umgebung gesetzt.
• In der Eclipse-Entwicklungsumgebung lassen sich Kommandozeilenargumente wie folgt setzen:
Men¨upunktRun ⇒Run Configurations...⇒RegisterkarteArguments (des aktuellen Projektes) Alternativ k¨onnen Sie ihr Programm von der Kommandozeile aus starten. Es sei angenommen, dass das ausf¨uhrbare ProgrammDateivergleichund die zu vergleichenden DateienDatei1.txtbzw.Datei2.txt heißen:
Windows:Dateivergleich.exe Datei1.txt Datei2.txt Linux:./Dateivergleich Datei1.txt Datei2.txt
• Offnen Sie beide Dateien mitels der Funktion¨ fopenund pr¨ufen Sie, ob das ¨Offnen erfolgreich war.
• Lesen Sie anschließend beide Dateien zeichenweise mit der Funktionfgetc (Prototyp:
int fgetc(FILE *pFilePointer)) ein und pr¨ufen jeweils, ob die aktuell gelesenen Zeichen sich un- terscheiden (analog zu Aufgabe 1 der ¨Ubung 8) – die Funktionfgetcgibt das aktuell gelesene Zeichen alsint-Wert zur¨uck.
• Das Ende einer Datei ist erreicht, wenn gilt:fgetc(pFilePointer) == EOF Aufgabe 2:
Implementieren Sie ein C-Programm, das eine frei gew¨ahlte Anzahl von Zufallszahlen in eine Datei schreibt.
Der Benutzer des Programms soll die Anzahl der Zufallszahlen sowie den Dateinamen bestimmen k¨onnen.
Lesen Sie dazu die Anzahl sowie den Dateinamen von der Konsole oder alternativ ¨uber die Parameter der main-Funktion wie in Aufgabe 1 ein. Mittels des Aufrufsfprintf(pDatei, "%d\n", rand());k¨onnen Sie eine einzelne Zufallszahl inklusive eines Zeilenvorschubs als Trennsymbol in eine Datei schreiben.
Hinweis: Die folgenden zwei Funktionen aus der Bibliothekstdlib.hsind hilfreich:
Erzeugung einer Zufallszahl:int rand ();
Umwandlung eines Strings in eine Zahl:int atoi (char* string);
Aufgabe 3:
Es ist ein Programm zu schreiben, welches eine Datei bestehend aus Zahlen wie sie beispielsweise in Aufgabe 2 erzeugt wurde, ausliest. Diese Zahlen sollen anschließend sortiert in eine andere Datei geschrieben werden.
Hinweise zur Implementierung:
• Da die Anzahl der einzulesenden Zahlen unbekannt ist, m¨ussen Sie die Zahlen zun¨achst in eine verket- tete Liste schreiben und dann die Anzahl der Elemente in der Liste z¨ahlen. Danach k¨onnen die Zahlen in ein Feld ¨ubertragen werden, das anschließend sortiert und in eine andere Datei ausgegeben wird.
• Die verkette Liste ist bereits implementiert und liegt in den DateienStack.c undStack.h vor.
• F¨ugen Sie diese beiden Dateien ihrem Eclipse-Projektverzeichnis hinzu.
• Mittels der Pr¨aprozessoranweisung#include "Stack.h"k¨onnen Sie die Stackfunktionen wie gewohnt f¨ur Ihre Implementierung benutzen.