• Keine Ergebnisse gefunden

Programmieren II

N/A
N/A
Protected

Academic year: 2021

Aktie "Programmieren II"

Copied!
4
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 13. April 2018

Programmieren II

9. Übungsblatt

Hinweis: Die Aufgaben dieses Übungsblatts können in den Rechnerübungen der zwei nächsten Semesterwochen bearbeitet werden.

Insgesamt werden in diesem Semester fünf Pflichtaufgaben gestellt. Dieses Übungsblatt enthält noch keine Pflichtaufgabe. Die erste Pflichtaufgabe wird sich auf dem nächsten Übungsblatt befinden.

Aufgabe 49: Zahlen der Form 235 heißen gemischte Zahlen. Sie lassen sich durch drei Attribute x, y, z ∈N mit z 6= 0, 0 ≤y < z und ggT(y, z) = 1 eindeutig charakterisieren.

x beschreibt den ganzzahligen Anteil, y den Zähler des Bruchteils und z dessen Nenner.

Für das Beispiel geltenx= 2, y= 3 und z= 5. Für die gemischte Zahl 5 ist beispielsweise x= 5, y= 0 und z = 1. 0 wird durch x= 0, y= 0 undz = 1 repräsentiert.

Schreiben Sie eine Klasse PositiveGemischteZahl zur Darstellung dieser Zahlen. Sie soll Methoden zur Addition, Subtraktion, Multiplikation und Division sowie zu den Ver- gleichsoperationen enthalten. Wenn eine größere von einer kleineren Zahl subtrahiert wird, ist das Ergebnis 0. Außerdem soll die MethodeString toString()zur Umwandlung von gemischten Zahlen in Zeichenfolgen programmiert werden. Beispielsweise soll 235 den String

"2.3/5"liefern. Achten Sie darauf, dass gemischte Zahlen stets gekürzt gespeichert werden.

Testen Sie Ihre Klasse an geeigneten Beispielen.

Zur Behandlung negativer gemischter Zahlen soll die Klasse PositiveGemischteZahl zur Klasse GemischteZahl abgeleitet werden. Führen Sie hierzu in der Unterklasse ein boolesches Attribut positiv ein und überlagern Sie die Methoden für die arithmetischen und Vergleichsoperationen sowie die Methode String toString(). Beispielsweise gelten 216 −778 =−51724 und 216/(−778) =−18952.

Berechnen Sie mit Ihrem Programm den genauen Wert der Summe

40

X

i=1

(−1)i+1

i = 1− 1 2 +1

3 −1 4 +1

5 − 1

6+. . .− 1 40 und vergleichen Sie ihn mit ln(2).

Empfehlung: Testen Sie die Ihre Methoden mithilfe des JUnit-Pakets.

(2)

Aufgabe 50: In dieser Aufgabe soll der Umgang mit Programmen des JDKs geübt werden.

a) Übersetzen Sie Ihre Lösung von Aufgabe 49 mit den entsprechenden Optionen, so dass der Debugger jdb verwendet werden kann. Führen Sie anschließend Ihr Pro- gramm mit dem Debugger schrittweise aus und sehen Sie sich die Objekte nach den Schritten an.

b) Erstellen Sie ein jar-Archiv, das die erforderlichen Dateien enthält und starten Sie das Programm aus dem Archiv heraus.

c) Kommentieren Sie die Elemente Ihres Programms mit den in der Übung vorgestellten Tags. Erzeugen Sie dann mit javadoc eine HTML-Seite und sehen Sie sich die Seite mit einem Browser an.

Zusatz:Gegeben sei die folgende Java-Methodebubblesort, die das Parameterfeld sortie- ren soll. Die Methode enthält einen Fehler. Finden Sie den Fehler, indem Sie das Programm schrittweise mit dem Debugger jdb ausführen.

static void bubblesort(int[] a) { int n=a.length;

for (int i=0; i<n-1; i++) for (int j=n; j>i; j--)

if (a[j-1]>a[j]) { int t=a[j];

a[j]=a[j-1];

a[j-1]=t;

} }

Aufgabe 51: Widerstände sind elektrische Bauteile mit einem Widerstandswert, der in Ohm (Ω) gemessen wird. Aus Widerständen lassen sich Netze gemäß der folgenden Regeln bilden:

– Ein einzelner Widerstand ist ein Netz.

– Zwei Netze mit den WiderständenR1 und R2 können in Serie geschaltet werden. Der Gesamtwiderstand beträgtR =R1+R2.

– Zwei Netze mit den WiderständenR1 und R2 können parallel geschaltet werden. Der GesamtwiderstandR ist durch R1 = R1

1 +R1

2 gegeben.

Bearbeiten Sie die folgenden Aufgaben.

a) Definieren Sie eine abstrakte KlasseNetmit der Methodeabstract double ohm().

b) Leiten Sie von Net eine konkrete Klasse Resistor für Widerstände ab. Der Wider- standswert ist unveränderlich.

c) Definieren Sie zwei Klassen Serial und Parallel für die serielle und die parallele Schaltung von Netzen. Die Konstruktoren dieser Klassen erhalten je zwei Netze als Argumente.

– 2 –

(3)

d) Schreiben Sie eine Anwendung, die das Netz

R6 R1

R3

R2

R4 R5

aufbaut und den Gesamtwiderstand ausgibt. Die WiderständeR1, R2, . . . ,R6 besit- zen die Werte 100 Ω, 200 Ω, . . . , 600 Ω.

e) Die Basisklasse Net wird erweitert um die Definition

abstract int resistors(); // liefert die Anzahl der Widerstände Passen Sie Ihre Klassen an. Für das angegebene Netz soll die Methode den Wert 6 liefern.

