PVL 5 - Canvas (5+2 Punkte) Abgabe bis 7.2.2016 Gegeben sei ein (zweidimensionales) kartesisches Koordinatensystem K, das die Position von Punkten durch die Menge ganzzahliger Koordinaten im Intervall [–999,999] beschreibt. Des Weiteren sei eine Zeichenfläche (Canvas) in K gegeben, die lediglich einen Ausschnitt von K im ersten Quadranten umfasst. Für die x-Koordinaten im Canvas gelte der Wertebereich [0,WIDTH–1] und für die y-Koordinaten [0,HEIGHT–1]. In diesen Canvas können Punkte an gültigen Koordinaten gezeichnet werden. Der Canvas soll pseudografisch mit Hilfe eines zweidimensionalen Feldes von Zeichen visualisiert werden. Hierzu werde die Existenz eines Punktes im Canvas durch ein '*'-Zeichen ausgedrückt. Die Nichtexistenz eines Punktes werde mit Hilfe eines '.'-Zeichens symbolisiert. Dr. Frank Seifert Hausaufgaben Algorithmen & Programmierung WS 2014/2015 22 PVL 5 - Teilaufgaben a) Schreiben Sie eine Funktion clearCanvas(…), die einen Canvas so initialisiert, dass er keine Punkte enthält. b) Schreiben Sie eine Funktion drawCanvas(…), die einen Canvas auf dem Bildschirm ausgibt. Hierbei sollen alle Punkte mit gleicher y-Koordinate in einer Textzeile ausgegeben werden. Punkte mit verschiedenen y-Koordinaten müssen in verschiedenen Textzeilen ausgegeben werden. Achten Sie hierbei auf eine grafische Entsprechung der Punktpositionen der Textausgabe zu den Punktpositionen im Koordinatensystem. c) Schreiben Sie eine Funktion drawline(…), die für eine via Start- und Endpunkt gegebene Linie l das Zeichnen dieser Linie simuliert, indem sie die nächstliegenden Punkte von l in K findet und diese zeichnet, falls sich die Koordinaten des jeweils zu zeichnenden Punktes innerhalb des Canvas befinden. Dr. Frank Seifert Hausaufgaben Algorithmen & Programmierung WS 2014/2015 23 PVL 5 - Programm Schreiben Sie ein Programm, das eine Folge ganzer Zahlen von der Tastatur einliest und diese wie folgt verarbeitet: • jeweils zwei aufeinanderfolgende Zahlen stellen die (x,y)-Koordinaten eines Punktes dar. • der jeweils erste gelesene Punkt definiert den Startpunkt einer Linie l • der jeweils zweite gelesene Punkt definiert den Endpunkt der Linie l • Sobald Start- und Endpunkt von l komplett eingelesen wurden, zeichnen Sie l unter Nutzung der Funktion drawline() und fahren anschließend mit der weiteren Verarbeitung der eingegebenen Zahlenfolge fort • die Eingabefolge wird terminiert durch Eingabe eines Werts für die x-Koordinate des Startpunkts von l, der außerhalb des zulässigen Wertebereichs liegt. Geben Sie in diesem Fall den Canvas mit Hilfe der Funktion drawCanvas() komplett auf dem Bildschirm aus. Leeren Sie anschließend den Canvas durch Aufruf der Funktion clearCanvas() und starten Sie den Programmdurchlauf erneut. Dr. Frank Seifert Hausaufgaben Algorithmen & Programmierung WS 2014/2015 24 PVL 5 - Hinweise • Der Euklidische Abstand zweier direkt benachbarter Punkte einer Linie darf nicht größer als √2 sein, d.h. dass sich diese Punkte direkt neben- oder übereinander befinden bzw. diagonal aneinander grenzen müssen. • Jeder Punkt einer Linie darf maximal zwei direkt horizontal, vertikal oder diagonal angrenzende Punkte auf derselben Linie haben. • Die Start- und / oder Endpunkte der Linien können auch außerhalb des Canvas liegen. Obwohl außerhalb des Canvas liegende Punkte nicht dargestellt werden können, müssen Sie jedoch für die korrekte Positionsberechnung der im Canvas liegenden Punkte einer Linie berücksichtigt werden. • Sie dürfen keine Annahmen bzgl. der Lage von Start- und Endpunkt einer Linie zueinander treffen. • Fehlerhafte Eingabedaten müssen Sie nicht abfangen. Sie können davon ausgehen, dass die Eingabe ausschließlich aus einer Folge von durch Leerzeichen separierten Integerzahlen besteht. • Zulässige Bibliotheksfunktionalität: scanf(), printf() / putchar() und der boolesche Datentyp • Nutzen Sie als Grundgerüst Ihrer Implementierung das Programmfragment der Folgefolie, das Sie um Ihre Lösungen der jeweiligen Funktionen ergänzen. Nutzen Sie bereits deklarierte Datentypen und Funktionen unverändert. Bei Bedarf können Sie sich natürlich gern weitere Funktionen und Datentypen definieren. • Für das Erkennen und Behandeln besonderer Situationen können Sie bis zu zwei Zusatzpunkte erhalten. Dr. Frank Seifert Hausaufgaben Algorithmen & Programmierung WS 2014/2015 25 PVL 5 - Programmgerüst #include <stdio.h> #include <stdbool.h> #define WIDTH 80 #define HEIGHT 40 // Breite des Canvas // Höhe des Canvas struct LINE { int x1; int y1; int x2; int y2; }; typedef struct LINE LINE; void drawLine(char canvas[WIDTH][HEIGHT], LINE l) { … } void clearCanvas(char canvas[WIDTH][HEIGHT]) { … } void drawCanvas(char canvas[WIDTH][HEIGHT]) { … } int main() { char canvas[WIDTH][HEIGHT]; … clearCanvas(canvas); … // Einlesen der Zahlenfolge und Zeichnen der Linien mittels drawline() drawCanvas(canvas); … return 0; } Dr. Frank Seifert Hausaufgaben Algorithmen & Programmierung WS 2014/2015 26 PVL 5 - Beispiel Dr. Frank Seifert Linienkoordinaten: 10 10 35 35 35 35 45 5 45 5 10 10 100 -5 40 50 12345 ....................................................*........................... .....................................................*.......................... ......................................................*......................... Ungültige .......................................................*........................ ...................................*....................*....................... Koordinate ..................................**.....................**..................... bewirkt .................................*..*......................*.................... Ausgabe ................................*...*.......................*................... ...............................*....*........................*.................. des ..............................*......*........................*................. Canvas .............................*.......*.........................*................ ............................*........*..........................*............... ...........................*..........*..........................*.............. ..........................*...........*...........................*............. .........................*............*............................*............ ........................*..............*............................*........... .......................*...............*.............................**......... ......................*................*...............................*........ .....................*..................*...............................*....... ....................*...................*................................*...... Start- und Endpunkt ...................*....................*.................................*..... ..................*......................*.................................*.... dieser Linie liegen .................*.......................*..................................*... außerhalb des Canvas ................*........................*...................................*.. ...............*..........................*...................................*. ..............*...........................*....................................* .............*............................*..................................... ............*..............................*.................................... ...........*...............................*.................................... ..........****.............................*.................................... ..............*******.......................*................................... .....................*******................*................................... ............................*******.........*................................... ...................................*******...*.................................. ..........................................****.................................. ................................................................................ ................................................................................ ................................................................................ ................................................................................ ................................................................................ Hausaufgaben Algorithmen & Programmierung WS 2014/2015 27
© Copyright 2024 ExpyDoc