INFORMATIK FÜR BIOLOGEN

Ähnliche Dokumente
Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift

Funktionen höherer Ordnung

Typdeklarationen. Es gibt in Haskell bereits primitive Typen:

Nachklausur Bitte in Druckschrift leserlich ausfüllen!

Programmieren in Haskell Programmiermethodik

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Programmieren in Haskell. Stefan Janssen. Strukturelle Rekursion. Universität Bielefeld AG Praktische Informatik. 10.

Programmieren in Haskell Einstieg in Haskell

Algorithmen und Datenstrukturen

Syntax der Sprache PASCAL

Funktionale Programmierung mit Haskell

Programmieren in Haskell

Imperative vs. Funktionale Programmierung

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Student: Alexander Carls Matrikelnummer: Aufgabe: Beschreibung des euklidischen Algorithmus Datum:

Algorithmen und Datenstrukturen

1 - FortProg ist: [ ] objekt-orientiert; [ ] funktional; [ ] logisch; [ ] manchmal nicht auszuhalten

Funktionale Programmierung ALP I. Funktionen höherer Ordnung. Teil 2 SS Prof. Dr. Margarita Esponda. Prof. Dr.

2. Algorithmenbegriff

Sequenzen - Listen. Sequenzen Listen: Definition Listen: veränderliche Sequenzen Methoden Attribute Eine Liste von ganzen Zahlen

Lösungsvorschlag Serie 2 Rekursion

Crashkurs Python und Sage U23 Krypto-Mission

2.5 Listen. Kurzschreibweise: [42; 0; 16] Listen werden mithilfe von [] und :: konstruiert.

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Klausur Informatik B April Teil I: Informatik 3

3. Übungsblatt zu Algorithmen I im SoSe 2017

Informatik I Übung, Woche 40

C.3 Funktionen und Prozeduren

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit

Algorithmen & Datenstrukturen 1. Klausur

Prof. Dr. Heinrich Müller; Dr. Frank Weichert 7. September 2015

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Agenda. 1 Einleitung. 2 Binäre Bäume. 3 Binäre Suchbäume. 4 Rose Trees. 5 Zusammenfassung & Ausblick. Haskell Bäume. Einleitung.

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

1 Stückweise konstante Funktionen (ca =10 Punkte)

Grundlagen der Informatik I (Studiengang Medieninformatik)

Einführung in die Informatik 1

Elementare Konzepte von

Programmieren in Haskell

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15

Einführung in die Programmierung mit VBA

4.Grundsätzliche Programmentwicklungsmethoden

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Funktionale Programmierung. Funktionale Programmierung: Vorlesungsüberblick. Eigenschaften rein funktionaler Programmierung

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Universität Duisburg - Essen

Grundprinzipien der funktionalen Programmierung

Kurs 1613 Einführung in die imperative Programmierung

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):

System.out.println("TEXT");

Einführung in die Funktionale Programmierung mit Haskell

Java: Eine kurze Einführung an Beispielen

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 2. Spezifikation Schrittweise Verfeinerung

Präzedenz von Operatoren

ALP I. Funktionale Programmierung

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5

8.1.3 Operation Build-Max-Heap Operation zur Konstruktion eines Heaps Eingabe: Feld A[1..n], n = länge(a) BUILD-MAX-HEAP (A)

Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Nachklausur am

Klausur Algorithmen und Datenstrukturen II 10. August 2015

Übersicht. Berechnung der Potenz für zwei ganze Zahlen Klausuraufgabe SS 2010! Berechnung der Cosinus-Funktion Klausuraufgabe WS 2010/2011!

Sortieren. Eine Testmenge erstellen

Grundbegriffe der Informatik

Klausur Fachprüfung Wirtschaftsinformatik. Name:

Kurs 1612 Konzepte imperativer Programmierung Musterlösung zur Nachklausur am

Was ist Logische Programmierung?

Klausur zur Wirtschaftsinformatik II im Grundstudium

9. Übung Algorithmen I

Übung zur Vorlesung Berechenbarkeit und Komplexität

Abschnitt: Algorithmendesign und Laufzeitanalyse

Programmieren lernen mit Groovy Rekursion Rekursion und Iteration

Lösungen zur 1. Klausur. Einführung in Berechenbarkeit, formale Sprachen und Komplexitätstheorie

