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

Ähnliche Dokumente
1 Bizz Buzz Woof (ca =18 Punkte) def read file(file_in): fp = open(file_in, r ) l = fp.read() fp.close() return l

1 Autorennen ( = 11 Punkte)

Klausur "C#" WS 2012/2013

Einführung in die Programmierung Vorlesungsprüfung

Klausur "ADP" SS 2015

Datenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen

Einführung in die Programmierung

Semestralklausur Einführung in die Programmierung, WS 2005/06, Seite 1/6 Name, Vorname, Matrikelnummer: Gruppe A

Generics. Kapitel. In diesem Kapitel. Dies sind die zentralen Themen dieses Kapitels:

Grundlagen der Informatik

Übungen zur Vorlesung EINI (WS 2010) Blatt 11

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: B Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Informatik Name: Lösung Nr. 2 K1/K

Klausur Grundlagen der Informatik 9. April 2015

Collatz-Folge. falls a i ungerade.

Probeklausur: Programmierung WS04/05

Stetige Funktionen. 1-E1 Ma 1 Lubov Vassilevskaya

Klausur Grundlagen der Programmierung

Schriftlicher Test zu C++ (90 Minuten) VU Einführung ins Programmieren für TM. 22. Juni 2012

pue13 January 28, 2017

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Allgemeine Informatik II

3. Die Datenstruktur Graph

Wiederholungsklausur "ADP" WS 2016/2017

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

Wissenschaftliches Rechnen

Klausur Software-Entwicklung März 01

Python Einführung. Monica Selva Soto. 24 März Mathematisches Institut

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

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Primzahlen und Programmieren

11 Objektorientierte Programmierung, Teil 2

pue08 December 9, 2016

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

Kapitel 12: Induktive

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

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Klausur "ADP" SS 2016

Welche Informatik-Kenntnisse bringen Sie mit?

Institut für Informatik

Relationen und DAGs, starker Zusammenhang

Name: Matrikelnr : Aufgabe 1: (ca. 8 Punkte )

Nachholklausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java WS1415

Universität zu Lübeck Institut für Telematik. Prof. Dr. Stefan Fischer

Lernmodul 7 Algorithmus von Dijkstra

Programmierung für Mathematik (HS13)

15. Elementare Graphalgorithmen

Visuelle Kryptographie. Anwendung von Zufallszahlen

INFORMATIK FÜR BIOLOGEN

Einführung in die Informatik 1

Name:... Matr.-Nr... Bearbeitungszeit: 120 Minuten. Lesen Sie die Aufgaben jeweils bis zum Ende durch; oft gibt es hilfreiche Hinweise!

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

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Algorithmen und Datenstrukturen II

1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster

Klausur. 2. Aufgabe (3 Punkte) Ergänzen Sie die leeren Zellen derart, dass sich in einer Zeile die selben Zahlenwerte ergeben.

Klassen und Objekte. Klassen sind Vorlagen für Objekte. Objekte haben. Attribute. Konstruktoren. Methoden. Merkblatt

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. Juni 2004

4. Objektorientierte Programmierung mit C++

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Tutoraufgabe 1 (2 3 4 Bäume):

1 Klassen anlegen und Objekte erzeugen

1 Klassen anlegen und Objekte erzeugen

Objektorientierte Programmierung und Modellierung

Klausur Programmieren 2 SS 2016

Einführung in die Programmierung für NF MI. Übung 04

Informatik B Sommersemester Musterlösung zur Klausur vom

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

1. Klausur. Objektorientierte Programmierung in C++

Gliederung. Algorithmen und Datenstrukturen I. Eine wichtige Frage. Algorithmus. Materialien zur Vorlesung. Begriffsbestimmung EUKLID Primzahltest

7. Transitive Hülle. Kante des Graphen. Zusatz-Kante der transitiven Hülle

Parallele und funktionale Programmierung Sommersemester Übung Abgabe bis , 18:00 Uhr

Java programmieren mit JavaKara. Eine Zusammenfassung in Beispielen

Institut für Programmierung und Reaktive Systeme 20. November Programmieren I. 4. Übungsblatt

Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit

