Algorithmen & Datenstrukturen Übungen P. Fierz / HS 2012/2013 Kapitel 1 Daten Aufgabe 1.1 [Endliche Arithmetik] Gegeben sei eine (dezimale) endliche Arthmetik M mit 7 signifikanten Stellen und einem Exponenten im Bereich -33 bis +33. Jede Operation wird auf 8 Stellen berechnet und das Resultat anschliessend auf 7 Stellen gerundet. a) Wie gross ist die kleinste positive Zahl in M? b) Wie gross ist die grösste positive Zahl in M? c) Wie gross ist die grösste Zahl in M, die kleiner als 1 ist? d) Wie gross ist die kleinste Zahl in M die grösser als 100 ist? e) Wieviele verschiedene Zahlen existieren in M. f) Beweisen Sie mit Hilfe eines Zahlenbeispiels, dass das folgende Gesetz der Arithmetik in der endlichen Arithmetik M nicht gilt. (a · b) · c = a · (b · c) Aufgabe 1.2 [Berechnung von π] Um π näherungsweise zu berechnen können regelmässige, dem Kreis einbeschriebene Vielecke, deren Fläche An leicht zu berechnen sind verwendet werden. Der Zusammenhang zwischen π und den Flächen ist folgendermassen gegeben: lim n→∞ Für r = 1 und n = 6 ist An = 3 2 √ An =π r2 3 allgemein gilt: An = n 2π sin(αn ) wobei αn = 2 n Unter Verwendung der folgenden trigonometrischen Identität α sin( ) = 2 v q u u 1 − 1 − sin2 (α) t 2 lässt sich dann eine Rekursionsformel zur Berechnung von A2n aus An herleiten. 1-1 Algorithmen & Datenstrukturen Übungen P. Fierz / HS 2012/2013 a) Schreiben Sie die Rekursionsformel zur Berechnung von π auf. b) Schreiben Sie ein Java-Programm, dass π nach der obigen Formel berechnet (Abbruchkriterium: sin(α) < 1.e − 12). c) Kommentieren Sie das erzielte Resultat. d) Schreiben Sie die Rekursionsformel in Ihrem Programm so um, dass der Algorithmus stabil wird. Tip: a−b= a2 − b2 a+b Aufgabe 1.3 [Geklammerte Ausdrücke] Gegeben seien geklammerte arithmetische Ausdrücke, wobei die Klammerpaare {},() und [] zugelassen sind. Gesucht ist ein Algorithmus, der entscheidet, ob die Ausdrücke korrekt geklammert sind. Beispiele: • (a + b} falsch • (a · [b + c] − 3)/4 korrekt • (a + (b · c))/4 korrekt • (a + b · [c − d) falsch Verwenden Sie zur Lösung des Problems die Klasse Stack von Java. Aufgabe 1.4 [Polnische Notation] Entwickeln Sie einen Algorithmus, der logische Ausdrücke in polnischer Notation mit Hilfe eines Stacks von links nach rechts auswertet. Die Operatoren sind A(nd), O(r) und N(ot). Die Operanden werden mit T(rue) und F(alse) angegeben. Beispiele: AFNT OAFOTFT T F Der Algorithmus darf annehmen, dass die Ausdrücke korrekt sind. Tip: • T und F allein sind auch Ausdrücke in polnischer notation. • In der polnischen Schreibweise gilt, dass unmitelbar nach einem Operator seine beiden Operanden folgen. Die Operanden sind selbst wieder Ausdrücke in polnischer Notation. 1-2 Algorithmen & Datenstrukturen Übungen P. Fierz / HS 2012/2013 Aufgabe 1.5 [Bäume] Füllen Sie die folgende Tabelle aus. Formulieren Sie möglichst allgemeine Aussagen und begründen Sie diese. Vollständiger binärer Baum Beliebiger Binärer Baum Gegeben Tiefe d Aussage über: Anzahl Blätter m Anzahl Knoten n Geg. Anzahl Blätter m Aussage über: Tiefe d Anzahl Knoten n Geg. Anzahl Knoten n Aussage über: Anzahl Blätter m Tiefe d Aufgabe 1.6 [Suchstruktur als ADT] Unter einer Suchstruktur versetehen wir eine Datenstruktur, die es erlaubt, in ihr eingefügte Elemente nach einem gegebenen Schlüssel wieder zu finden. Schreiben Sie ein Java Interface für eine Suchstruktur. Dabei müssen mindestens die folgenden Anforderungen erfüllt sein: • Als Schlüssel sollen beliebig geordnete Datentypen möglich sein (Objekte). • Es können Elemente eingefügt bzw. wieder gelöscht werden. • Suchen eines Elementes mit Angabe eines Schlüssels. • Finden des nächsten Schlüssels. • Auslisten aller Elemente in Aufsteigender Reihenfolge. Es ist darauf zu achten, dass alle Methoden genau beschrieben werden (Preconditions und Postconditions). 1-3