Sortieren durch Einfügen (Insertion Sort) fügt die restlichen Elemente nach und nach in die bereits sortierte Liste der abgearbeiteten Zahlen.

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Programmieren I. Kapitel 5. Kontrollfluss

Algorithmen und Datenstrukturen

Funktionale Programmierung mit C++

Datenstrukturen und Algorithmen

Kombinatorische Optimierung

Lösungvorschlag zum Übungsblatt 6: Software-Entwicklung I (WS 2007/08)

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

12 == 12 true 12 == 21 false 4 === 7 true 4 === "vier" false 4 === 4.0 false 12!= 13 true 12!== 12 false 12!== 12.0 true. 1 < 3 true 3 < 1 false

Programmierkurs Java

11. Rekursion, Komplexität von Algorithmen

Suchen und Sortieren Sortieren. Heaps

Übungsklausur Algorithmen I

Übung zu Einführung in die Informatik # 11

Klausur in 12.1 Themen: Zahlsysteme, Grundlagen von Delphi (Bearbeitungszeit: 90 Minuten)

Theoretische Informatik SS 03 Übung 3

1.2 LOOP-, WHILE- und GOTO-Berechenbarkeit

Die for -Schleife HEUTE. Schleifen. Arrays. Schleifen in JAVA. while, do reichen aus, um alle iterativen Algorithmen zu beschreiben

Wie funktioniert das Sortieren einer Reihe von Zufallszahlen mit Quicksort?

Transkript:

Technische Universität Dresden 15012015 Institut für Theoretische Informatik Professur für Automatentheorie INFORMATIK FÜR BIOLOGEN Musterklausur WS 2014/15 Studiengang Biologie und Molekulare Biotechnologie Name: Vorname: Matrikelnummer: Studiengang: Aufgabe 1 Gegeben seien die zwei Algorithmen alg1 und alg2, die auf Schleifen aufbauen Beide Algorithmen sollen mit x = 2 und n = 5 aufgerufen werden procedure alg1 (var x, n : integer); var y : integer; y := 1; while n > 0 do y := y x; n := n 1 ; y := y 2; print(y) procedure alg2 (var x, n : integer); var i, y : integer; y := 1; if n > 0 then for i := 1 to n do y := y x ; y := y 2; print(y) 1

a) Welcher Wert für y wird jeweils ausgegeben? Geben Sie für beide Algorithmen jeweils den Ausgabewert von y an b) Geben Sie für beide Algorithmen jeweils die Funktion, die berechnet wird, ihre Argumente und die Berechnungsvorschrift an c) Modifizieren Sie alg2 so, dass nicht eine for-schleife, sondern eine for-downto- Schleife angewet wird Das Berechnungsverhalten von alg2 soll unverändert bleiben Aufgabe 2 Welche der folgen Aussagen ist wahr bzw nicht wahr? Begründen Sie Ihre Antwort a) {a, b} {b} = b) {{b}} P {a, b} c) Mengen sind ein geeignetes mathematisches Mittel, um ein Reagenzglas mit DNA- Strängen formal zu beschreiben d) Sei M := {1, 2, 3} und R M M definiert als R := {(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (3, 1)} R ist eine Äquivalenzrelation e) Jede for-schleife benötigt eine Anfangszahl f) Jede for-schleife kann durch eine while-schleife simuliert werden g) Das Python-Programm for i in range(1,4): print i gibt alle natürlichen Zahlen von 1 bis 4 aus h) Mithilfe des Algorithmus von Knuth, Morris und Pratt kann man Listen sortieren i) Das Aufbauen eines Heaps ist in linearer Zeit, das Sortieren eines Heaps in N log N Schritten möglich j) Die Zweierkomplementdarstellung der ganzen Zahl 6 ist 1001 Aufgabe 3 Welche der folgen Gleichheiten über Listen sind korrekt und welche nicht? Begründen Sie Ihre Antwort a) ((x: xs) ++ yys) ++ zzs = xxs ++ ((y: ys) ++ zzs) b) (xs: [ ]) = [xs] c) ([ ]: xs) = xs d) length (reverse [[1,2],[3,4],[5,6]]) = length [6,5,4,3,2,1] e) [x x <- [1,2,3,4,5], x^2 mod 4 == 0] = [2,4] f) filter (> 2) [0,1,2,3,4] = [x x <- [0,1,2,3,4], x < 2] g) length (map (sum) [[1,1],[1,1],[1,1]]) = 2 2

