10. ¨Ubung zu ” Informatik I“ im WS 10/11

Werbung
Praktische Informatik in der Wirtschaft
Westfälische Wilhelms-Universität Münster
Prof. Dr. Herbert Kuchen
14. Januar 2011
10. Übung zu Informatik I“ im WS 10/11
” Januar 2011, 11 00 Uhr.
Abgabe: 21.
Aufgabe 25
(3+1+2+1=7 Punkte)
Ein Verfahren zur Berechnung des größten gemeinsamen Teilers zweier Zahlen ist der
Euklidische Algorithmus. Er hat folgende Eigenschaften:

f alls
x<y
 ggT (y, x)
ggT (x − y, y) f alls x ≥ y ∧ y 6= 0
ggT (x, y) =
mit x, y ∈ IN

x
f alls x ≥ y ∧ y = 0
a) Implementieren Sie den Euklidischen Algorithmus in Haskell durch die Funktion
ggT :: Int -> Int -> Int!
b) Schreiben Sie eine weitere Funktion ggT1024, welche zu einer ihr übergebenen Zahl
x den größten gemeinsamen Teiler von x und 1024 berechnet! Versuchen Sie dabei
die Funktion ggT möglichst sinnvoll wieder zu verwenden!
c) Nutzen Sie die aus der Vorlesung bekannte Funktion map zusammen mit der Funktion ggT1024 um eine Funktion ggT1024map zu erstellen, die aus einer Liste von
Zahlen eine neue Liste von Zahlen erstellt, die die größten gemeinsamen Teiler der
Zahlen aus der Ursprungsliste und 1024 enthält! Wie lautet der Typ der Funktion
ggT1024map?
d) Wie lautet der Haskell-Ausdruck zur Berechnung der größten gemeinsamen Teiler von 1024 und den Zahlen von 1 bis 100 unter Verwendung der Funktion
ggT1024map?
Aufgabe 26
Gegeben sind die folgende Typdefinition:
(8 Punkte)
type Woerterbuch = String -> String
und folgende Methodensignaturen:
empty
insert
remove
lookup
::
::
::
::
Woerterbuch
String -> String -> Woerterbuch -> Woerterbuch
String -> Woerterbuch -> Woerterbuch
String -> Woerterbuch -> String
Definieren Sie die die vier Funktionen empty, insert, remove und lookup so, dass sich
mit diesen ein Wörterbuch realisieren lässt. empty steht für ein leeres Wörterbuch ohne Einträge, welches für jedes gesuchte Wort das Ergebnis "nicht gefunden" liefert.
1
insert e u w fügt dem
remove e w entfernt den
Wörterbuch w einen Eintrag e mit der Übersetzung u hinzu.
Eintrag e aus dem Wörterbuch. lookup e w schlägt einen Eintrag e im Wörterbuch nach. Ist der Eintrag vorhanden, wird die Übersetzung zurückgegeben, andernfalls lautet das Ergebnis "nicht gefunden".
Sie können Ihre Funktionen mit folgendem Ausdruck testen:
lookup "Haus" (insert "Haus"
"house"
empty)}
Aufgabe 27
(2+3+5+5=15 Punkte)
Gegeben ist die folgende Typdefinition bzw. der folgende Datentyp:
type Vertex = (Float, Float)
data Shape = Triangle Vertex Vertex Vertex
| Polygon [Vertex]
Triangle beschreibt dabei ein Dreieick definiert durch die drei Koordinaten seiner Ecken.
Polygon hingegen definiert ein Vieleck, indem man mindestens drei voneinander verschie-
dene Punkte in einem Koordinantensystem durch Strecken miteinander verbindet.
a) Erstellen Sie eine Funktion distance :: Vertex -> Vertex -> Float zur Berechnung des Euklidischen Abstands zwischen zwei Punkten innerhalb eines Koordinatensystems!
b) Erstellen Sie eine Funktion perimeter :: Shape -> Float zur Berechnung des
Umfangs eines Shape-Objektes!
c) Implementieren Sie die rekursive Funktion area :: Shape -> Float um den Flächeninhalt von Dreiecken bzw. (unregelmäßigen) Polygonen zu berechnen! Gehen Sie
davon aus, dass jeder Innenwinkel des übergebenen Polygons kleiner als 180◦ ist.
Unter dieser Voraussetzung lässt sich der Flächeninhalt des Polygons auf einfache Weise berechnen. Betrachten Sie zunächst drei miteinander verbundene Ecken
des Polygons! Schneiden“ Sie das so entstandene Dreieck vom Polygon ab und
”
berechnen Sie die so entstandenen Flächen getrennt voneinander!
d) Realisieren Sie die Funktion area ohne Verwendung von Rekursion mit Hilfe des
divide-and-conquer-Schemas aus der Vorlesung. Definieren Sie auch die benötigten
Hilfsfunktionen.
Anmerkung: Versehen Sie Ihre Abgaben bitte mit Namen, Matrikelnummern, E-MailAdressen und Studiengängen der beteiligten Bearbeiter und werfen Sie diese in schriftlicher Form in die Abgabefächer Ihrer jeweiligen Übungsgruppenleiter. Die Abgabefächer
befinden sich im Mathe-Gebäude direkt gegenüber des Hörsaals M3. Um die Korrektur
der Programmieraufgaben zu erleichtern, senden Sie bitte sämtlichen von Ihnen erstellten oder veränderten Quellcode zusätzlich zur schriftlichen Abgabe per Mail an Ihren
jeweiligen Übungsgruppenleiter.
Pro Abgabe dürfen maximal 3 Bearbeiter an der Lösung der Aufgaben beteiligt sein.
Bei Fragen zum Übungsbetrieb wenden Sie sich bitte an Ihren Übungsgruppenleiter oder
an Claus Alexander Usener.
2
Herunterladen