Wie entwerfe ich ein Programm?

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

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

C++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Sommersemester Jewgeni Rose. Technische Universität Braunschweig

C++ Teil 10. Sven Groß. 17. Dez IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Dez / 14

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

6/23/06. Universelles Hashing. Nutzen des Universellen Hashing. Problem: h fest gewählt es gibt ein S U mit vielen Kollisionen

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

1. Aufgabe (6 Punkte): Java-Programmierung (Arrays)

f 1 (n) = log(n) + n 2 n 5 f 2 (n) = n 3 + n 2 f 3 (n) = log(n 2 ) f 4 (n) = n n f 5 (n) = (log(n)) 2

Schriftlicher Test (120 Minuten) VU Einführung ins Programmieren für TM. 24. Juni 2016

12 Abstrakte Klassen, finale Klassen und Interfaces

Selbsteinstufungstest Vorkurs Programmieren

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

Algorithmen und Datenstrukturen

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Bruchrechnen. 2.1 Teilbarkeit von Zahlen. Die Primfaktorzerlegung ist die Zerlegung einer natürlichen Zahl in ein Produkt von Primzahlen.

Programmierkurs Python

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Transkript:

Einführung in die wissenschaftliche Programmierung Klausur Seite 1/5 Name, Vorname, Unterschrift: Matrikelnummer: 1 Stückweise konstante Funktionen (ca. 4+2+4=10 Punkte) In dieser Aufgabe soll eine Klasse Funktion zur Darstellung stückweise konstanter Funktionen geschrieben werden. Hier ist ein Beispiel für so eine Funktion: f(x) 1 1 2 3 x Die Funktionen werden beschrieben durch eine Menge aneinandergrenzender Intervalle, auf denen wir Funktionswerte vorgeben. Im Einzelnen soll die Klasse folgende Attribute bekommen: Der linke Endpunkt des ersten Intervalls (im Beispiel 0.5). Eine Liste für die Länge der Intervalle (in unserem Beispiel mit Sprungstellen bei 1/2, 3/2, 3 und 3 wäre das b=[1., 0.5, 1.]). Eine Liste mit den Funktionswerten auf den Intervallen (im Beispiel wäre das h=[1.5, 1., 0.5]). Außerhalb des so definierten Bereichs soll die Funktion 0 sein. Ob Ihre Funktionen rechtsseitig (wie im Bild angedeutet) oder linksseitig stetig werden, ist egal. Schreiben Sie eine Klassendefinition mit einem Konstruktor, so dass die Beispielfunktion mittels f = Funktion(0.5, b, h) (b und h wie oben) instanziiert werden kann. Ihr Konstruktor soll von den Listen Kopien speichern; er darf davon ausgehen, dass alle Parameter vernünftige Werte enthalten. class Funktion(object): def init (self, x0, breite, hoehe): self.x0 = float(x0) self.breite = [float(bi) for bi in breite] self.hoehe = list(hoehe)

Einführung in die wissenschaftliche Programmierung Klausur Seite 2/5 Schreiben Sie nun noch eine Methode integral (die wir uns zur Klassendefinition von Funktion dazudenken), die für eine stückweise konstante Funktion f das Integral f(x) dx als Funktionsergebnis zurückliefert. Für das oben instanziierte Objekt wäre f.integral() also 2.5 (weil 3/2 + 1/2 + 1/2 = 5/2). def integral(self): sum = 0. for i in range(0, len(self.breite)): sum = sum + self.breite[i]*self.hoehe[i] return sum Und nun noch eine Methode wert, die die Funktion an einer Stelle x auswertet. Im Beispiel wäre f.wert(1.) also 1.5 und f.wert(5.) wäre 0. def wert(self, x): if x<self.x0: return 0. xi = self.x0 for i in range(0, len(self.breite)): xi = xi + self.breite[i] if x < xi: return self.hoehe[i] return 0. Seite 2/5

