Gunther Heidemann Stefan Kurtz Universit¨at Technische Bielefeld

February 13, 2018 | Author: Anonymous | Category: Ingenieurwissenschaften, Informatik, Funktionale Programmierung
Share Embed Donate


Short Description

Download Gunther Heidemann Stefan Kurtz Universit¨at Technische Bielefeld...

Description

Gunther Heidemann Stefan Kurtz

¨ Technische Universitat ¨ Bielefeld Fakultat

¨ Ubungen zur Vorlesung Algorithmen & Datenstrukturen I Wintersemester 2001/2002 Als L¨osungen zu diesem Aufgabenblatt sollen lauff¨ahige Haskell-Programme entwickelt werden. Dazu steht der Haskell-Interpreter hugs zur Verf¨ugung. Informationen, Dokumentation, etc. findet man auf der Website zur Vorlesung, siehe unten. ¨ Aufgabe 4.1 (4 Punkte) Auf einem Ubungsblatt zu einer Vorlesung u¨ ber funktionale Programmierung soll eine Funktion hui implementiert werden. Harry Hacker hat die folgende L¨osung 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¨unden Sie Ihre Antwort. Aufgabe 4.4 (6 Punkte) Im bin¨aren Zahlensystem wird eine nat¨urliche 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¨asentation einer beliebig großen nat¨urlichen Zahl in Bin¨ardarstellung. Sie k¨onnen als Konstruktoren nat¨urlich nicht 0 und 1 verwenden. 2. Definieren Sie in Haskell ein Funktion int2bin::Integer->Binary, die eine Zahl in Dezimaldarstellung in Ihre Bin¨ardarstellung verwandelt. 3. Definieren Sie die Umkehrfunktion bin2int::Binary->Integer, die Ihre Bin¨ardarstellung in eine Dezimaldarstellung verwandelt. Aufgabe 4.5 (2 Punkte) Entwickeln Sie ein Funktion summenliste::Int->[(Int,Int)], die f¨ur eine n¨aturlich Zahl n die folgende Liste liefert: " (1; 1); (2; 3); : : : ; (n;

n X

# i)

i=1

Abgabe der L¨osungen: Mittwoch, 28. November 2001 zu Beginn der Vorlesung. ¨ Bitte alle Namen der Gruppenmitglieder, den Termin Ihrer Ubungsgruppe 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 Ubungen, sowie elektronische Versio¨ nen der Ubungsbl¨atter.

View more...

Comments

Copyright � 2017 NANOPDF Inc.
SUPPORT NANOPDF