Pro Informatik 2009: Objektorientierte Programmierung Tag 11. Marco Block-Berlitz, Miao Wang Freie Universität Berlin, Institut für Informatik

Größe: px
Ab Seite anzeigen:

Download "Pro Informatik 2009: Objektorientierte Programmierung Tag 11. Marco Block-Berlitz, Miao Wang Freie Universität Berlin, Institut für Informatik"

Transkript

1 Tag 11 Marco Block-Berlitz, Miao Wang Freie Universität Berlin, Institut für Informatik

2 Agenda Tag 11 Berechenbarkeit Programmiersprachen, Algorithmus, Berechenbarkeit, Registermaschinen, Turingmaschine, Halteproblem, Laufzeitanalyse, O-Notation Java-Dokumentation, Einführung in Eclipse Tag 12 Objektorientierung II Wiederholung OOP, Innere Klassen, Anonyme Klassen, Vererbung, Typverträglichkeit, Verdecken, Ersetzen, Identifizieren, Überladen, Die Klasse Object Generizität Tag 13 Spezifikation und Verifikation Formale Verfahren zur Spezifikation und Verifikation imperativer Programme, Assertions, partielle und totale Korrektheit, Hoare-Kalkül, Umwandlung von Rekursion zu Iteration Verschiedene Übungen zum Hoare-Kalkül Tag 14 Software-Engineering Iterative Softwareentwicklung, UML, Softwareentwicklung im Team Entwicklungswerkzeuge, Entwurfsmuster Tag 15 Programmiertechniken Top-Down, Bottom-Up, Rekursion, Brute Force, Greedy, Teile und Herrsche, Dynamisches Programmieren, Memoisation Klausurvorbereitung 2

3 Agenda Tag 16 Datenstrukturen Abstrakte Datentypen, ADT Folge: Stack, Queue, Liste, ADT Menge: Bäume: Binärbäume, Suchbäume, AVL-Bäume, Prioritätswarteschlangen, Heap, Graphen ADTs in Java Tag 17 Sortieralgorithmen InsertionSort, BubbleSort, SelectionSort, ShellSort, MergeSort, QuickSort, Binary Tree Sort, HeapSort Untere Schranke für vergleichsbasierte Sortierverfahren, BucketSort, CountingSort, RadixSort Tag 18 Suchalgorithmen Binärsuche, Breitensuche, Tiefensuche, Backtracking Klausurvorbereitung Tag 19 Klausur Tag 20 Letzter Tag Weitere Projekte am Fachbereich, Klausurnachbesprechung, Grillen? 3

4 Organisatorisches Kontakt: Tutorien: Übungen: Klausur: Miao Wang Büro: R 136 SR 005, 006, 049 (Laptops) RR K38, K44, K46 (Pool-Rechner) Achtung: Am ist SR 005 besetzt Übungszettel mit Abgabe Programmierprojekt in Gruppen (2er, 3er) Vorletzter Vorlesungstag: Do, Voraussetzung: Bearbeitung der Übungen, 20 Kursgebühr Scheinnote entspricht Klausurnote 4

5 BERECHENBARKEIT 5

6 Programmiersprachen 6

7 Programmiersprachen 7

8 Programmiersprachen Programmierparadigma deklarativ (beschreibend, logisch) imperativ (befehls-, problemorientiert, prozedural) funktional relational prozedural objektorientiert (z.b. Haskell) (z.b. Prolog) (z.b. Pascal) (z.b. Java) f 0 = 1 f x = x*f(x-1) member(x,l):- concat(l1,[x L2],L) y = 1; while (x>1) { y = x * y; x = x 1; } Person p = new Person( Hans, 41); Keine Zuweisungen, keine Kontrollstrukturen, oftmals Rekursion. ausführbare Spezifikation Zur Lösung eines Problems müssen die verfügbaren Operationen des Rechners durch geschickte Kombinationen verbunden werden. rechnernahe Implementierung 8

9 Relevante Programmiersprachen im Studium an der FU 1959 Lisp relational 1965 Basic prozedural 1971 Pascal 1972 C prozedural prozedural Hohe Relevanz für Studium am Fachbereich Mathematik/Informatik an der FU-Berlin 1975 Prolog relational 1985 C++ objektorientiert 1987 Perl objektorientiert 1990 Haskell funktional 1995 Delphi objektorientiert 1995 Java objektorientiert 2000 C# objektorientiert 9

10 Funktionale vs. Imperative Programmierung Funktionale Programme: Definition von Ausdrücken (expressions) Berechnung: Auswertung von Ausdrücken (liefern Wert) Variablen: Namen für Ausdrücke oder Werte Imperative Programme: Anweisungsfolgen (Befehle, statements) a1, a2, a3, imperare (lat.) = befehlen Berechnung/Programmausführung: Ausführung der Anweisungen, bewirkt Effekte durch Änderung von Zuständen von Variablen (u.a.) Variablen: Namen von Behältern für Werte (d.h. Speicherzellen), enthalten einen Wert, der durch einen anderen Wert ersetzt werden kann. f 0 = 1 f x = x*f(x-1) y = 1; while (x>1) { y = x * y; x = x 1; } 10

11 Funktionale vs. Imperative Programmierung x=3 f (x-1) f 0 = 1 f x = x*f(x-1) x = 2 f (x-1) 2*1 x = 1 f (x-1) 1*1 x = 0 f (0)=1 x=3; y = 1; while (x>1) { y = x * y; x = x 1; } y = 1; while (x>1) { y = x * y; x = x 1; } X Y 1 6 3*2 f 3 hat den Wert 6 (und f 2 = 2 ) vier unterschiedliche Werte mit dem Namen x, es wird kein y benötigt systematische Veränderung von zwei Speicherzellen 11

12 Haskell Oft sehen Programme in Haskell sehr elegant aus und dienen der Spezifikation von höheren Programmiersprachen. In Haskell wird die Unterscheidung von Datentypen geschult. Als Beispiel sehen wir die member-funktion member :: Int -> [Int] -> Bool member b [] = False member b (a:x) = (a==b) member b x und die Fakultäts-Funktion fac :: Int -> Int fac 0 = 1 fac n = n * fac (n-1) Der QuickSort-Algorithmus läßt sich sehr kurz formulieren: qsort [] = [] qsort (a:x) = qsort[y y<-x,y<=a] ++ [a] ++ qsort[y y<-x,y>a] Literaturhinweis: Haskell The Craft of Functional Programming, 2. Auflage, Simon Thompson, Addison-Wesley,

