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