• Keine Ergebnisse gefunden

Aufgabe 2 Sortieren durch Einfügen auf Arrays (praktisch)

N/A
N/A
Protected

Academic year: 2022

Aktie "Aufgabe 2 Sortieren durch Einfügen auf Arrays (praktisch)"

Copied!
4
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Prof. Dr. A. Poetzsch-Heffter Dipl.-Inform. J. O. Blech Dipl.-Inform. M. J. Gawkowski Dipl.-Inform. N. Rauch

TU Kaiserslautern

Fachbereich Informatik AG Softwaretechnik

Übungsblatt 9: Software-Entwicklung I (WS 2007/08)

Ausgabe: 18. Dezember 2007 Abgabe: 7. Januar 2008, 12.00 Uhr Abnahme praktischer Teil: 7. Januar - 10. Januar 2008

Aufgabe 1 Das Sieb des Eratosthenes (praktisch) (5 Punkte)

Informieren Sie sich über das Sieb des Eratosthenes und implementieren Sie es in Java. Folgendes sollen Sie dabei beachten:

• Lesen Sie von der Kommandozeile eine natürliche Zahln ein. Legen Sie ein bool’sches Feld der Größenan. Jedes Element im Feld soll den Primzahlstatus des Index wiedergeben. Überprüfen Sie, ob die eingelesene Größe sinnvoll ist. Geben Sie gegebenenfalls eine Fehlermeldung aus.

• Am Ende sollen alle berechneten Primzahlen auf der Konsole ausgegeben werden.

• Ihre Implementierung soll nur for- und keine while-Schleifen enthalten.

Aufgabe 2 Sortieren durch Einfügen auf Arrays (praktisch)

(6 Punkte)

In dieser Aufgabe geht es darum den in der Vorlesung vorgestellten Sortieren durch Einfügen Algorithmus prozedural auf Feldern zu implementieren.

a) Entwerfen Sie einen Verbund,DataSetder einen Schlüssel (key) und einen String (name) speichert.

Schreiben Sie nun eine Prozedur, die in ein Feld von DataSet-Verbunden ein weiteres Element sortiert (nach key) einfügt. Sie dürfen davon ausgehen, dass das Feld vor dem Einfügen sortiert ist. (3 Punkte) b) Implementieren Sie basierend auf Teilaufgabe a) ein vollständiges Sortieren durch Einfügen. (2 Punkte) c) Schreiben Sie ein Hauptprogramm, das Ihre Implementierung testet. (1 Punkt)

Aufgabe 3 Sortieren durch Einfügen auf rekursiven Verbunden

(praktisch) (8 Punkte)

In dieser Aufgabe geht es darum InsertionSort rekursiv zu implementieren.

a) Entwerfen Sie einen rekursiv referenzierten Verbund DataSetList, deren Elemente vom Verbund DataSetaus der vorangegenden Aufgabe sind. (1 Punkt) b) Schreiben Sie eine rekursive Java-Methodevoid insert(DataSetList l, DataSetList elem){. . .}, die eine nach Schlüsseln sortierte einfachverkette Listelund ein einzufügendes Elementelemals Einga- be entgegenimmt undeleminleinfügt, ohne die Sortierungseigenschaft vonlzu verletzen. (3 Punkte) Hinweis:Sie dürfen annehmen, dass die Listeelemgenau ein Element enthält.

(2)

c) Implementieren Sie eine rekursive Java-MethodeDataSetList insertionSort(DataSetList l){. . .}, die eine einfachverkettete Liste l als Eingabe eintgegennimmt und diese nach dem Sortieren durch

Einfügen Algorithmus sortiert. (3 Punkte)

d) Schreiben Sie ein Hauptprogramm, das Ihre Implementierung testet. (1 Punkt)

Aufgabe 4 Append mit rekursiven Verbunden (praktisch) (11 Punkte)

In dieser Aufgabe sollen Sie drei verschiedene Prozeduren schreiben, die zwei einfach verkettete Listen aneinander hängen. Die Arbeitsweisen der Prozeduren werden in den Abbildungen unten veranschaulicht.

a) Schreiben Sie eine rekursive Java-Methode

DataSetList append1(DataSetList l1, DataSetList l2){. . .},

die zwei einfachverketten Listenl1 undl2 als Eingabe entgegenimmt undl2 anl1 anhängt, indem siel2

in die letzte next-Komponente vonl1speichert. Die Arbeitsweise vonappend1wird in den Abbildungen 1 und 2 veranschaulicht. Das Ergebnis der Prozedur istl1. (3 Punkte) b) Schreiben Sie eine rekursive Java-Methode

DataSetList append2(DataSetList l1, DataSetList l2){. . .},