Einführung in die wissenschaftliche Programmierung Klausur Seite 3/5 2 Primfaktorzerlegung (ca. 2+3+4+6=15 Punkte) In dieser Aufgabe soll eine Klasse zur Primfaktorzerlegung erstellt werden. Dies geschieht in mehreren Schritten. Definieren Sie zunächst die Klasse Primfaktoren mit einem Konstruktor, der eine Liste als Klassenvariable primzahlen anlegt, in der später Primzahlen gespeichert werden sollen. Außerdem soll die kleinste Primzahl 2 gleich in der Liste gespeichert werden (Das vereinfacht den Code in einer der folgenden Aufgaben). class Primfaktoren: def init (self): self.primzahlen = [2] Erweitern Sie die Klasse um eine Methode enthaeltfaktor, mit der übergrüft werden soll, ob die als Parameter an die Methode übergebene Zahl durch eine der gespeicherten Primzahlen teilbar ist. In diesem Fall gibt die Methode True, sonst False. Sofern zwischen der übergebenen Zahl und der größten Primzahl aus der gespeicherten Liste keine weitere Primzahl liegt, kann mit dieser Methode bestimmt werden, ob die Zahl eine Primzahl ist. Hinweis: Der Modulo-Operator % kann nützlich sein. def enthaeltfaktor(self, zahl): for primzahl in self.primzahlen: if zahl%primzahl == 0: return True return False Seite 3/5

Einführung in die wissenschaftliche Programmierung Klausur Seite 4/5 Die Klassenvariable primzahlen enthält eine Liste von Primzahlen (in ansteigender Reihenfolge). Mit der nächsten Methode naechstezahl soll die nächstgrößere Primzahl gefunden werden und sowohl an die Liste angehängt als auch zurückgegeben werden. Hinweis: Starten sie bei der Zahl, die eins größer ist als die letzte und prüfen Sie mit der Methoden enthaeltfaktor, ob es eine Primzahl ist. Falls nicht, nächstgrößere Zahl prüfen... def naechstezahl(self): zahl = self.primzahlen[-1]+1 while True: noprim = self.enthaeltfaktor(zahl) if noprim: zahl = zahl+1 else: self.primzahlen.append(zahl) return zahl Die letzte Methode primfaktoren soll nun die eigentliche Primfaktorzerlegung einer Zahl (als Parameter an die Methode übergeben) mit Hilfe der Methode naechstezahl durchführen. Eine Liste mit allen Primfaktoren (mehrfache sind auch mehrfach in der Liste) wird zurückgegeben. Hinweis: Die übergebene Zahl wird so lange durch die erste Primzahl geteilt, wie sie ohne Rest teilbar ist, dann wird die nächste Primzahl ermittelt und durch diese geteilt,... def primfaktoren(self, zahl): self.primzahlen = [2] primfaktoren = [] faktor = 2 while zahl > 1: if zahl%faktor == 0: primfaktoren.append(faktor) zahl /= faktor else: faktor = self.naechstezahl() return primfaktoren Seite 4/5

Einführung in die wissenschaftliche Programmierung Klausur Seite 5/5 3 Graphen (ca. 7 Punkte) Ein gerichteter Graph sei in einer Adjazenzmatrix, die durch ein numpy-array realisiert ist, abgespeichert. Der Datentyp der einzelnen Einträge ist bool, eine 0/True bei Index i,j bedeutet, dass eine Kante vom Knoten i zum Knoten j zeigt. Die folgende Abbildung veranschaulich dies: 0 4 1 2 5 3 graph = array([[1,1,1,0,0,0], [0,1,1,1,0,0], [0,1,1,1,0,1], [0,0,0,1,0,0], [0,0,1,0,1,0], [0,0,0,0,1,1]], dtype=bool) Schreiben Sie eine Funktion pfadsuche mit den drei Parametern graph (Typ array), start (Type int) und ziel (Typ int), die True zurückgibt, wenn es einen Pfad vom Knoten start zum Knoten ziel gibt. Die Effizienz des Algorithmus ist nicht relevant. def pfadsuche(graph, start, ziel): for i in range(graph.shape[0]): for j in range(graph.shape[0]): graph[start] = graph[start] \ (graph[start][j] & graph[j]) return graph[start][ziel] Seite 5/5