View on GitHub

GymInf - Programmierung I

Übungen 3

Tutoren

matthias.amberg@unibas.ch

Foren-Austausch

Wir können uns für die Übungen auch mittels des offziellen GymInf Moodle Forum austauschen.

Übungs-Hilfsdateien

Bitte verwenden Sie die Vorlagen im Zipfile zu den Übungen

Hinweise

Aufgabe 1 - Transponierte einer Matrix

Sie finden im Verzeichnis src/main/java/ die Datei Matrix.java. Implementieren Sie die Methode transpose(double[][] matrix) die eine Matrix von beliebiger Dimension nimmt und die Transponierte dieser Matrix zurückgibt. Die übergebene Matrix darf dabei nicht verändert werden.

Aufgabe 2 - Bubble Sort I

Mit dem Verfahren Austauschsortieren (Bubble Sort) kann man die Elemente eines Arrays sortieren. Dazu wandert man von vorne nach hinten durch das Array und betrachtet jeweils benachbarte Elemente. Wenn diese in der falschen Reihenfolge stehen, vertauscht man sie. Ist man am Ende des Arrays angelangt, beginnt man wieder von vorne - solange bis keine Vertauschungen mehr auftreten.

Sie finden im Verzeichnis src/main/java die Datei BubbleSort.java. Implementieren Sie die fehlenden Methoden in dieser Klasse.

Aufgabe 3 - Pixelgrafik

Sie finden im Verzeichnis src/main/java/ die Datei TurtlePixelGraphics.java. Darin sind die Methoden drawPixel und newLine implementiert, mit der Sie mit Turtlegrafik einen Pixel an der aktuellen Turtleposition zeichnen können sowie jeweils auf die nächste Zeile springen können.

Implementieren Sie eine Methode drawImage(bool[][] image), welches ein 2D boolean Array nimmt, und daraus das resultierende Bild zeichnet, indem es obige Funktionen aufruft.

Um die Methoden zu testen, implementieren Sie eine Methode implicitCircle welche die impliziten Gleichung für den Kreis

$x^2+y^2-r^2<0$

einen Kreis mit Radius r implementiert.

Schlussendlich implementieren Sie die Methode drawCircleImage, welche ein Bild (ein 2D boolean Array) eines Kreises mit gegebenem Radius erstellt.

Hinweis: Beachten Sie, dass obige Kreisgleichung einen Kreis mit Radius $r$ mit Mittelpunkt $(0, 0)$ definiert. Sie können also nicht direkt die Indizes ihres Arrays für die Definition nehmen, sondern müssen diese noch entsprechend anpassen, damit der Kreis in die Mitte des Bildes zu liegen kommt.

Kompilieren und starten Sie das Programm mit der Angabe der Datei jturtle-0.5.jar, also so wie die Squares Aufgabe auf Blatt 1.

Es sollte folgendes Bild erstellt werden:

Aufgabe 4 - Binär und Hexadezimaldarstellung

In dieser Aufgabe sollen Sie Zahlen von einer Basis in eine andere umschreiben. Dafür müssen Sie die fehlenden Methoden in der Java Datei NumberConversions.java implementieren, welche Sie im Verzeichnis src/main/java finden.

a) Umwandlung einer Dezimalzahl in eine Hexadezimalzahl

Unsere gewohnten Zahlen sind die Dezimalzahlen. Das sind Zahlen zur Basis zehn mit den Ziffern 0 bis 9. Jede Stelle $i$ hat die Wertigkeit $10^{i−1}$. Die Hexadezimalzahlen sind Zahlen zur Basis 16. Sie bestehen aus den Ziern 0 bis 9 und den Buchstaben A, B, C, D, E und F für die Dezimalwerte 10, 11, 12, 13, 14 und 15. Jede Stelle $i$ hat die Wertigkeit $16^{i−1}$. Um Hexadezimalzahlen von Dezimalzahlen zu unterscheiden, notieren wir sie mit dem Präfix ‘0x’. Beispiel:

0x1B7 $= 1 · 16^2 + 11 · 16^1 + 7 · 16^0 = 256 + 176 + 7 = 439$

Implementieren Sie die Methode binToHex, welche eine positive ganzzahlige Dezimalzahl in eine Hexadezimalzahl umwandelt und diese als String zurückgibt. Verwenden sie keine von Java bereitgestellte Umwandlungsmethode. Ihr Programm sollte sich also wie folgt verhalten:

> java NumberConversion 439
0x1B7

b) Umwandlung einer Binärzahl in eine Dezimalzahl

Implementieren Sie die Methode binToDec, welche eine positive ganzzahlige Binärzahl in eine Dezimalzahl umwandelt und diese Zurückgibt. Die Binärzahl wird als String mit dem Präfix 0b übergeben. Ihr Programm sollte sich also wie folgt verhalten

> java NumberConversion 0b1001
9

Aufgabe 5 - Zeichenketten-Analyse

Sie finden im Verzeichnis src/main/java die Datei Palindrom.java. Implementieren Sie die Methode testPalindrom, welche den übergebenen Text daraufhin überprüft, ob er ein Palindrom ist. Ein Palindrom ist ein Text, dessen Zeichen vorwärts und rückwärts gelesen die selbe Reihenfolge ergeben. Beachten Sie dabei nur die Buchstaben, nicht die Leer- und Sonderzeichen des eingegebenen Textes, und ignorieren Sie Gross- und Kleinschreibung. Ein paar Beispiele für Palindrome sind:

Aufgabe 6 - Kommentare Löschen

Sie finden im Verzeichnis src/main/java die Datei Comments.java. Implementieren Sie die fehlende Funktion removeComments, welche für ein übergebenes Java Programm alle Kommentarzeilen die mit /* */ oder // markiert sind, entfernt. Das der Methode übergebene Argument darf dabei nicht verändert werden. Beachten Sie: Verschachtelte Klammerkommentare (also /* /* */ */) sind in Java Programmen nicht möglich. Ein Klammerkommentar kann aber in einem Zeilenkommentar vorkommen.

Automatisiertes Testen der Übungen

Sie können diese Aufgaben wie schon besprochen manuell mit javac und java kompilieren und ausführen. Wir stellen Ihnen aber eine Test-Suite zur Verfügung, mit denen Sie Ihre Lösung bis zu einem gewissen grad selbständig überprüfen können. Falls Sie das automatisiert testen möchten, lesen Sie bitte die Kurzanleitung