Aufgabe 4 Gegeben sei der Algorithmus klausur zum Suchen des Musters b = abcabca im Text a = abcaabcabcabcacabc notiert in Pseudocode function klausur (a, b : string; M, N : integer) : integer; var i, j : integer; i := M; j := M; repeat if a[i] = b[j] then i := i 1; j := j 1 else {Mismatch verursacht durch a[i], Textzeiger entsprech Fall 1 oder Fall 2 heraufsetzen; Musterzeiger an das Ende} if M j + 1 > skip[index(a[i])] then i := i + M j + 1 else i := i + skip[index(a[i])]; j := M until (j < 1) or (i > N); klausur := i + 1 Zusätzlich ist folges index-feld gegeben: a b c 1 2 3 a) Berechnen Sie zunächst das erforderliche skip-feld (für M = 7 und K = 3) Verwen Sie dazu den folgen Algorithmus: procedure initskip; {Berechnung des Sprungfeldes für das Muster b mithilfe von M und K} var i, j : integer; for i := 1 to K do skip[i] := M; for j := 1 to M do skip[index(b j )] := M j 3

Interpretieren Sie die Werte des skip-feldes bezüglich der konkreten Zeichen aus dem Text a Was drücken diese Werte aus? b) Erstellen Sie ein Abarbeitungsprotokoll zum Algorithmus klausur unter Nutzung der oben genannten Eingabewerte a (mit der Länge N = 18) und b (mit der Länge M = 7) Nehmen Sie in den Kopf des Abarbeitungsprotokolls folge Informationen auf: i j a[i] b[j] M j + 1 skip[index(a[i])] c) Nennen Sie den Namen des vorliegen Suchalgorithmus und mindestens zwei Eigenschaften Begründen Sie diese Aufgabe 5 Gegeben sind Typ und Definition folger drei Haskell-Funktionen, die nicht vollständig notiert sind: app z B app [1,2,3] [4,5,6] = [1,2,3,4,5,6] app :: [Int] -> [Int] -> [Int] app? y = y app (x: xs) y =? sumfacs z B sumfacs 3 = fac 0 + fac 1 + fac 2 + fac 3 = 1 + 1 + 2 + 6 = 10 sumfacs :: Int -> Int sumfacs? = 1 sumfacs n =? baumtiefe z B baumtiefe (Node 1 (Node 2 (Leaf 4) (Leaf 5)) (Leaf 3)) = 3 baumtiefe :: Tree a -> Int baumtiefe? = 1 baumtiefe (Node x l r) =? a) Vervollständigen Sie die drei Funktionen, und ersetzen Sie die Fragezeichen durch Haskell-Code b) Geben Sie die schrittweise Abarbeitung für den Aufruf baumtiefe (Node 1 (Node 2 (Node 4 (Leaf 6) (Leaf 7)) (Leaf 5)) (Leaf 3)) an 4

Aufgabe 6 Gegeben ist folges Python-Programm: def verfahren(liste): anzahl = len(liste) vertauscht = 1 while vertauscht: vertauscht = 0 # Anzahl der Elemente der Liste # vertauscht := True # vertauscht := False for index in range(0, anzahl 1, 1): if liste[index] > liste[index + 1]: # Dann stehen die beiden Elemente nicht # in der richtigen Reihenfolge wert = liste[index] liste[index] = liste[index + 1] liste[index + 1] = wert # Mit den drei Anweisungen werden die beiden # Elemente der Liste, die verglichen wurden, vertauscht return liste vertauscht = 1 print(verfahren([3, 2, 12, 4, 2, 9, 10, 13])) # vertauscht := True a) Wie oft wird die for-schleife im Programm durchlaufen? b) Welche Ausgabe bzw welche Ausgaben erfolgen auf dem Bildschirm? c) Welches aus der Vorlesung bekannte Verfahren realisiert das Python-Programm? Aufgabe 7 a) Beweisen Sie mithilfe der Listeninduktion die Aussage xs ++ [] = xs b) Geben Sie eine Haskell-Implementierung an, die in einer Liste mit ganzen Zahlen alle Elemente verdoppelt 5