die zwei einfachverketten Listenl1 undl2 als Eingabe entgegenimmt, ein Duplikat des Skeletts vonl1 erzeugt,l3, undl2 in die letzte next-Komponente vonl3speichert. Die Arbeitsweise vonappend1wird in den Abbildungen 1 und 3 veranschaulicht. Das Ergebnis der Prozedur istl3. (3 Punkte) c) Schreiben Sie eine rekursive Java-Methode

DataSetList append3(DataSetList l1, DataSetList l2){. . .},

die zwei einfachverketten Listenl1undl2als Eingabe entgegenimmt, die gesamten vonl1 undl2refe- renzierten Geflechte dupliziert, das zweite Duplikat in die letzte next-Komponente des ersten Duplikats speichert. Die Arbeitsweise vonappend3wird in den Abbildungen 1 und 4 veranschaulicht. Das Ergeb-

nis der Prozedur istl3 (3 Punkte)

d) Beantworten Sie schriftlich die folgende Frage, die sich auf die Teilaufgabe c bezieht: Ist die Sum- me der Verbund-Objekte in den Geflechten, die vonl1 undl2 referenziert werden, und die Anzahl der Verbund-Objekte im Geflecht, das vonl3referenziert wird, immer gleich? Begründen Sie Ihre Antwort.

(2 Punkte)

3:DSList

1:DSList 2:DSList 4:DSList

l1 l2

5:DataSet 6:DataSet 7:DataSet 8:DataSet

Abbildung 1: Das Objekt-Geflecht vor den Aufrufen vonappend1,append2undappend3.

Aufgabe 5 Die große Weihnachts-Refactoring-Aufgabe (praktisch) (10 Bonus-Punkte)

Laden Sie sich von der Vorlesungsseite die Datei SurfXY.java herunter! Das Programm zeichnet drei- dimensionale Kurven. Diese werden durch Linien dargestellt. In dieser Aufgabe sollen Sie das Programm so ergänzen, dass zusätzlich Linien gezeichnet werden: Die Kurve soll als Gitternetz dargestellt werden.

(3)

4:DSList l1

l2

1:DSList 2:DSList 3:DSList

5:DataSet 6:DataSet 7:DataSet 8:DataSet

Abbildung 2: Das Objekt-Geflecht nach dem Aufruf vonappend1.

4:DSList

l1 l2

1:DSList 2:DSList 3:DSList

5:DataSet 6:DataSet 7:DataSet 8:DataSet

9:DSList 10:DSList l3

Abbildung 3: Das Objekt-Geflecht nach dem Aufruf vonappend2.

5:DataSet 6:DataSet 7:DataSet 8:DataSet

9:DSList 10:DSList 11:DSList 12:DSList

l1 l2

13:DataSet 14:DataSet 15:DataSet 16:DataSet

a b c d

a b c d

1:DSList 2:DSList 3:DSList 4:DSList

l3

Abbildung 4: Das Objekt-Geflecht nach dem Aufruf vonappend3.

(4)

a) Schreiben Sie die Datei SurfXY.java so um, dass sie wesentlich verständlicher wird. Bennen Sie hierzu zum Beispiel Variablennamen um, ergänzen Sie Prozeduren um Parameter, führen Sie lokale Variablen ein und benutzen Sie Verbunde.

b) Ergänzen Sie jetzt die zusätzlichen Linien.

Referenzen

ÄHNLICHE DOKUMENTE

4 direkte Blöcke, 128 einfach indirekt adressierte Blöcke (ein zusätzlicher Block), 9 zweifach indirekt adressierte Blöcke (zwei zusätz- liche Blöcke)?. Es werden also drei

Wieviel Blöcke belegt eine Datei, die 72 000 Byte Daten enthält. Berücksichtigen Sie nicht den Platz, der im Datei-Verzeichnis (Directory, Katalog)

Lege eine Klasse Auto an mit den folgenden Eigenschaften: Marke, Modell, Verbrauch, Tankinhalt, LeistungInKW und Baujahr2. Kodiere dann

Lege eine Klasse Auto an mit den folgenden Eigenschaften: Marke, Modell, Verbrauch, Tankinhalt, LeistungInKW.. Kodiere dann

bilde eine neue Liste aus allen kleineren Elementen und lasse diese sortieren, bilde eine neue Liste aus allen größeren Elementen und lasse diese sortieren,. Hänge die sortierte

Die Klasse ist so zu erweitern, dass der Baum durchlaufen werden kann (Iterator), um alle B¨ucher eines gegebenen Autors suchen zu

Damit nicht bei jeder Anfrage ein Thread erzeugt werden muss, stellen Sie einen Pool von Threads bereit, aus dem bei einer Anfrage ein Thread ausgew¨ahlt wird. Schreiben Sie als

r2 Aufgabenstellung: Geben Sie an, um welchen Faktor sich der Betrag F der Kraft ändert, wenn der Betrag der Punkt­ ladungen q1 und q2 jeweils verdoppelt und der Abstand r