13 Haskell Spezifikation einer Funktion Mathematik: Spezifikation einer Funktion f(x) = { undefiniert 1, für x=0 x * f(x-1), für x>0 für x<0 Informatik: funktionales Programm f 0 = 1 f x = x*f(x-1) Informatik: imperativer Algorithmus und imperatives Programm setze y=1; solange x>1, wiederhole: setze y auf x*y und x auf x-1 y = 1; while (x>1) { y = x * y; x = x 1; } 13

14 Prolog Logische Programmierung mit Prolog Prolog ist die Sprache der KI. Wir können Regeln definieren und automatisch schlussfolgern. Prolog ist eine sehr mächtige Sprache, da eine automatische, optimierte Suche hinter den Kulissen arbeitet. Es folgen ein paar Beispiele. Ist X Element einer Liste L??member (c, [a,b,c]). yes?member (X, [a,b]). X=a; X=b; Definition des member-prädikats: member(x, [X T]). member(x, [Y T]) :- member (X, T). Literaturhinweis: PROLOG - Programming for Artificial Intelligence", 3.Auflage, Pearson Verlag,

15 Prolog Logische Programmierung mit Prolog Die Konkatenation von Listen lässt sich elegant formulieren concat ([], L, L). concat ([X L1], L2, [X L3]) :- concat(l1, L2, L3). Mit Hilfe des concat-prädikats, können wir member ausdrücken member(x, L) :- concat(_, [X _], L). Wir können Elemente von Listen entfernen und neue Listen beschreiben del(x, [X Tail], Tail). del(x, [Y Tail], [Y Tail2]) :- del(x, Tail, Tail2). Mit del können wir sogar insert ausdrücken insert(x, List, List_with_X) :- del(x, List_with_X, List). Oder kurz mal alle Permutationen perm([],[]). perm([x L],P) :- perm(l, L1), insert(x,l1,p). Mehr dazu in Vorlesung: Künstliche Intelligenz 15

16 C/C++ C als Implementierungsprache für UNIX entwickelt (Kernighan, Ritchie, ATT Labs, 1970) ursprünglich reine Systemimplementierungssprache, Bedeutung erst durch Verbreitung UNIX Heute noch oft benutzt für Betriebssyteme, Echtzeitsysteme, hardwarenahe Systeme #include <stdio.h> int main(void) { printf("hallo Welt!\n"); return 0; } Später (Bjarne Stroustrup, 1979) weiterentwickelt zu C++ mit Objektorientierung #include <iostream> #include <ostream> int main() { std::cout << "Hallo Welt!" << std::endl; } Liste von Hello-World Programmen: 16

17 Skriptsprachen Skriptsprachen sind Programmiersprachen, die vor allem für kleine, überschaubare Programmieraufgaben gedacht sind. Sie sind meist wenig restriktiv, was die Sprachelemente angeht. Eigenschaften oft interpretiert liberale Typen, oft kein Zwang zur Deklaration von Variablen implizite Typwandlung automatische Speicherverwaltung Anwendungen einfache Aufgaben Prototyp erstellen (rapid prototyping) Betriebssystemkommandosprache Beispiele Python, PHP, Perl, Ruby, Javascript ( Java!), Tcl, Bash, C-Shell, Basic,, Lisp (?) 17

18 Traditioneller Algorithmusbegriff Algorithmus (algorithm) benannt nach AlKhwarizmi (arab. Mathematiker, 9.Jhd.) Ein Algorithmus abstrahiert von Rechnerhardware und konkreter Programmiersprache und ist imperativ (!). Ein Algorithmus ist ein schrittweises Verfahren zur Lösung einer Klasse gleichartiger Problemen mit folgenden Eigenschaften: 1. Jeder Einzelschritt ist für ausführenden Instanz eindeutig verständlich und ausführbar 2. Das Verfahren ist endlich beschreibbar 3. Optional: Der nächste auszuführende Schritt ist eindeutig bestimmt 4. Optional: Das Verfahren terminiert 5. Optional: Das Verfahren ist determiniert 6. Optional: Das Verfahren ist deterministisch Gilt Punkt 3, so ist der Algorithmus sequentiell, ansonsten nichtsequentiell (concurrent). Gilt Punkt 4, so ist der Algorithmus terminierend, ansonsten nichtterminierend. Gilt Punkt 5, so ist der Algorithmus determiniert, ansonsten nicht determiniert. Gilt Punkt 6, so ist der Algorithmus deterministisch, ansonsten nichtdeterministisch. 18

19 Traditioneller Algorithmusbegriff Sequentiell? y=11; x=3; m=0; while (y>=x) { y=y-x m=m+1; } Reihenfolge beliebig Termination? y=0; x=3; while (x>1) { y=y*x } Determiniert? Der Algorithmus liefert stets das gleiche Ergebnis bei gleichen Startbedingungen und Eingaben Deterministisch? Während des Algorithmus ist der nächste Handlungsschritt eindeutig definiert. 19

20 Vom Algorithmus zum ausführbaren Programm Compiler (z.b. C, C++) Idee/Algorithmus Programmieren (Coding) Programm als Quellcode in höherer Programmiersprache Übersetzung (Compiler) Ausführbares Programm Binden mit anderen (Hilfs-)Programmen (Linker) Programm in Maschinensprache 20

21 Vom Algorithmus zum ausführbaren Programm Interpreter (z.b. Prolog, C#, Java) Idee/Algorithmus Programmieren (Coding) Programm als Quellcode in höherer Programmiersprache Interpretation Interpretierer Heute: Keine klare Trennung mehr zwischen Übersetzung und Interpretation, meist erst Übersetzung in Byte-Code / Intermediate Language 21

22 Vom Algorithmus zum ausführbaren Programm Java: Übersetzung (Compiler) Java-Quellcode class xyz { } javac Java Bytecode bnc 0xE.. sto 0xF.. plattformunabhängiger Maschinencode Interpretation plattformabhängiger Maschinencode Intel, Sun, Sparc Win / Mac / Solaris / Linux JVM 22

23 Berechenbarkeit Definition: Eine Funktion ist berechenbar, wenn es einen Algorithmus gibt, der die Funktion berechnet Eingabe n Funktion f Ausgabe f(n) Algorithmus A Sei T der Definitionsbereich von f A berechnet f, wenn Eingabe n in T liegt und A nach einer endlichen Zahl von Schritten f(n) liefert Liegt n nicht in T, so terminiert A nicht f ist somit eine partielle Funktion Frage: Welche Funktionen sind berechenbar? Gibt es Funktionen, die überhaupt nicht berechenbar sind? Literaturhinweis: Theoretische Informatik kurzgefaßt, 3. Auflage, Uwe Schöning, Spektrum Akademischer Verlag,

24 Entscheidbarkeit Definition: Eine Funktion ist entscheidbar, wenn sie eine charakteristische Funktion repräsentiert und diese entscheidbar ist Eingabe n Funktion f ja wenn n in T nein sonst Algorithmus A Entscheidbar: Semi-entscheidbar: Unentscheidbar f gibt ja aus, wenn n in T - ansonsten nein f gibt ja aus, wenn n in T ansonsten undefiniert 24

25 Turingmaschine Die Turingmaschine dient als einfaches Rechnermodell: Ein unendlich langes Speicherband mit Feldern, auf dem jeweils ein Zeichen gespeichert werden kann Ein programmierbaren Schreib-Lesekopf, der sich auf dem Band feldweise bewegen kann und die Zeichen lesen oder ändern kann 25

26 Nicht entscheidbare Probleme: Halteproblem Das Halteproblem von Turingmaschinen ist ein Standardbeispiel für ein nicht entscheidbares Problem [Alan Turing, 1936]: Kann man ein Programm A entwickeln, das als Eingabe ein anderes Programm B und einen Eingabewert n erhält und entscheiden kann, ob das andere Programm B terminiert? Antwort: Nein 26

27 Nicht entscheidbare Probleme: Halteproblem Beweis Angenommen es gibt ein Programm A, welches folgendes tut: A(Programm B, Eingabe n): if A(n) terminiert return Ja else return Nein Und ein Programm T: T(Programm X): while A(X,X) == Ja continue else return Ja Was passiert, wenn eine Turingmaschine T(T) aufruft? Dann liefert T(T) entweder Ja oder bleibt in einer Endlosschleife Terminiert T(T) und liefert Ja, dann lieferte A(T,T) Nein. Das bedeutet wiederum, dass T(T) nicht terminiert. Widerspruch! Terminiert T(T) nicht, dann lieferte A(T,T) Ja. Das bedeutet wiederum, das T(T) terminiert. Widerspruch! Es gibt keine Turingmaschine, die das Halteproblem entscheiden kann! 27

28 Registermaschine Die Registermaschine (RAM-Modell) ist ein weiteres Rechnermodell, das etwas ähnlicher ist zu heutigen Rechnern als die Turingmaschinen: Ein Befehlszeiger p Eine Eingabe n Eine Ausgabe o Ein unendlich großer, durchnummerierter Registerspeicher: r1, r2, r3, etc.. Operationen werden durch den Befehlssatz einer Programmiersprache festgelegt. 28

29 LOOP-Registermaschine Befehlssatz einer LOOP-Registermaschine x i = x j + c x i = x j c LOOP x i {<Befehlsfolge>} c: konstante natürliche Zahl Addition wie üblich Subtraktion: xi erhält den Wert xj c, wenn xj c 0 sonst 0 Beispiel: Multiplikation x i = x j * x k LOOP x i {x i = x i - 1} LOOP x j {x i = x i + x k } Mit LOOP-Programmen kann man genau die primitiv rekursiven Funktionen f k :: N k N berechnen. Aber das sind bekanntlich nicht alle berechenbaren Funktionen. 29

30 Primitiv Rekursive Funktionen 1. Die k-stellige Nullfunktion, die immer 0 ausgibt: 2. Die Nachfolgerfunktion 3. Die k-stellige Projektionen 4. Die Komposition m-stellige Funktion g m n-stellige Funktionen h 5. Die primitive Rekursion zweier Funktionen Alle primitiv-rekursiven Funktionen sind im intuitiven Sinn berechenbar. Sie schöpfen aber nicht alle intuitiv berechenbaren Funktionen aus. Beispiel: Die Ackermannfunktion. 30

31 Ackermannfunktion Die Ackermannfunktion (Ackermann 1926) ist eine extrem schnell wachsende mathematische Funktion, die berechenbar ist, aber nicht primitiv rekursiv: Literaturhinweis: Theoretische Informatik kurzgefaßt, 3. Auflage, Uwe Schöning, Spektrum Akademischer Verlag,

32 WHILE-Registermaschine Damit die Registermaschine, alle intuitiv berechenbaren Funktionen realisieren kann, ist eine Spracherweiterung nötig. x i = x j + c x i = x j c WHILE (x i 0) {<Befehlsfolge>} Führe <Befehlsfolge> solange aus bis x i den Wert 0 hat Die WHILE-Registermaschine kann alle berechenbaren Funktionen realisieren und somit auch alle LOOP-Programme. 32

33 GOTO-Registermaschine Alternativ gibt es den GOTO-Befehlssatz. x i = x j + c x i = x j c if x i =c then GOTO M j GOTO M j HALT Die Klasse der GOTO-Programme ist gleich der Klasse der WHILE-Programme Literaturhinweis: Go To Statement Considered Harmful, E. W. Dijkstra, Communications of the ACM, Vol.11, No.3, 1968, pp

34 LAUFZEITANALYSE 35

35 Laufzeitanalyse Die Laufzeit T(n) eines Algorithmus ist die maximale Anzahl der Schritte bei einer Eingabegröße n. Wie man die Größe einer Eingabe misst, muss konkret festgelegt werden, z.b. für Sortieralgorithmen wählt man sinnvollerweise die Anzahl der zu sortierenden Objekte. Welche Schritte dabei gezählt werden (z.b. arithmetische Operationen, Vergleiche, Speicherzugriffe, Wertzuweisungen) hängt sehr stark von dem verwendeten Modell oder der verwendeten Programmiersprache ab. Sogar ein Compiler kann Einfluss auf die Anzahl der Schritte haben. Oft unterscheiden sich die Laufzeiten des gleichen Algorithmus unter Zugrundelegung verschiedener Modelle um konstante Faktoren. Das Ziel der Laufzeitanalyse besteht darin, den Einfluss solcher modell- und implementierungsabhängiger Faktoren auszublenden und damit einen davon unabhängigen Vergleich von Laufzeiten zu ermöglichen. Literaturhinweis: Algorithmen kurz gefasst, Uwe Schöning, Spektrum Akademischer Verlag,

36 Konstante Laufzeit Einfaches Beispiel: int constfunction (int[] n) { int i = 2*12+2; return i; } // 2 Schritte Die Funktion constfunction benötigt in Bezug auf die Eingabegröße n 2 Arbeitsschritte. Unabhängig von der Eingabe benötigt die Funktion konstant viele Arbeitsschritte. Wir sprechen dann von konstanter Laufzeit. int constfunction2 (int[] n) { int i = 0; // 1 Schritt while(i < 10) { // 10 mal i++; // 1 Schritt } return i; } Auch constfunction2 benötigt eine konstante Anzahl an Arbeitsschritten. Von der asymptotischen Laufzeit her unterscheiden sich die beiden Funktionen nicht. 37

37 Lineare Laufzeit Einfaches Beispiel: int sumfunction (int[] n) { int sum = 0; for (int i=0; i<n.length; i++) sum = sum + n[i]; // 1 Schritt // n-mal // 1 Schritt } return sum; Die Funktion sumfunction benötigt in Bezug auf die Eingabegröße n folgende Arbeitsschritte: sumfunction(n) = 1 + n * 1 = n+1 Für diese Fälle wollen wir konstante Werte, die keinen signifikanten Einfluss haben, weglassen. Für dieses Beispiel ergebe sich sumfunction(n) = n, dann sprechen wir von linearer Laufzeit. 38

38 Asymptotische Betrachtung Vergleich von Laufzeiten bezieht sich auf das langfristige Verhalten. Konstanten können daher ignoriert werden. Bei der asymptotischen Betrachtung interessieren wir uns für den höchsten Term, z.b. O(n n n n ) = O(n 4 ) 39

39 O-Notation Die Landau-Symbole werden verwendet, um Laufzeiten für Algorithmen anzugeben und vergleichen zu können: Asymptotische Schranken in O-Notation: 40

40 O-Notation 41

41 Asymptotische Laufzeitklassen int constfunction (int[] n) { int i = 2*12+2; return i; } // 2 Schritte Unsere constfunction liegt also in O(2) = O(1) int sumfunction (int[] n) { int sum = 0; for (int i=0; i<n.length; i++) sum = sum + n[i]; // 1 Schritt // n-mal // 1 Schritt } return sum; Unsere sumfunction liegt in O(n+2) = O(n) Welche Laufzeiten haben folgende Funktionen? Finden des Maximums aus einem Array mit n natürlichen Zahlen Finden des Minimums aus einem Array mit n reellen Zahlen Multiplikation einer mxn Matrix mit einer nxk Matrix 42

42 Asymptotische Laufzeitklassen Übliche Laufzeiten: Kannst du diese Laufzeiten der Größe nach sortieren? 43

43 Speicherbedarfanalyse Genauso wie über die Laufzeit eine asymptotische Analyse geführt werden kann, so geht das auch mit dem Speicherbedarf. int sumfunction (int[] n) { int sum = 0; for (int i=0; i<n.length; i++) sum = sum + n[i]; // 1 Schritt // n-mal // 1 Schritt } return sum; Die Summe eines Zahlenarrays: Laufzeit liegt in O(n), Speicherbedarf in O(n). int potenz (int b, int n) { int p = 1; for (int i=0; i<n; i++) p *= b; // 1 Schritt // n-mal // 1 Schritt } return p; Berechnung der n-ten Potenz (naiv): Laufzeit liegt in O(n), Speicherbedarf bei O(1) 44

44 PAUSE 45

45 Java Dokumentation Die wichtigsten Anlaufstellen: Java 2 Platform, Standard Edition, v API Specification Java 2 Platform Standard Edition 5.0 API Specification Java Platform, Standard Edition 6 API Specification Galileo Computing Openbook: Java ist auch eine Insel (8. Auflage) B. Eckel: Thinking in Java, Prentice Hall, Java-Tutorial von Sun Bei Fragen: unser Forum: 46

46 Eclipse Eclipse ist eine integrierte Entwicklungsumgebung (IDE) für Java 47

47 Eclipse Roadmap: Eclipse installieren Eclipse starten und kennenlernen Einstellungen Workspace und Projekte Views und Perspektiven Klasse erstellen Interface erstellen In Eclipse Methodendokumentation anschauen Auto-Generator Refactoring Shortcuts Jar erstellen Debuggen 48

Mächtigkeit von WHILE-Programmen

Mächtigkeit von WHILE-Programmen Mächtigkeit von WHILE-Programmen Prof. Dr. Berthold Vöcking Lehrstuhl Informatik 1 Algorithmen und Komplexität RWTH Aachen 26. November 2009 Berthold Vöcking, Informatik 1 () Vorlesung Berechenbarkeit

Mehr

Algorithmen & Datenstrukturen 1. Klausur

Algorithmen & Datenstrukturen 1. Klausur Algorithmen & Datenstrukturen 1. Klausur 7. Juli 2010 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 35 2 30 3 30 4 15 5 40 6 30 Gesamt 180 1 Seite 2 von 14 Aufgabe 1) Programm Analyse

Mehr

Kapitel 6. Komplexität von Algorithmen. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Kapitel 6. Komplexität von Algorithmen. Xiaoyi Jiang Informatik I Grundlagen der Programmierung Kapitel 6 Komplexität von Algorithmen 1 6.1 Beurteilung von Algorithmen I.d.R. existieren viele Algorithmen, um dieselbe Funktion zu realisieren. Welche Algorithmen sind die besseren? Betrachtung nicht-funktionaler

Mehr

Programmiersprachen. Marco Block. Folieninhalte teilweise übernommen von Prof. Heinz Schweppe (ALP II, SoSe 2008) und Prof. Löhr (ALP II, SoSe 2004)

Programmiersprachen. Marco Block. Folieninhalte teilweise übernommen von Prof. Heinz Schweppe (ALP II, SoSe 2008) und Prof. Löhr (ALP II, SoSe 2004) Programmiersprachen Inhalt: Geschichte der Programmiersprachen Programmierparadigma Programmiersprachen im Studium Funktionale Programmierung mit Haskell Funktionale versus Imperative Programmierung Logische

Mehr

Kontrollstrukturen - Universität Köln

Kontrollstrukturen - Universität Köln Kontrollstrukturen - Universität Köln Mario Manno Kontrollstrukturen - Universität Köln p. 1 Was sind Sprachen Auszeichnungssprachen HTML, XML Programmiersprachen ASM, Basic, C, C++, Haskell, Java, Pascal,

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund - mit / ohne Parameter - mit / ohne Rückgabewerte

Mehr

Informationsblatt Induktionsbeweis

Informationsblatt Induktionsbeweis Sommer 015 Informationsblatt Induktionsbeweis 31. März 015 Motivation Die vollständige Induktion ist ein wichtiges Beweisverfahren in der Informatik. Sie wird häufig dazu gebraucht, um mathematische Formeln

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Programmieren Formulierung eines Algorithmus in einer Programmiersprache

Programmieren Formulierung eines Algorithmus in einer Programmiersprache Zum Titel der Vorlesung: Programmieren Formulierung eines in einer Programmiersprache Beschreibung einer Vorgehensweise, wie man zu jedem aus einer Klasse gleichartiger Probleme eine Lösung findet Beispiel:

Mehr

Algorithmen und Programmieren II Einführung in Python

Algorithmen und Programmieren II Einführung in Python Algorithmen und Programmieren II Einführung in Python SS 2012 Prof. Dr. Margarita Esponda 1 Was ist Python? eine Skript-Sprache Anfang der 90er Jahre entwickelt. Erfinder: Guido van Rossum an der Universität

Mehr

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h> Allgemeines Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C #include main() { printf( hello world\n ); } Peter Sobe 1 Die Großfamilie der C-Sprachen

Mehr

Abschnitt: Algorithmendesign und Laufzeitanalyse

Abschnitt: Algorithmendesign und Laufzeitanalyse Abschnitt: Algorithmendesign und Laufzeitanalyse Definition Divide-and-Conquer Paradigma Divide-and-Conquer Algorithmen verwenden die Strategien 1 Divide: Teile das Problem rekursiv in Subproblem gleicher

Mehr

Algorithmen mit Python

Algorithmen mit Python Algorithmen mit Python Vorbesprechung zum Proseminar im Sommersemester 2009 http://www.python.org 1 Sie lernen in DAP Java und C/C++: 80% Syntax, 20% Algorithmen-Design Idee Schon ein einfaches Hello World

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

Programmierparadigmen. Programmierparadigmen. Imperatives vs. objektorientiertes Programmieren. Programmierparadigmen. Agenda für heute, 4.

Programmierparadigmen. Programmierparadigmen. Imperatives vs. objektorientiertes Programmieren. Programmierparadigmen. Agenda für heute, 4. Agenda für heute, 4. Mai, 2006 Programmierparadigmen Imperative Programmiersprachen In Prozeduren zusammengefasste, sequentiell ausgeführte Anweisungen Die Prozeduren werden ausgeführt, wenn sie als Teil

Mehr

Pro Informatik 2009: Objektorientierte Programmierung Tag 18. Marco Block-Berlitz, Miao Wang Freie Universität Berlin, Institut für Informatik

Pro Informatik 2009: Objektorientierte Programmierung Tag 18. Marco Block-Berlitz, Miao Wang Freie Universität Berlin, Institut für Informatik Tag 18 Marco Block-Berlitz, Miao Wang Freie Universität Berlin, Institut für Informatik 09.09.2009 Agenda Tag 16 Datenstrukturen Abstrakte Datentypen, ADT Folge: Stack, Queue, Liste, ADT Menge: Bäume:

Mehr

Informatikgrundlagen (WS 2015/2016)

Informatikgrundlagen (WS 2015/2016) Informatikgrundlagen (WS 2015/2016) Klaus Berberich (klaus.berberich@htwsaar.de) Wolfgang Braun (wolfgang.braun@htwsaar.de) 0. Organisatorisches Dozenten Klaus Berberich (klaus.berberich@htwsaar.de) Sprechstunde

Mehr

Zeichen bei Zahlen entschlüsseln

Zeichen bei Zahlen entschlüsseln Zeichen bei Zahlen entschlüsseln In diesem Kapitel... Verwendung des Zahlenstrahls Absolut richtige Bestimmung von absoluten Werten Operationen bei Zahlen mit Vorzeichen: Addieren, Subtrahieren, Multiplizieren

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Einheit 15: Reguläre Ausdrücke und rechtslineare Grammatiken Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Wintersemester 2008/2009 1/25 Was kann man mit endlichen

Mehr

Übung 9 - Lösungsvorschlag

Übung 9 - Lösungsvorschlag Universität Innsbruck - Institut für Informatik Datenbanken und Informationssysteme Prof. Günther Specht, Eva Zangerle Besprechung: 15.12.2008 Einführung in die Informatik Übung 9 - Lösungsvorschlag Aufgabe

Mehr

1 topologisches Sortieren

1 topologisches Sortieren Wolfgang Hönig / Andreas Ecke WS 09/0 topologisches Sortieren. Überblick. Solange noch Knoten vorhanden: a) Suche Knoten v, zu dem keine Kante führt (Falls nicht vorhanden keine topologische Sortierung

Mehr

Primzahlen und RSA-Verschlüsselung

Primzahlen und RSA-Verschlüsselung Primzahlen und RSA-Verschlüsselung Michael Fütterer und Jonathan Zachhuber 1 Einiges zu Primzahlen Ein paar Definitionen: Wir bezeichnen mit Z die Menge der positiven und negativen ganzen Zahlen, also

Mehr

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen? Entscheidungsbäume Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen? Definition Entscheidungsbaum Sei T ein Binärbaum und A = {a 1,..., a n } eine zu sortierenden Menge. T ist ein Entscheidungsbaum

Mehr

Übung Theoretische Grundlagen

Übung Theoretische Grundlagen Übung Theoretische Grundlagen Berechenbarkeit/Entscheidbarkeit Nico Döttling November 26, 2009 INSTITUT FÜR KRYPTOGRAPHIE UND SICHERHEIT KIT University of the State of Baden-Wuerttemberg and National Laboratory

Mehr

Lehrstuhl Informatik VI Grundzüge der Informatik * WS 2008/2009 Prof. Dr. Joachim Biskup

Lehrstuhl Informatik VI Grundzüge der Informatik * WS 2008/2009 Prof. Dr. Joachim Biskup Universität Dortmund Lehrstuhl Informatik VI Grundzüge der Informatik * WS 28/29 Prof. Dr. Joachim Biskup Leitung der Übungen: Arno Pasternak Lösungs-Ideen Übungsblatt 6 A: Grammatiken, Syntaxdiagramme

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

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

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) Wintersemester 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät für Informatik Lehrstuhl

Mehr

Praktische Mathematik: Lineare und Netzwerk-Optimierung (SS 2015) Praktikumsaufgaben

Praktische Mathematik: Lineare und Netzwerk-Optimierung (SS 2015) Praktikumsaufgaben Technische Universität Kaiserslautern Prof Dr Sven O Krumke Dr Sabine Büttner MSc Marco Natale Praktische Mathematik: Lineare und Netzwerk-Optimierung (SS 2015) Praktikumsaufgaben Aufgabe 1 (Konvertieren

Mehr

VBA-Programmierung: Zusammenfassung

VBA-Programmierung: Zusammenfassung VBA-Programmierung: Zusammenfassung Programmiersprachen (Definition, Einordnung VBA) Softwareentwicklung-Phasen: 1. Spezifikation 2. Entwurf 3. Implementierung Datentypen (einfach, zusammengesetzt) Programmablaufsteuerung

Mehr

Programmieren ++ Begleitende Übungen zu Veranstaltungen + Umsetzen des Algorithmus in ein lauffähiges Programm

Programmieren ++ Begleitende Übungen zu Veranstaltungen + Umsetzen des Algorithmus in ein lauffähiges Programm Studienanforderungen Studiengang Maschinenbau Programmieren Begleitende Übungen zu Veranstaltungen Umsetzen des Algorithmus in ein lauffähiges Programm Studiengang Bauingenieurwesen Programmieren Begleitende

Mehr

Institut für Telematik Universität zu Lübeck. Programmieren. Kapitel 0: Organisatorisches. Wintersemester 2008/2009. Prof. Dr.

Institut für Telematik Universität zu Lübeck. Programmieren. Kapitel 0: Organisatorisches. Wintersemester 2008/2009. Prof. Dr. Institut für Telematik Universität zu Lübeck Programmieren Kapitel 0: Organisatorisches Wintersemester 2008/2009 Prof. Dr. Christian Werner 1-2 Überblick Ziele Inhaltsüberblick Ablauf der Veranstaltung

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

Fragen für die Klausuren

Fragen für die Klausuren Fragen für die Klausuren Vom Quellcode zum ausführbaren Programm Was ist ein Quellcode? Ist der Quellcode von einem Programm auf unterschiedlichen Rechner gleich? Nennen Sie drei Programmiersprachen. Was

Mehr

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007 Fachhochschule Bonn-Rhein-Sieg University of Applied Sciences Fachbereich Informatik Prof. Dr. Peter Becker Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Mehr

1. Einführung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

1. Einführung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi 1. Einführung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi 1 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Einführung in

Mehr

SOI 2013. Die Schweizer Informatikolympiade

SOI 2013. Die Schweizer Informatikolympiade SOI Die Schweizer Informatikolympiade Lösung SOI Wie schreibe ich eine gute Lösung? Bevor wir die Aufgaben präsentieren, möchten wir dir einige Tipps geben, wie eine gute Lösung für die theoretischen

Mehr

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7)

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7) Datenstrukturen und Algorithmen Vorlesung 9: (K7) Joost-Pieter Katoen Lehrstuhl für Informatik 2 Software Modeling and Verification Group http://www-i2.rwth-aachen.de/i2/dsal0/ Algorithmus 8. Mai 200 Joost-Pieter

Mehr

Kapiteltests zum Leitprogramm Binäre Suchbäume

Kapiteltests zum Leitprogramm Binäre Suchbäume Kapiteltests zum Leitprogramm Binäre Suchbäume Björn Steffen Timur Erdag überarbeitet von Christina Class Binäre Suchbäume Kapiteltests für das ETH-Leitprogramm Adressaten und Institutionen Das Leitprogramm

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at Inhalt SWP Funktionale Programme (2. Teil) Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie wotawa@ist.tugraz.at Interpreter für funktionale Sprache

Mehr

Algorithmik II. SS 2003 Prof. Dr. H. Stoyan Lehrstuhl für Informatik 8 ( Künstliche Intelligenz) Email: stoyan@informatik.uni-erlangen.

Algorithmik II. SS 2003 Prof. Dr. H. Stoyan Lehrstuhl für Informatik 8 ( Künstliche Intelligenz) Email: stoyan@informatik.uni-erlangen. Algorithmik II SS 2003 Prof. Dr. H. Stoyan Lehrstuhl für Informatik 8 ( Künstliche Intelligenz) Email: stoyan@informatik.uni-erlangen.de Homepage der Vorlesung Vorbemerkungen I http://www8.informatik.uni-erlangen.de/immd8

Mehr

Erwin Grüner 09.02.2006

Erwin Grüner 09.02.2006 FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife

Mehr

Programmieren in Haskell Einführung

Programmieren in Haskell Einführung Programmieren in Haskell Einführung Peter Steffen Universität Bielefeld Technische Fakultät 16.10.2009 1 Programmieren in Haskell Veranstalter Dr. Peter Steffen Raum: M3-124 Tel.: 0521/106-2906 Email:

Mehr

Einführung in PHP. (mit Aufgaben)

Einführung in PHP. (mit Aufgaben) Einführung in PHP (mit Aufgaben) Dynamische Inhalte mit PHP? 2 Aus der Wikipedia (verkürzt): PHP wird auf etwa 244 Millionen Websites eingesetzt (Stand: Januar 2013) und wird auf etwa 80 % aller Websites

Mehr

Informatik Java-Programmierkurs im Rahmen der Berufs- u. Studienorientierung für Schüler. Joliot-Curie-Gymnasium GR 2010 Nico Steinbach

Informatik Java-Programmierkurs im Rahmen der Berufs- u. Studienorientierung für Schüler. Joliot-Curie-Gymnasium GR 2010 Nico Steinbach Informatik Java-Programmierkurs im Rahmen der Berufs- u. Studienorientierung für Schüler Joliot-Curie-Gymnasium GR 2010 Nico Steinbach 0. Organisatorisches Warum habt Ihr euch für den Kurs eingeschrieben?

Mehr

Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Prof. Dr. Uwe Schmidt 21. August 2007 Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Zeit: 75 Minuten erlaubte Hilfsmittel: keine Bitte tragen Sie Ihre Antworten und fertigen

Mehr

Theoretische Grundlagen der Informatik

Theoretische Grundlagen der Informatik Theoretische Grundlagen der Informatik Vorlesung am 12.01.2012 INSTITUT FÜR THEORETISCHE 0 KIT 12.01.2012 Universität des Dorothea Landes Baden-Württemberg Wagner - Theoretische und Grundlagen der Informatik

Mehr

Grundlagen der Theoretischen Informatik, SoSe 2008

Grundlagen der Theoretischen Informatik, SoSe 2008 1. Aufgabenblatt zur Vorlesung Grundlagen der Theoretischen Informatik, SoSe 2008 (Dr. Frank Hoffmann) Lösung von Manuel Jain und Benjamin Bortfeldt Aufgabe 2 Zustandsdiagramme (6 Punkte, wird korrigiert)

Mehr

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage: Zählen und Zahlbereiche Übungsblatt 1 1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage: Für alle m, n N gilt m + n = n + m. in den Satz umschreiben:

Mehr

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff Programmieren in C Felder, Schleifen und Fließkommaarithmetik Prof. Dr. Nikolaus Wulff Addition von Zahlen 1 2 3 4 5 #include int main() { int x,y,z,sum; x = 1; y = 2; z = 4; sum = x + y + z;

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens 1 Organisatorisches Freitag, 05. Mai 2006: keine Vorlesung! aber Praktikum von 08.00 11.30 Uhr (Gruppen E, F, G, H; Vortestat für Prototyp)

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

1 Vom Problem zum Programm

1 Vom Problem zum Programm Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren

Mehr

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes. Binäre Bäume Definition: Ein binärer Baum T besteht aus einer Menge von Knoten, die durch eine Vater-Kind-Beziehung wie folgt strukturiert ist: 1. Es gibt genau einen hervorgehobenen Knoten r T, die Wurzel

Mehr

Wortproblem für kontextfreie Grammatiken

Wortproblem für kontextfreie Grammatiken Wortproblem für kontextfreie Grammatiken G kontextfreie Grammatik. w Σ w L(G)? Wortproblem ist primitiv rekursiv entscheidbar. (schlechte obere Schranke!) Kellerautomat der L(G) akzeptiert Ist dieser effizient?

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:

Mehr

Die Komplexitätsklassen P und NP

Die Komplexitätsklassen P und NP Die Komplexitätsklassen P und NP Prof. Dr. Berthold Vöcking Lehrstuhl Informatik 1 Algorithmen und Komplexität RWTH Aachen 3. Dezember 2009 Berthold Vöcking, Informatik 1 () Vorlesung Berechenbarkeit und

Mehr

Einführung in Eclipse und Java

Einführung in Eclipse und Java Universität Bayreuth Lehrstuhl für Angewandte Informatik IV Datenbanken und Informationssysteme Prof. Dr.-Ing. Jablonski Einführung in Eclipse und Java Dipl.Inf. Manuel Götz Lehrstuhl für Angewandte Informatik

Mehr

Einführung in die Informatik I

Einführung in die Informatik I Einführung in die Informatik I Algorithmen und deren Programmierung Prof. Dr. Nikolaus Wulff Definition Algorithmus Ein Algorithmus ist eine präzise formulierte Handlungsanweisung zur Lösung einer gleichartigen

Mehr

Programmiersprachen und Übersetzer

Programmiersprachen und Übersetzer Programmiersprachen und Übersetzer Sommersemester 2010 19. April 2010 Theoretische Grundlagen Problem Wie kann man eine unendliche Menge von (syntaktisch) korrekten Programmen definieren? Lösung Wie auch

Mehr

Binäre Suchbäume (binary search trees, kurz: bst)

Binäre Suchbäume (binary search trees, kurz: bst) Binäre Suchbäume (binary search trees, kurz: bst) Datenstruktur zum Speichern einer endlichen Menge M von Zahlen. Genauer: Binärbaum T mit n := M Knoten Jeder Knoten v von T ist mit einer Zahl m v M markiert.

Mehr

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein. Schritt 1: Installation des Javacompilers JDK. Der erste Start mit Eclipse Bevor Sie den Java-Compiler installieren sollten Sie sich vergewissern, ob er eventuell schon installiert ist. Gehen sie wie folgt

Mehr

Installation und Inbetriebnahme von Microsoft Visual C++ 2010 Express

Installation und Inbetriebnahme von Microsoft Visual C++ 2010 Express Howto Installation und Inbetriebnahme von Microsoft Visual C++ 2010 Express Peter Bitterlich Markus Langer 12. Oktober 2012 Zusammenfassung Dieses Dokument erklärt Schritt für Schritt die Installation

Mehr

Semantik von Formeln und Sequenzen

Semantik von Formeln und Sequenzen Semantik von Formeln und Sequenzen 33 Grundidee der Verwendung von Logik im Software Entwurf Syntax: Menge von Formeln = Axiome Ax K ist beweisbar Formel ϕ beschreiben Korrektkeit Vollständigkeit beschreibt

Mehr

SEP 114. Design by Contract

SEP 114. Design by Contract Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit

Mehr

Überblick. Lineares Suchen

Überblick. Lineares Suchen Komplexität Was ist das? Die Komplexität eines Algorithmus sei hierbei die Abschätzung des Aufwandes seiner Realisierung bzw. Berechnung auf einem Computer. Sie wird daher auch rechnerische Komplexität

Mehr

Entwurf von Algorithmen - Kontrollstrukturen

Entwurf von Algorithmen - Kontrollstrukturen Entwurf von Algorithmen - Kontrollstrukturen Eine wichtige Phase in der Entwicklung von Computerprogrammen ist der Entwurf von Algorithmen. Dieser Arbeitsschritt vor dem Schreiben des Programmes in einer

Mehr

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

Funktionale Programmierung. Funktionale Programmierung: Vorlesungsüberblick. Eigenschaften rein funktionaler Programmierung Funktionale Programmierung 1 Funktionale Programmierung: Vorlesungsüberblick 1. Funktionale Programmierung Prinzipien funktionaler Programmierung Funktionale Programmierung in prozeduralen Sprachen Rekursive

Mehr

Einführung in die C++ Programmierung für Ingenieure

Einführung in die C++ Programmierung für Ingenieure Einführung in die C++ Programmierung für Ingenieure MATTHIAS WALTER / JENS KLUNKER Universität Rostock, Lehrstuhl für Modellierung und Simulation 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK FACULTY OF

Mehr

Theoretische Informatik I

Theoretische Informatik I Theoretische Informatik I Einheit 2.4 Grammatiken 1. Arbeitsweise 2. Klassifizierung 3. Beziehung zu Automaten Beschreibungsformen für Sprachen Mathematische Mengennotation Prädikate beschreiben Eigenschaften

Mehr

Suchen und Sortieren Sortieren. Heaps

Suchen und Sortieren Sortieren. Heaps Suchen und Heaps (Folie 245, Seite 63 im Skript) 3 7 21 10 17 31 49 28 14 35 24 42 38 Definition Ein Heap ist ein Binärbaum, der die Heapeigenschaft hat (Kinder sind größer als der Vater), bis auf die

Mehr

16. All Pairs Shortest Path (ASPS)

16. All Pairs Shortest Path (ASPS) . All Pairs Shortest Path (ASPS) All Pairs Shortest Path (APSP): Eingabe: Gewichteter Graph G=(V,E) Ausgabe: Für jedes Paar von Knoten u,v V die Distanz von u nach v sowie einen kürzesten Weg a b c d e

Mehr

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen. 1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik

Mehr

Grundlagen. Kapitel 1

Grundlagen. Kapitel 1 Grundlagen Dieses Kapitel umfasst grundlegende Fragen und Aufgaben zur Erstellung von C++-Programmen. Hierzu zählen auch das Inkludieren von Header-Dateien Eine Header-Datei beinhaltet Informationen, die

Mehr

Programmieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff

Programmieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff Programmieren in C Rekursive Funktionen Prof. Dr. Nikolaus Wulff Rekursive Funktionen Jede C Funktion besitzt ihren eigenen lokalen Satz an Variablen. Dies bietet ganze neue Möglichkeiten Funktionen zu

Mehr

Funktionale Programmierung (in Clojure)

Funktionale Programmierung (in Clojure) Funktionale Programmierung (in Clojure) Einführung Burkhardt Renz Fachbereich MNI Technische Hochschule Mittelhessen Wintersemester 2014/15 Übersicht Paradigmen von Programmiersprachen Paradigmen von Programmiersprachen

Mehr

Programmierung für Mathematik (HS13)

Programmierung für Mathematik (HS13) software evolution & architecture lab Programmierung für Mathematik (HS13) Übung 5 1 Aufgabe: Eclipse IDE 1.1 Lernziele 1. Die Entwicklungsumgebung Eclipse einrichten. 2. Eclipse kennen lernen und mit

Mehr

Formale Sprachen und Grammatiken

Formale Sprachen und Grammatiken Formale Sprachen und Grammatiken Jede Sprache besitzt die Aspekte Semantik (Bedeutung) und Syntax (formaler Aufbau). Die zulässige und korrekte Form der Wörter und Sätze einer Sprache wird durch die Syntax

Mehr

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung.

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung. Lineare Gleichungen mit einer Unbekannten Die Grundform der linearen Gleichung mit einer Unbekannten x lautet A x = a Dabei sind A, a reelle Zahlen. Die Gleichung lösen heißt, alle reellen Zahlen anzugeben,

Mehr

Einführung. Vorlesungen zur Komplexitätstheorie: Reduktion und Vollständigkeit (3) Vorlesungen zur Komplexitätstheorie. K-Vollständigkeit (1/5)

Einführung. Vorlesungen zur Komplexitätstheorie: Reduktion und Vollständigkeit (3) Vorlesungen zur Komplexitätstheorie. K-Vollständigkeit (1/5) Einführung 3 Vorlesungen zur Komplexitätstheorie: Reduktion und Vollständigkeit (3) Univ.-Prof. Dr. Christoph Meinel Hasso-Plattner-Institut Universität Potsdam, Deutschland Hatten den Reduktionsbegriff

Mehr

Lineare Gleichungssysteme

Lineare Gleichungssysteme Brückenkurs Mathematik TU Dresden 2015 Lineare Gleichungssysteme Schwerpunkte: Modellbildung geometrische Interpretation Lösungsmethoden Prof. Dr. F. Schuricht TU Dresden, Fachbereich Mathematik auf der

Mehr

Kapitel 2: Formale Sprachen Kontextfreie Sprachen. reguläre Grammatiken/Sprachen. kontextfreie Grammatiken/Sprachen

Kapitel 2: Formale Sprachen Kontextfreie Sprachen. reguläre Grammatiken/Sprachen. kontextfreie Grammatiken/Sprachen reguläre Grammatiken/prachen Beschreibung für Bezeichner in Programmiersprachen Beschreibung für wild cards in kriptsprachen (/* reguläre Ausdrücke */)?; [a-z]; * kontextfreie Grammatiken/prachen Beschreibung

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

Programmieren was ist das genau?

Programmieren was ist das genau? Programmieren was ist das genau? Programmieren heisst Computerprogramme herstellen (von griechisch programma für Vorschrift). Ein Computerprogramm ist Teil der Software eines Computers. Als Software bezeichnet

Mehr

Wirtschaftsinformatik I

Wirtschaftsinformatik I Wirtschaftsinformatik I - Tutorium 6/ 7 (April 2010) Zusatzinformationen - Lösungsvorschläge Wirtschaftsinformatik I Tutorium Jochen Daum (4.Semester BWL) Universität Mannheim Rechtshinweis: Diese Präsentation

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

3. Ziel der Vorlesung

3. Ziel der Vorlesung 3. Ziel der Vorlesung Der Zweck der Vorlesung ist das Studium fundamentaler Konzepte in der Algorithmentheorie. Es werden relevante Maschinenmodelle, grundlegende und höhere Datenstrukturen sowie der Entwurf

Mehr

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005 Einführung in die objektorientierte Programmierung mit Java Klausur am 19. Oktober 2005 Matrikelnummer: Nachname: Vorname: Semesteranzahl: Die Klausur besteht aus drei Frageblöcken zu den Inhalten der

Mehr

Summenbildung in Bauteiltabellen mit If Then Abfrage

Summenbildung in Bauteiltabellen mit If Then Abfrage Summenbildung in Bauteiltabellen mit If Then Abfrage Die in Bauteiltabellen ausgelesenen Werte lassen sich in jeder Spalte als Summe berechnen. So können selbstverständlich die Flächen der in der Tabelle

Mehr

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Einführung in Java PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Gliederung 1. Was ist Java / Geschichte von Java 2. Prinzip der Plattformunabhängigkeit 3. Wie kommt man vom Quellcode zum Programm

Mehr

Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.

Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel. Kontextfreie Kontextfreie Motivation Formale rundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen Bisher hatten wir Automaten, die Wörter akzeptieren Frank Heitmann heitmann@informatik.uni-hamburg.de

Mehr

WS 2009/10. Diskrete Strukturen

WS 2009/10. Diskrete Strukturen WS 2009/10 Diskrete Strukturen Prof. Dr. J. Esparza Lehrstuhl für Grundlagen der Softwarezuverlässigkeit und theoretische Informatik Fakultät für Informatik Technische Universität München http://www7.in.tum.de/um/courses/ds/ws0910

Mehr

Mathematik: Mag. Schmid Wolfgang Arbeitsblatt 3 1. Semester ARBEITSBLATT 3 RECHNEN MIT GANZEN ZAHLEN

Mathematik: Mag. Schmid Wolfgang Arbeitsblatt 3 1. Semester ARBEITSBLATT 3 RECHNEN MIT GANZEN ZAHLEN ARBEITSBLATT 3 RECHNEN MIT GANZEN ZAHLEN Wir wollen nun die Rechengesetze der natürlichen Zahlen auf die Zahlenmenge der ganzen Zahlen erweitern und zwar so, dass sie zu keinem Widerspruch mit bisher geltenden

Mehr

Vorkurs Informatik WiSe 15/16

Vorkurs Informatik WiSe 15/16 Java 1 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 12.10.2015 Technische Universität Braunschweig, IPS Überblick Organisatorisches Arbeitsablauf Hello! 12.10.2015 Dr. Werner Struckmann / Stephan

Mehr

Grundlagen von Python

Grundlagen von Python Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 4 Einführung in die Programmiersprache Java (Teil II)... 4-2 4.4 Strukturierte Programmierung... 4-2 4.4.1 Strukturierung im Kleinen... 4-2 4.4.2 Addierer (do-schleife)... 4-3 4.4.3 Ein- Mal- Eins

Mehr

Tutorium Rechnerorganisation

Tutorium Rechnerorganisation Woche 2 Tutorien 3 und 4 zur Vorlesung Rechnerorganisation 1 Christian A. Mandery: KIT Universität des Landes Baden-Württemberg und nationales Grossforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu

Mehr

Programmieren I. Kapitel 7. Sortieren und Suchen

Programmieren I. Kapitel 7. Sortieren und Suchen Programmieren I Kapitel 7. Sortieren und Suchen Kapitel 7: Sortieren und Suchen Ziel: Varianten der häufigsten Anwendung kennenlernen Ordnung Suchen lineares Suchen Binärsuche oder Bisektionssuche Sortieren

Mehr