f) Als neue Sorte von Widerständen werden „Potentiometer“ eingeführt. Potentiometer sind Bauteile mit einem regelbarem Widerstandswert. Leiten Sie vonNeteine Klasse Potentiometerab, die zusätzlich eine Set-MethodesetOhmfür den Widerstandswert enthält.

g) Ersetzen Sie in der obigen Schaltung R4 durch ein Potentiometer. Schreiben Sie eine weitere Anwendung, die eine Liste der Widerstandswerte ausgibt, wenn das Potentiometer von 0 Ω bis 5 kΩ in Schritten von 200 Ω hochgeregelt wird.

Aufgabe 52: Insertionsort (Sortieren durch Einfügen) ist ein elementarer Sortieralgo- rithmus. Er ist sehr gut zum Sortieren kleiner Datenmengen geeignet.

Algorithmus: Am Anfang und nach jedem Schritt des Verfahrens besteht die zu sortie- rende Folgea0, . . . ,an−1 aus zwei Teilen: Der erste Teila0, . . . ,aj−1 ist bereits aufsteigend sortiert, der zweite Teil aj, . . . ,an−1 ist noch unsortiert. Das Elementaj wird als nächstes in den bereits sortierten Teil eingefügt, indem es der Reihe nach mit aj−1, aj−2 usw. ver- glichen wird. Sobald ein Elementai mitaiaj gefunden wird, wirdaj hinter ai eingefügt.

Wird kein solches Element gefunden, wird aj an den Anfang der Folge gesetzt. Damit ist der sortierte Teil um ein Element länger geworden. Im nächsten Schritt wird aj+1 in den sortierten Teil eingefügt usw. Am Anfang besteht der sortierte Teil nur aus dem Element a0, zum Schluss aus allen Elementen a0, . . . , an−1.

a) Formulieren Sie den Algorithmus Insertionsort als Java-Methode.

b) Berechnen Sie die Best- und die Worst-Case-Komplexität Ihrer Methode.

– 3 –

(4)

c) Beweisen Sie die partielle und die totale Korrektheit Ihrer Methode.

d) Testen Sie Ihre Methode, indem Sie mithilfe der Klasse java.util.Randomzufällige Felder generieren und diese anschließend sortieren. Überprüfen Sie die Korrektheit Ihrer Methode durch geeignete assert-Anweisungen.

Aufgabe 53: Eine physikalische Größe besteht aus einer Anzahl und einer Einheit, beispielsweise „2,34 Meter“.

Definieren Sie einen Aufzählungstyp Length, dessen Elemente verschiedene Längenein- heiten repräsentieren, wie zum Beispiel die folgenden:

Einheit Meter pro Einheit Abkürzung

Meter 1 m

Fuß 0,3048 ft

Kilometer 1000 km

Meile 1632,9 mi

Lichtjahr 9,461·1015 LY

Angström 10−10 Å

Schreiben Sie außerdem eine Klasse Distance, die eine Entfernung durch eine An- zahl und eine Einheit repräsentiert. Die Klasse soll mindestens die folgenden Methoden enthalten:

Distance Konstruktor aus Anzahl und Einheit. Negative Zahlen werden durch den Betrag ersetzt.

count Liefert die Anzahl der Einheiten dieser Entfernung.

unit Liefert die Einheit dieser Entfernung als Element des AufzählungstypsLength.

add Liefert die Summe aus der aktuellen Entfernung und einer anderen Entfernung als neues Objekt. Das Ergebnis hat die gleiche Einheit wie die aktuelle Entfernung.

toString Liefert eine Textdarstellung der aktuellen Entfernung.

as Liefert die aktuelle Entfernung in einer anderen Einheit.

Das folgende Programmfragment addiert zwei Kilometer und eine Meile und gibt das Ergebnis in Kilometer und in Meilen aus.

Distance d1 = new Distance(2, Length.km);

Distance d2 = new Distance(1, Length.mi);

Distance d12 = d1.add(d2);

Distance d21 = d2.add(d1);

System.out.println(d12);

System.out.println(d21);

– 4 –

Referenzen

ÄHNLICHE DOKUMENTE

The potentiometer on the myAVR Board, which is used for the reference voltage, and the potentiometer on the metal detector (for adjusting the working point of the op-amp)

Auch die Öffnungen für Speaker, Taster und Potentiometer nicht vergessen auszuschneiden.. Viel Spaß beim Basteln wünscht das

Die Methode remove(int n) soll das Element an Position n der aktuellen Liste löschen.. Die Methode get(int n) soll das Element an Position n der aktuellen

b) Testen Sie Ihre Implementierung, indem Sie eine Klasse LinkedListStackTest anle- gen, mit der alle Methoden des Interfaces für die Datentypen Integer und Character mit JUnit

Halten Sie sich bei der Programmierung an die in der Vorlesung vorgestellten Richtlini- en zur Formatierung von Java-Programmen. Auf der Internetseite zu dieser Veranstal- tung

Ein Kakuro-Rätsel besteht aus einer rechteckigen, nicht notwendigerweise quadratischen Matrix aus schwarzen, grauen und weißen Feldern. Die schwarzen Felder bleiben leer. Die

Pflichtaufgabe 78: Die erste Pflichtaufgabe dieses Semesters war es, eine csv- Datei, die Adressen enthält, einzulesen, sortiert in einer verketteten Liste zu speichern und aus-

c) Schreiben Sie eine Methode int anzahl(), die die Anzahl der nichtleeren Knoten des aktuellen Baums liefert. Durch die Berechnung darf der Baum nicht verändert werden.. d)