Preview only show first 10 pages with watermark. For full document please download

Aufgabenblatt 1 - Goethe

   EMBED


Share

Transcript

Prof. Dr. Manfred Schmidt-Schauß K¨ unstliche Intelligenz/Softwaretechnologie Fachbereich Informatik und Mathematik/ Institut f¨ ur Informatik Goethe-Universit¨ at Frankfurt am Main Grundlagen der Programmierung 2 Sommersemester 2016 Aufgabenblatt Nr. 1 Abgabe: Mittwoch 20. April 2016 vor! der Vorlesung Aufgabe 1 (0 Punkte) Lesen Sie die Allgemeinen Hinweise“ auf der Webseite zur Vorlesung: ” http://www.informatik.uni-frankfurt.de/~prg2/SS2016/#Aufgaben Aufgabe 2 (10 Punkte) Implementieren Sie eine Funktion bonuspunkte in Haskell, die als Eingaben eine Gesamtzahl an ¨ ¨ Ubungspunkten aus der ersten H¨ alfte, eine Gesamtzahl an Ubungspunkten aus der zweiten H¨ alfte, sowie zwei Wahrheitswerte erh¨ alt, die jeweils genau dann wahr (d.h. True) sind, wenn in der ersten ¨ (bzw. zweiten) H¨ alfte der Ubungen mindestens einmal vorgerechnet wurde. Als Ausgabe soll die Funktion die Bonuspunkte f¨ ur die Klausur berechnen. Testen Sie die Funktion anschließend mit sinnvollen Werten. Die Regeln zur Anrechnung der Bonuspunkte sind Ihnen aus Aufgabe 1 schon bekannt. Aufgabe 3 (30 Punkte) In dieser Aufgabe machen wir davon Gebrauch, dass Haskell Funktionen h¨oherer Ordnung unterst¨ utzt, daher k¨onnen Funktionen (genau wie Daten) als Ein- und als Ausgabe von anderen Funktionen verwendet werden. Eine Matrix wird durch eine zweistellige Funktion f modelliert, wobei f i j das Matrix-Element in Zeile i und Spalte j darstellt. Die Matrizen sind stets quadratisch und alle Matrix-Elemente sind nichtnegative ganze Zahlen. Negative Funktionswerte werden allen Elementen zugeordnet, die außerhalb der Dimension der Matrix liegen. Die folgende Funktionen stellen die Matrizen auf der folgende Seite dar. matrixA matrixA matrixA matrixA matrixA matrixA matrixA matrixA matrixA matrixA 1 1 1 2 2 2 3 3 3 _ 1 2 3 1 2 3 1 2 3 _ = = = = = = = = = = 0 42 1337 501 314 301 13 161 271 -1 matrixB matrixB matrixB matrixB matrixB matrixB matrixB matrixB matrixB matrixB 1 1 1 1 2 2 2 3 3 3 _ 1 2 3 1 2 3 1 2 3 _ = = = = = = = = = = 1 2 3 4 5 6 7 8 9 -1   0 42 1337 A =  501 314 301  13 161 271   1 2 3 B= 4 5 6  7 8 9 Beachten Sie, dass man im GHCi keine Funktion anzeigen kann. Zur Anzeige einer Matrix kann die Funktion showMatrix verwenden werden, die in der Datei blatt1.hs definiert ist. Diese Datei findet sich beim Aufgabenblatt 1 auf der Webseite zur Vorlesung. Die Verwendung von Listenfunktionen und Listensyntax ist bei allen Teilaufgaben verboten. a) Implementieren und testen Sie in Haskell eine Funktion matrixIdentity, welche die EinheitsMatrix mit vorgegebener Dimension als Funktion darstellt. Dabei wird die Dimension durch das erste Argument festgelegt. (6 Punkte) Beispielaufrufe: *> showMatrix (matrixIdentity 4) 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 *> (matrixIdentity 3) 1 1 1 b) Implementieren und testen Sie in Haskell eine Funktion matrixDimension, welche die Dimension einer Matrix berechnet. Tipp: Eine rekursive Hilfsfunktion kann n¨ utzlich sein. Beispielaufrufe: (6 Punkte) *> matrixDimension matrixA 3 *> matrixDimension matrixB 3 c) Implementieren und testen Sie in Haskell eine Funktion matrixAdd, die zwei Matrizen komponentenweise addiert, wobei die Dimension der beiden Matrizen gleich ist. (6 Punkte) Beispielaufrufe: *> showMatrix (matrixAdd matrixA matrixB) 1 44 1340 505 319 307 20 169 280 *> (matrixAdd matrixA matrixB) 3 2 169 d) Implementieren und testen Sie in Haskell eine Funktion matrixTrace, welche die Summe der Hauptdiagonalelemente (Spur) einer Matrix berechnet. (6 Punkte) Beispielaufrufe: *> matrixTrace matrixB 15 *> matrixTrace (matrixIdentity 300) 300 e) Implementieren und testen Sie in Haskell eine Funktion matrixMaximum, die das gr¨oßte Element einer Matrix berechnet. (6 Punkte) Beispielaufrufe: *> matrixMaximum (matrixIdentity 50) 1 *> matrixMaximum matrixB 9 2