28. BWINF, Runde 1, Aufgabe 3: Wegfehler - Matthias Springer .DE
28. BWINF, Runde 1, Aufgabe 3: Wegfehler - Matthias Springer .DE
28. BWINF, Runde 1, Aufgabe 3: Wegfehler - Matthias Springer .DE
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Aufgabe</strong> 3<br />
Stefan Hansch, Markus Wirsing, <strong>Matthias</strong> <strong>Springer</strong><br />
2 Programm-Dokumentation<br />
Das Programm wurde mit C++ geschrieben und als Linux-Binary kompiliert.<br />
Wenn der Quelltext unter Windows kompiliert werden soll, sind offensichtlich einige<br />
Änderungen notwendig (besonders im Zusammenhang mit Zeilenbrüchen).<br />
Zumindest kam es bei meinen Versuchen zu Problemen.<br />
Das Programm geht bei der Verarbeitung einer Log-Datei nach den folgenden<br />
Schritten vor.<br />
1. Einlesen der Bilddatei und der Log-Datei in den Arbeitsspeicher.<br />
2. Anwendung der Wahrscheinlichkeitsfunktion auf jeden Log-Eintrag.<br />
3. Bearbeitung der Bilddatei und Speichern der Bilddatei.<br />
2.1 Einlesen der Eingabedateien<br />
Das Einlesen der Eingabedateien funktioniert analog zu <strong>Aufgabe</strong> 5. Es wurden<br />
für die Bilddatei die gleichen Arrays und Bezeichnungen verwendet. Einige<br />
Zeilen Quelltext wurden sogar komplett übernommen. Die Log-Datei wird<br />
in drei Arrays übertragen, wobei db time[i] den Zeitpunkt des i-ten Eintrags,<br />
db pos x[i] die x-Koordinate und db pos y[i] die y-Koordinate bezeichnen. Der<br />
Zeitwert gibt die seit 00:00:00 Uhr vergangenen Sekunden an und wird nach<br />
der Formel db time[i] = stunden · 3600 + minuten · 60 + sekunden berechnet.<br />
Weil keine weiteren Anpassungen vorgenommen wurden, kann es zu den bereits<br />
genannten Problemen kommen.<br />
GPS-Koordinaten werden in Pixel-Koordinaten konvertiert. Jeder Pixel-Wert<br />
wird auf einen ganzen Integer-Wert abgerundet.<br />
Die Log-Datei wird zeilenweise eingelesen. Weil anfangs noch nicht bekannt<br />
ist, wie viele Zeilen gelesen werden müssen, werden eine Endlosschleife benutzt<br />
und so lange neue Zeilen eingelesen, bis die aktuelle Zeile weniger als 5 Zeichen<br />
lang ist. In einem solchen Fall springt das Programm in den ersten Teil der<br />
entsprechenden If-Struktur und fährt dort mit der Verarbeitung der eingelesenen<br />
Daten fort. Es gibt keine explizite Abbruchbedingung für die Endlosschleife.<br />
Diese terminiert dann, wenn das Programm nach der Verarbeitung der Daten<br />
terminiert.<br />
Es gibt einige Anforderungen an die Eingabedateien, die erfüllt sein müssen,<br />
damit die sie korrekt einlesen werden können.<br />
1. Die Log-Datei weist das gleiche Format wie die Testfälle von der <strong>BWINF</strong>-<br />
Seite auf. Insbesondere überprüft das Programm, ob die erste Zeile mit der<br />
Zeichenfolge TIME,LATITU<strong>DE</strong>,LONGITU<strong>DE</strong> übereinstimmt, um grob<br />
zu überprüfen, ob der Benutzer wirklich eine Log-Datei ausgewählt hat.<br />
2. Die Log-Datei hat den Dateinamen log.csv und die Bilddatei hat den Namen<br />
karte.ppm. Die Ausgabe erfolgt in die Datei karte out.ppm.<br />
3. Es handelt sich um eine 24-bit-PPM vom Typ P6, siehe auch <strong>Aufgabe</strong> 5.<br />
4. Es findet kein Zeitsprung von 23:59:59 Uhr auf 00:00:00 Uhr statt.<br />
5. Es liegen weniger als 2000 Log-Einträge vor.<br />
6. Die Log-Datei ist korrekt formatiert (wie in den <strong>BWINF</strong>-Testfällen).<br />
8