Gunther Heidemann Stefan Kurtz Universit¨at Technische Bielefeld

Werbung
Gunther Heidemann
Stefan Kurtz
Universität Technische
Bielefeld
Fakultät
Übungen zur Vorlesung
Algorithmen & Datenstrukturen I
Wintersemester 2001/2002
Als Lösungen zu diesem Aufgabenblatt sollen lauffähige Haskell-Programme entwickelt werden.
Dazu steht der Haskell-Interpreter hugs zur Verfügung. Informationen, Dokumentation, etc. findet
man auf der Website zur Vorlesung, siehe unten.
Aufgabe 4.1 (4 Punkte) Auf einem Übungsblatt zu einer Vorlesung über funktionale Programmierung soll eine Funktion hui implementiert werden. Harry Hacker hat die folgende Lösung
entwickelt, ohne zuvor Haskell oder eine anderen funktionale Programmiersprache zu kennen:
hui::[a]+[a]->[a]
hui[],[] = []
hui [xs],[] = [xs]
hui [],[ys] = [ys]
hui [x:xs],[y:ys] = [x,y]:hui [xs],[ys]
Welche Funktion wollte Harry programmieren? Welche syntaktischen Fehler hat er in seiner Implementierung gemacht? Korrigieren Sie die syntaktischen Fehler, so daß Sie ein korrektes Haskell-programm erhalten. Berechnen Sie mit Hilfe von hugs den folgenden Ausdruck:
hui [1,2,3] [9,8,7,6]
Aufgabe 4.2 (4 Punkte) Das Restriktionsenzym E schneidet eine DNA-Sequenz an allen Auftreten
des Musters AT in Fragmente. Zum Beispiel trennt es die Sequenz ACGATCGATGCGGGATGGGTA
in die folgende Liste von Fragmenten
[ACGA,TCGA,TGCGGGA,TGGGTA]
(1)
Schreiben Sie eine Haskell-Funktion trenne, die das erste Fragment einer DNA Sequenz
abtrennt. Die Funktion liefert das erste Fragment und die Restsequenz. Falls es keine Trennstelle gibt, dann ist das erste Fragment die leere Liste.
(2)
Schreiben Sie eine Haskell-Funktion totalverdau, die eine DNA an allen RestriktionSchnittstellen aufbricht und die Liste aller Fragmente liefert.
Aufgabe 4.3 (4 Punkte) DNA Sequenzen und RNA Sequenzen unterscheiden sich im wesentlichen
darin, daß die Base Thymin durch Uracil ersetzt wird.
1. Erweitern den im Skript angegebenen Datentyp Nucleotide in geeigneter Weise um das
Nukleotid Uracil.
2. Schreiben Sie eine Funktion dna2rna, die eine DNA-Sequenz nimmt und in eine RNASequenz umwandelt. Verwenden Sie hierzu die in der Vorlesung definierte Funktion map.
3. Schreiben Sie die Funktion dna2rna ohne die Verwendung von map.
4. Welche Definition von dna2rna bevorzugen Sie? Begründen Sie Ihre Antwort.
Aufgabe 4.4 (6 Punkte) Im binären Zahlensystem wird eine natürliche Zahl als Summe von Zweierpotenzen dargestellt. Z.B. ist 101010 eine Darstellung von
5
4
3
2
1
0
1 2 + 0 2 + 1 2 + 0 2 + 1 2 + 0 2 = 32 + 0 + 8 + 0 + 2 + 0 = 42
1. Geben Sie einen Haskell-Datentyp Binary an zur Repräsentation einer beliebig großen
natürlichen Zahl in Binärdarstellung. Sie können als Konstruktoren natürlich nicht 0 und 1
verwenden.
2. Definieren Sie in Haskell ein Funktion int2bin::Integer->Binary, die eine Zahl in
Dezimaldarstellung in Ihre Binärdarstellung verwandelt.
3. Definieren Sie die Umkehrfunktion bin2int::Binary->Integer, die Ihre Binärdarstellung in eine Dezimaldarstellung verwandelt.
Aufgabe 4.5 (2 Punkte) Entwickeln Sie ein Funktion summenliste::Int->[(Int,Int)],
die für eine näturlich Zahl n die folgende Liste liefert:
"
(1; 1); (2; 3); : : : ; (n;
n
X
#
i)
i=1
Abgabe der Lösungen: Mittwoch, 28. November 2001 zu Beginn der Vorlesung.
Bitte alle Namen der Gruppenmitglieder, den Termin Ihrer Übungsgruppe und den Namen des
Tutors auf dem Deckblatt angeben.
Auf der Web-Seite
http://www.techfak.uni-bielefeld.de/ags/pi/lehre/AuDIWS01/
finden sich weitere Informationen zur Vorlesung und zu den Übungen, sowie elektronische Versionen der Übungsblätter.
Herunterladen