ass1_inf2 - ILIAS - Universität Konstanz

Werbung
Konzepte der Programmierung
Programmierkurs 2
Sommer 2015
Universität Konstanz
Informatik & Informationswissenschaft
Marc Scholl, Stefan Klinger
1. Übungsblatt
(Ausgabe: 13. April 2015 — Abgabe: 20. April 2015, 15:00)
Zur Beruhigung Auf diesem Übungsblatt kommen bereits Haskell-Sprachelemente vor, die noch
nicht klar in der Vorlesung eingeführt worden sind. Es ist also nicht verwunderlich, wenn einige
Dinge noch etwas nebulös scheinen.
Aufgabe 1 Wir verwenden Subversion1 für die Verteilung der Vorlesungsmaterialien und Übungsblätter, sowie für die Abgabe Ihrer Lösungen und deren Korrektur. Die Übungen sollen in
Zweierteams bearbeitet werden.
1. Bilden Sie zweier-Teams (mit genau zwei Mitgliedern).
2. Jedes Team schreibt vor Mittwoch, 18:00 eine Mail (Plaintext, kein HTML) an Stefan
Klinger2 :
• From: Ihre Uni-Mail-Adresse (. . . @uni-konstanz.de).
• Cc: Die Uni-Mail-Adresse Ihres Partners (. . . @uni-konstanz.de).
• Subject: PK2 Übungsgruppe
Inhalt:
• Eine Zeile, die genau die Kennbuchstaben A B C D E G (nicht F) der Tutorien (s. unten)
enthält, absteigend nach Ihrer Präferenz geordnet, getrennt durch je ein Leerzeichen.
• Falls Tutorien mit Ihren Pflichtveranstaltungen kollidieren, schreiben Sie bitte Ihre
Matrikelnummer, Studienrichtung, Fachsemester, und die betreffende Vorlesung dazu.
Falls Sie Kinder haben (und einen StEP3 ), geben Sie dies bitte an.
• Kein weiterer Inhalt.
Die Tutorien:
A
Do 13:30
B
Do 17:00
C
Fr 8:15
Beispiel: Jane und John bilden ein Team. Am
liebsten wäre ihnen das Tutorium B (Do 17:00),
die beste Alternative ist Tutorium G (Fr 15:15),
die zweitbeste E, sonst A, und sonst irgend ein
anderes Tutorium. Jane schreibt:
D
Fr 10:00
E
Fr 11:45
G
Fr 15:15
From: [email protected]
To: [email protected]
Cc: [email protected]
Subject: PK2 Übungsgruppe
B G E A
Hinweise: Verwenden Sie unbedingt Ihre Uni-Mail-Adressen. Wenn Sie Tutorien nicht angeben,
können Sie diesen trotzdem zugeordnet werden. Früher eingehende Mails werden minimal bevorzugt.
Verwenden Sie kein HTML oder Anhänge.
1 http://subversion.apache.org/
2 [email protected]
3 http://www.familie.uni-konstanz.de/programme-fuer-eltern/studieren-mit-kind/
der-studierenden-elternpass/
Bitte wenden!
−−−−−−−−−→
Aufgabe 2 Installieren Sie Subversion1 und machen Sie sich mit der grundlegenden Funktionalität vertraut. Das Buch Version Control with Subversion ist online verfügbar4 , zum schnellen
Einstieg die Kapitel Creating a Working Copy und Basic Work Cycle lesen. So bekommen Sie
das Vorlesungsmaterial:
$ svn co https://svn.uni-konstanz.de/dbis/inf2_15s/pub/
Aufgabe 3 Installieren Sie den Glasgow Haskell Compiler (GHC). Auch dieser sollte über das
Paketsystem Ihrer Linux-Distro erhältlich sein, oder Sie installieren die Haskell-Platform5 . Außerdem brauchen Sie noch einen Texteditor (emacs, vi, nano, . . . ).
Hinweis Auf den Uni-Rechnern titan07 und mondx sind der GHC, Subversion, und einige
Editoren bereits installiert. Die Version auf titan07 ist etwas aktueller.
Aufgabe 4 Mit ghci am Shell Prompt startet man den interaktiven Interpreter des GHC (den
Compiler ghc, also ohne das i, werden wir erstmal nicht benutzen). Am Prompt (Prelude>)
können Haskell-Ausdrücke ausgewertet werden.
Starten Sie den Interpreter GHCi, und tippen Sie einfache arithmetische Ausdrücke ein. Sie sollten
folgende vordefinierte Funktionen ausprobieren:
1. Addition, Subtraktion, Multiplikation, Division: +, -, *, /.
2. Wurzelfunktion: sqrt (z.B. sqrt 9 _ 3.0).
3. Ganzzahlige Division: ‘div‘ (z.B. 9 ‘div‘ 2 _ 4. Wichtig: Nicht ’div’, sondern ‘div‘,
dabei ist ‘ also das ASCII-Zeichen 0x60).
4. Ganzzahliger Rest: ‘mod‘ (z.B. 12 ‘mod‘ 5 _ 2).
Sie können Klammern (,) zur Schachtelung der Ausdrücke verwenden. Lassen Sie sich von etwaigen Fehlermeldungen nicht entmutigen. Vermutlich sind Sie auf ein Merkmal von Haskell
gestoßen, das wir noch nicht besprochen haben. Merken Sie sich Fragen und fragen Sie Ihren
Tutor!
Subversion Mittlerweile sollten Sie eine Antwort auf Ihre Mail aus Aufgabe 1 bekommen, und
entsprechend der dortigen Anweisungen das Haskell Script assignment01.lhs gefunden haben.
Aufgabe 5 (6 Punkte) Am Prompt des GHCi kann man auch einige Kommandos eingeben,
die den Interpreter steuern. :help listet all diese Kommandos auf, :load filename lädt ein
Haskell Script, :reload lädt ein zuvor geladenes Script nochmal (z.B. nach Änderungen), und
:quit beendet den Interpreter. Man kann solch ein Kommando auch durch sein eindeutiges
Präfix abkürzen, also z.B. :l foo.hs statt :load foo.hs, oder :r statt :reload.
Das Script assignment01.lhs (lesen!) definiert die drei Funktionen xxx, foo, und bar. Laden
Sie das Script in den GHCi (mit :load, das GHCi-Prompt ändert sich in *Main>) und testen Sie
verschiedene Aufrufe der Funktionen, etwa xxx 10 oder foo 28 12 oder bar 33. Versuchen Sie,
auf diese Art und Weise herauszufinden, was der Zweck dieser Funktionen ist.
Benennen Sie die Funktionen geeignet um und kommentieren Sie ausgiebig.
4 http://svnbook.red-bean.com/
5 http://hackage.haskell.org/platform/
Aufgabe 6 (2 Punkte) Probieren Sie aus, ob die 42 in der letzten Zeile der Definition von bar
auch durch folgende Ausdrücke ersetzt werden könnte:
• x
• "text"
• 1 ‘div‘ 0
• 1 / "text"
Was beobachten Sie? Woran könnte es liegen, dass sich Haskell gerade so verhält?
Wichtig
Einchecken der Lösung (ggf. svn add und svn commit) nicht vergessen!
Herunterladen