Algorithmen und Datenstrukturen CS1017
|
|
- Petra Graf
- vor 5 Jahren
- Abrufe
Transkript
1 Algorithmen und Datenstrukturen CS1017 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Rekursiv definierte Strukturen und strukturelle Rekursion Listen und Bäume Strukturelle Rekursion und Induktion Implementierung rekursiv definierter Strukturen: null / Optional Imperative Datenstrukturen
2 Datenstrukturen Datenstrukturen Datenstruktur Eine Datenstruktur ist eine Struktur (Anordnung von Dingen), deren Elemente Daten sind Beispiel Array: Ein Array besteht aus Daten die hintereinander angeordnet sind Datenstrukturen in Java Java bietet drei Mittel zur Strukturierung von Daten Array: Daten gleicher Art zusammenfassen und mit Index zugreifen Objekt: Daten unterschiedlicher Art zusammenfassen und mit Namen zugreifen Zeiger / Pointer: Bezug zu einer anderen Datenstruktur Bemerkung Datenstrukturen werden mit den Kern-Elementen einer Sprache konstruiert, alles was sich in der API findet, auch Ströme (java.util.stream), sind keine Datenstrukturen sondern Datenabstraktionen Seite 2
3 Datenstrukturen Funktionale und imperative Datenstrukturen Funktionale Datenstruktur Eine funktionale Datenstruktur ist eine Struktur (Anordnung von Dingen), deren Elemente Werte sind Imperative Datenstrukturen Eine imperative Datenstruktur ist eine Struktur (Anordnung von Dingen), deren Elemente Variablen sind Beispiel Java Java ist eine imperative Sprache Datenstrukturen in Java sind darum prinzipiell strukturierte Variablen Der imperative Programmierstil hat in den letzten Jahren stark an Popularität verloren Imperative Sprache erlauben es Programme im funktionalen Stil zu schreiben Java unterstützt das funktionale Programmieren in einer imperativen Sprache durch einige (eher wenige) Bestandteile der API, z.b. Streams Seite 3
4 Rekursiv definierte Datenstrukturen Rekursion zur Definition von Daten Funktionen können rekursiv definiert werden Basis: Der Wert für einfache Fälle wird direkt angegeben Rekursion: Der Wert für komplexere Fälle wird aus dem Wert für einfachere Fälle berechnet Beispiel: fak(n) = 1 falls n = 0 fak(n) = fak(n-1)*n n > 0 Daten können rekursiv definiert werden Das Prinzip der Rekursion kann auch auf die Definition von Daten angewendet werden (Funktionale) Daten (-strukturen) können rekursiv definiert werden: Basis: Welche unstrukturierten Werte bilden eine (triviale) Struktur Rekursion: Wie wird eine Struktur aus gegeben Werten definiert Beispiel Liste Basis: Rekursion: Die leere Liste ist eine Liste Eine Liste kann aus einer gegeben Liste gebildet werden, indem man ein Element hinzunimmt Seite 4
5 Rekursiv definierte Datenstrukturen Rekursiv definierte Daten Beispiel vollständig geklammerte arithmetische Ausdrücke Basis: (Ganze) Zahl (als Zeichenkette) Konstruktionen: Ausdruck1, Ausdruck2 => '(' Ausdruck1 Leerzeichen Operator Leerzeichen Ausdruck2 ')' Es wird eine Menge von speziell strukturierten Zeichenketten definiert Beispiel arithmetische Ausdrucksbäume Basis: (Ganze) Zahl Konstruktionen: Ausdruck1, Ausdruck2 => op Ausdruck1 Ausdruck2 Es wird eine Menge von speziell strukturierten Bäumen definiert Seite 5
6 Rekursiv definierte Datenstrukturen Rekursiv definierte Daten Allgemeine Konstruktion Datenstrukturen können rekursiv definiert werden durch Angabe einer Menge von Basis-Elementen sowie Angabe einer Menge von Konstruktionsfunktionen Daten, Datenstrukturen, Datentypen Für rekursiv definierte Daten werden verschiedene Bezeichnungen verwendet Datentypen nennen sie viele, aber Vorsicht: der Begriff Datentyp hat in der Informatik noch eine andere wichtige Bedeutung Induktive Menge ist eine Bezeichnung die unter Mathematikern üblich ist Algebraischer Datentyp ist eine weitere übliche Bezeichnung Das Konzept ist so einfach, dass die meisten Bezeichnungen ein Komplexität vortäuschen, die nicht vorhanden ist Seite 6
7 Strukturelle Rekursion Rekursion auf rekursiven Daten Rekursiv definierte Funktionen auf rekursiv definierten Daten Rekursiv definierte Daten haben eine natürliche Zergliederung: Sie können in die Bestandteile zerlegt werden, aus denen sie gebildet wurden Berechnungen auf rekursiv definierten Daten können darum gut mit dem Prinzip Teile- / Reduziere-und-Herrsche (und so mit rekursiven Algorithmen) gelöst werden. Beispiel Rekursiv definierte Daten: Ausdrucksbäume Problem: Wertberechnung Lösung nach dem Prinzip Teile-und-Herrsche: op Wert Ausdruck1 = fop Wert Ausdruck2 Ausdruck1, Wert Seite 7 Ausdruck2
8 Strukturelle Rekursion Rekursion über die Struktur rekursiver Daten Strukturelle Rekursion Funktionen auf rekursiv definierten Daten d können durch Fallunterscheidung über die Art der Konstruktion von d definiert werden. Diese Art der Funktionsdefinition nennt man strukturelle Rekursion Seite 8
9 Strukturelle Induktion Strukturelle Induktion Vollständige Induktion Beweistechnik um Aussagen über natürliche Zahlen zu beweisen Jede natürliche Zahl ist dabei entweder 1 oder n+1 für irgendeine natürliche Zahl n Die natürlichen Zahlen werden hier offensichtlich als rekursiv definierte Daten aufgefasst Strukturelle Induktion Verallgemeinerung der Beweistechnik vollständige Induktion auf beliebige rekursiv definierte Daten Seite 9
10 Listen funktional Listen: rekursive Definition Eine Integer-Liste ist die leere Liste Nil oder wird mit der Cons-Operation aus einem Integer-Wert und einer Integer-Liste gebildet Bemerkung: Die Bezeichnungen Nil und Cons sind seit ca üblich OO-Implementierung Integer-Liste: oder : Ableitungsvarianten eines Interface' oder einer abstrakten Klasse und : Zusammenfassung in einer Klasse interface IntList { class Nil implements IntList { class Cons implements IntList { Cons(int head, IntList tail) { this.tail = tail; int IntList tail; Seite 10
11 Listen funktional Strukturelle Rekursion auf Listen Ein Problem auf Integer-Listen wird für die die leere Liste Nil gelöst oder wird bei einer mit der Cons-Operation gebildeten Liste gelöst indem es für die enthaltende (kürzere) Integer-Liste gelöst wird und mit dieser Teil-Lösung dann die Gesamt-Lösung gebildet wird Beispiel interface IntList { public class Integer_Lists { class Nil implements IntList { public static int length(intlist lst) { return (lst instanceof Nil)? 0 : 1 + length( ((Cons)lst).tail ); public static int sum(intlist lst) { if (lst instanceof Nil) { return 0; else { Cons cons = (Cons) lst; return cons.head + sum(cons.tail); class Cons implements IntList { Cons(int head, IntList tail) { this.tail = tail; int IntList tail; public class Integer_ListsTest public void test() { IntList lst = 1, 2, 3, new Nil()))); assertequals(0, length(new Nil())); assertequals(3, length(lst)); assertequals(0, sum(new Nil())); assertequals(6, sum(lst)); Seite 11
12 Bäume funktional Bäume: rekursive Definition Ein binärer Baum mit Integer-Werten ist ein Leaf mit einem Integer-Wert oder wird mit der Node-Operation aus einem Integer-Baum und einem Integer-Baum gebildet Bemerkung: Man kann Bäume auf diverse andere Arten definieren OO-Implementierung eines Integer-Baums: interface IntTree { class Leaf implements IntTree { Leaf(int value) { this.value = value; int value; class Node implements IntTree { Node(IntTree left, IntTree right) { this.left = left; this.right = right; IntTree left, right; Seite 12
13 Bäume funktional interface IntTree { Strukturelle Rekursion auf Bäumen class Leaf implements IntTree { Leaf(int value) { this.value = value; int value; Beispiel public class Int_Trees { class Node implements IntTree { Node(IntTree left, IntTree right) { this.left = left; this.right = right; IntTree left, right; public static int sum(inttree tree) { if (tree instanceof Leaf) { return ((Leaf)tree).value; else { Node node = (Node) tree; return sum(node.left) + sum(node.right); public class Int_TreesTest public void test() { IntTree t = new Node( new Node( new Leaf(1), new Leaf(2)), new Leaf(3)); assertequals(0, sum(new Leaf(0))); assertequals(6, sum(t)); Seite 13
14 Listen und Bäume generisch Strukturelle Rekursion auf generischen Listen Beispiel interface GenList<T> { class GenNil<T> implements GenList<T> { class GenCons<T> implements GenList<T> { GenCons(T head, GenList<T> tail) { this.tail = tail; T public class Generic_Lists { GenList<T> tail; public static <T> int length(genlist<t> lst) { return (lst instanceof GenNil)? 0 : 1 + length( ((GenCons<T>)lst).tail ); public static <T extends Comparable<T>> T maximum(genlist<t> lst) { if (lst instanceof GenNil) { throw new IllegalArgumentException("List must not be empty"); else { GenCons<T> cons = (GenCons<T>) lst; if (cons.tail instanceof GenNil) return cons. T maxtail = maximum(cons.tail); return cons.head.compareto(maxtail) > 0? cons.head : maxtail; Seite 14
15 Strukturelle Rekursion Implementierung der strukturellen Rekursion Variante 1: Mit Typ-Prüfung eine statische Methode die den Typ ihres Arguments prüft siehe Beispiele oben interface IntList { class Nil implements IntList { class Cons implements IntList { Cons(int head, IntList tail) { this.tail = tail; int IntList tail; static int length(intlist lst) { return (lst instanceof Nil)? 0 : 1 + length( ((Cons)lst).tail ); Variante 2: Mit Polymorphismus polymorphe Methoden pro Typ-Variante klassische OO-Programmierung interface IntList { int length(); class Nil implements IntList public int length() {return 0; class Cons implements IntList { Cons(int head, IntList tail) { this.tail = public int length() { return 1 + tail.length(); int IntList tail; Seite 15
16 Strukturelle Rekursion Sortieren von Listen Insertion Sort Kann als rekursive Funktion auf Listen definiert werden: public static <T extends Comparable<T>> GenList<T> sort(genlist<t> lst) { if (lst instanceof GenNil) { return lst; else { GenCons<T> cons = (GenCons<T>) lst; GenList<T> sortedtail = sort(cons.tail); return insert (cons.head, sortedtail); private static <T extends Comparable<T>> GenList<T> insert(t x, GenList<T> lst) { if (lst instanceof GenNil) { return new GenCons<>(x, new GenNil<T>()); else { GenCons<T> cons = (GenCons<T>) lst; if (x.compareto(cons.head) < 0) { return new GenCons<T>(x, lst); else return new GenCons<T>(cons.head, insert(x, cons.tail)); Seite 16
17 Implementierung rekursiv definierter Strukturen Zeiger / Pointer / Verweise Rekursiv Definierte Strukturen und Zeiger Rekursiv definierte Strukturen werden immer mit Hilfe von Zeigern implementiert. Die Komponenten gleicher Art sind in einer Struktur nicht direkt enthalten: es wird auf sie verwiesen Zeiger sind ein mächtiges Hilfsmittel mit dem man vieles machen kann vor allem vieles falsch In Java und vielen anderen Sprachen sind die Zeiger versteckt Sie können im Wesentlichen nur implizit und zum Verweis auf Unterstrukturen verwendet werden IntList lst = 1, 2, 3, new Nil() ) ) ); interface IntList { 1 class Nil implements IntList { class Cons implements IntList { Cons(int head, IntList tail) { this.tail = tail; int IntList tail; 2 3 Seite 17
18 Implementierung rekursiv definierter Strukturen Zeiger-Arithmetik Manipulation von Zeiger-Variablen Variablen, deren Wert Zeiger sind, können auch in Java direkt verändert werden Man spricht dann von Rechnen mit Zeigern oder auch von Pointer-Arithmetik Beispiel: Summe einer Liste public static int sump(intlist lst) { int sum = 0; for (IntList p = lst;!(p instanceof Nil); sum = sum + ((Cons)p). return sum; p = ((Cons)p).tail) { p IntList lst = interface IntList { lst 1, class Nil implements IntList { 1 class Cons implements IntList { Cons(int head, IntList tail) { this.tail = tail; int IntList tail; 2 2, 3, 3 new Nil() ) ) ); Seite 18
19 Implementierung rekursiv definierter Strukturen Zeiger-Arithmetik null-zeiger statt leerem Objekt der null-zeiger, der leere Zeiger kann als Ersatz einer leeren Struktur verwendet werden. Damit wird die Darstellung und Verarbeitung effizienter diese Stil des Programmieren gilt als unsicher und wird nicht mehr empfohlen aber noch extrem oft verwendet leer! Kann durch null ersetzt werden. interface IntList { class Nil implements IntList { class Cons implements IntList { Cons(int head, IntList tail) { this.tail = tail; int IntList tail; class Cons { Cons(int head, Cons tail) { this.tail = tail; int Cons tail; Seite 19
20 Implementierung rekursiv definierter Strukturen Zeiger-Arithmetik null-zeiger statt leerem Objekt Beispiel: class Cons { Cons(int head, Cons tail) { this.tail = tail; int Cons tail; public static int sum(cons lst) { int sum = 0; for (Cons p = lst; p!= null; p = p.tail) { sum = sum + p. return sum; Cons lst = 1, 2, 3, null ) ) ); System.out.println(sum(lst)); Seite 20
21 Implementierung rekursiv definierter Strukturen Optional Typ Optional statt Zeiger die eventuell null sind Der null-zeiger zur Repräsentation von Objekten, die leer / nicht da sind, wird heute generell nicht mehr empfohlen Statt dessen: Typ / Interface Optional Repräsentierte optionale Objekte (da oder nicht da) Beispiel: import java.util.optional; class Cons { Cons(int head, Cons tail) { this.tail = Optional.of(tail); Cons(int head) { this.tail = Optional.empty(); int Optional<Cons> tail; public static int sum(optional<cons> lst) { int sum = 0; for (Optional<Cons> p = lst; p.ispresent(); sum = sum + p.get(). return sum; Optional<Cons> lst = Optional.of( 1, 2, 3 ) ) )); System.out.println(sum(lst)); Seite 21 p = p.get().tail) {
22 Imperative Strukturen Imperative Datenstrukturen Funktionale und imperative Datenstrukturen Eine funktionale Datenstruktur ist eine Struktur (Anordnung von Dingen), deren Elemente Werte sind Diese Art von Datenstruktur haben wir bisher betrachtet Eine imperative Datenstruktur ist eine Struktur (Anordnung von Dingen), deren Elemente Variablen sind Imperative Datenstrukturen sind veränderlich Seite 22
23 Imperative Strukturen Imperative Datenstrukturen Beispiel: imperative Liste class List { private class Node { Node(int head, Optional<Node> tail) { this.tail = tail; int Optional<Node> tail; Die imperative Variante der Liste erfordert eine Kapselung der Datenstruktur in einer Hüllklasse. Optional<Node> anchor = Optional.empty(); void cons(int x) { anchor = Optional.of(new Node(x, anchor)); int sum() { int sum = 0; for (Optional<Node> p = anchor; p.ispresent(); sum = sum + p.get(). return sum; p = p.get().tail) { List lst = new List(); lst.cons(3); lst.cons(2); lst.cons(1); System.out.println(lst.sum()); Seite 23
Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1
Übergang von funktionaler zu OOP Algorithmen und Datenstrukturen II 1 Imperative vs. funktionale Programmierung Plakativ lassen sich folgende Aussagen treffen: funktional: imperativ: Berechnung von Werten
MehrAufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen
Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen Aufgabenblatt 4 Aufgabe 1 1. Erläutern Sie in eigenen Worten die Begriffe Datenstruktur, Datentyp und abstrakter Datentyp. Nutzen Sie das Beispiel
MehrAlgorithmen und Datenstrukturen CS1017
Algorithmen und Datenstrukturen CS1017 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Datenstruktur, Datentyp, Datenabstraktion Abstrakter Datentyp / Datenabstraktion Kollektionen
MehrSoftware Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter
Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter Fallstudie: Arithmetische Ausdrücke AG Softech FB Informatik TU Kaiserslautern Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 33 Überblick
MehrEinführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 13. Bäume. Bäume 1
Kapitel 13 Bäume Bäume 1 Ziele Den Begriff des Baums in der Informatik kennenlernen Bäume als verkettete Datenstruktur repräsentieren können Rekursive Funktionen auf Bäumen verstehen und schreiben können
MehrEinführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 14. Bäume. Bäume 1
Kapitel 14 Bäume Bäume 1 Ziele Den Begriff des Baums in der Informatik kennenlernen Bäume als verkettete Datenstruktur repräsentieren können Rekursive Funktionen auf Bäumen verstehen und schreiben können
MehrEinführung in die Informatik: Programmierung und Software-Entwicklung, WS 17/18. Kapitel 14. Bäume. Bäume 1
Kapitel 14 Bäume Bäume 1 Ziele Den Begriff des Baums in der Informatik kennenlernen Bäume als verkettete Datenstruktur repräsentieren können Rekursive Funktionen auf Bäumen verstehen und schreiben können
MehrSoftware Entwicklung 1
Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Fallstudie: Arithmetische Ausdrücke Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 33 Überblick
MehrBäume. Martin Wirsing. Ziele. Baumknoten. Bäume - 2-dimensionale Listen. Standardimplementierungen für Bäume kennenlernen
2 Ziele Bäume Standardimplementierungen für Bäume kennenlernen Das Composite-Muster kennenlernen Martin Wirsing in Zusammenarbeit mit Matthias Hölzl, Piotr Kosiuczenko, Dirk Pattinson 06/03 3 4 Bäume -
MehrBäume. Prof. Dr. Christian Böhm. in Zusammenarbeit mit Gefei Zhang. WS 07/08
Bäume Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang http://www.dbs.ifi.lmu.de/lehre/nfinfosw WS 07/08 2 Ziele Standardimplementierungen für Bäume kennen lernen 3 Bäume (abstrakt) Bäume sind
MehrProgrammieren in Java
Programmieren in Java Vorlesung 06: Das Visitor Pattern Prof. Dr. Peter Thiemann (vertreten durch Luminous Fennell) Albert-Ludwigs-Universität Freiburg, Germany SS 2015 Peter Thiemann (Univ. Freiburg)
MehrAbschnitt 10: Datenstrukturen
Abschnitt 10: Datenstrukturen 10. Datenstrukturen 10.1Einleitung 10.2 Peer Kröger (LMU München) Einführung in die Programmierung WS 16/17 829 / 867 Einleitung Überblick 10. Datenstrukturen 10.1Einleitung
Mehr12 Abstrakte Klassen, finale Klassen und Interfaces
12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,
Mehr13. Bäume: effektives Suchen und Sortieren
13. Bäume: effektives Suchen und Sortieren Java-Beispiele: Baum.java Traverse.java TraverseTest.java Version: 25. Jan. 2016 Schwerpunkte Aufgabe und Vorteile von Bäumen Sortieren mit Bäumen Ausgabealgorithmen:
MehrAlgorithmen und Datenstrukturen II
Algorithmen und Datenstrukturen II AG Praktische Informatik Technische Fakultät Vorlesung Sommer 2009 Teil I Übergang von funktionaler zu OOP Imperative vs. funktionale Programmierung Plakativ lassen sich
Mehr13. Bäume: effektives Suchen und Sortieren
Schwerpunkte Aufgabe und Vorteile von Bäumen 13. Bäume: effektives Suchen und Sortieren Java-Beispiele: Baum.java Traverse.java TraverseTest.java Sortieren mit Bäumen Ausgabealgorithmen: - Preorder - Postorder
MehrProgrammieren in Java
Programmieren in Java Vorlesung 05: Generics Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2015 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 19 Inhalt Generics
MehrBäume. Martin Wirsing. Ziele. Implementierung von Knoten. Bäume (abstrakt) Standardimplementierungen für Bäume kennen lernen
2 Ziele Bäume Standardimplementierungen für Bäume kennen lernen Martin Wirsing in Zusammenarbeit mit Michael Barth, Philipp Meier und Gefei Zhang 02/0 4 Bäume (abstrakt) Implementierung von Knoten Bäume
MehrAlgorithmen und Datenstrukturen. Übersicht. Interfaces und Generics. InsertionSort für Punkte. InsertionSort für Punkte
Algorithmen und Datenstrukturen Wintersemester 2012/13 21. Vorlesung Übersicht Liste und InsertionSort für e für Objekte beliebiger Klassen für Objekte von Klassen, die ein(e) Nutzer(in) festlegen kann
MehrÜbergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1
Übergang von funktionaler zu OOP Algorithmen und Datenstrukturen II 1 Imperative vs. funktionale Programmierung Plakativ lassen sich folgende Aussagen treffen: funktional: imperativ: Berechnung von Werten
MehrProbeklausur zur Vorlesung
Dr. Jochen Hoenicke Alexander Nutz Probeklausur zur Vorlesung Einführung in die Informatik Sommersemester 2014 Die Klausur besteht aus diesem Deckblatt und elf Blättern mit den Aufgaben, sowie einem Blatt
MehrDie abstrakte Klasse Expression:
Die abstrakte Klasse Expression: Expression abstract evaluate() Add Neg Const 501 Die abstrakte Klasse Expression: Expression abstract evaluate() Add Neg Const Leider (zum Glück?) lässt sich nicht die
MehrALP II Dynamische Datenmengen
ALP II Dynamische Datenmengen Teil III Iteratoren Iterator-Objekt O1 O2 O3 O4 SS 2012 Prof. Dr. Margarita Esponda 22. ALP2-Vorlesung, M. Esponda 2 Motivation: Iteratoren Wir haben für die Implementierung
MehrInterfaces und Generics
Algorithmen und Datenstrukturen Wintersemester 2012/13 21. Vorlesung Interfaces und Generics Jan-Henrik Haunert Lehrstuhl für Informatik I Übersicht Liste und InsertionSort für Punkte für Objekte beliebiger
Mehr7. Verkettete Strukturen: Listen
7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Version: 4. Jan. 2016 Vergleich: Schwerpunkte Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++):
MehrSchwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen
Schwerpunkte 7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Vergleich: Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++): über Datenstrukturen
MehrII.4.5 Generische Datentypen - 1 -
1. Unterklassen und Vererbung 2. Abstrakte Klassen und Interfaces 3. Modularität und Pakete 4. Ausnahmen (Exceptions) 5. Generische Datentypen 6. Collections II.4.5 Generische Datentypen - 1 - Ähnliche
MehrSemestralklausur Informatik I - Programmierung
RHEINISCH- WESTFÄLISCHE TECHNISCHE HOCHSCHULE AACHEN LEHR- UND FORSCHUNGSGEBIET INFORMATIK II RWTH Aachen D-52056 Aachen GERMANY http://www-i2.informatik.rwth-aachen.de/lufgi2 Prof. Dr. Jürgen Giesl LuFG
MehrProgrammieren in Java
Programmieren in Java Vorlesung 11: Generic Methods Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2017 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 15 Inhalt
MehrProgrammieren in Haskell. Stefan Janssen. Strukturelle Rekursion. Universität Bielefeld AG Praktische Informatik. 10.
Universität Bielefeld AG Praktische Informatik 10. Dezember 2014 Wiederholung: Schema: f :: [σ] -> τ f [] = e 1 f (a : as) = e 2 where s = f as wobei e 1 und e 2 Ausdrücke vom Typ τ sind und e 2 die Variablen
Mehrpublic static void replace(stringbuffer b) { for (int i = 0; i < b.length(); i++) { char replacechar; switch( b.charat(i) ) {
Klausur aus Softwareentwicklung 1 Klausur am 3.2.2005 Institut für Pervasive Computing Univ.-Prof. Dr. Alois Ferscha Zuname Vorname Matr. Nr. SKZ HS Sitzplatz Punkte Note 1.Mehrfachverzweigung In einem
MehrII. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )
Technische Informatik für Ingenieure (TIfI) WS 2006/2007, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Rekursion Datenstrukturen Merge S ( split, s, merge ) Beispiel:
MehrVorlesung Datenstrukturen
Vorlesung Datenstrukturen Binärbaum Suchbaum Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 356 Datenstruktur Binärbaum Strukturrepräsentation des mathematischen Konzepts Binärbaum
MehrGeordnete Binärbäume
Geordnete Binärbäume Prof. Dr. Martin Wirsing in Zusammenarbeit mit Gilbert Beyer und Christian Kroiß http://www.pst.ifi.lmu.de/lehre/wise-09-10/infoeinf/ WS 09/10 Einführung in die Informatik: Programmierung
MehrInformatik II Übung 06. Benjamin Hepp 5 April 2017
Informatik II Übung 06 Benjamin Hepp benjamin.hepp@inf.ethz.ch 5 April 2017 Nachbesprechung U5 5 April 2017 Informatik II - Übung 01 2 Nachbesprechung U5 1. Einfach verkettete Listen Keine Probleme 2.
MehrSoftware Entwicklung 1
Software Entwicklung 1 Annette Bieniusa AG Softech FB Informatik TU Kaiserslautern Lernziele Die Definition wichtiger Begriffe im Zusammenhand mit Bäumen zu kennen. Markierte Bäumen, insbesondere Suchbäume,
MehrInstitut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke
Institut für Programmierung und Reaktive Systeme Java 7 Markus Reschke 14.10.2014 Vererbung in Java Vererbung ermöglicht es, Klassen zu spezialisieren Wiederverwendung vorhandener Klassen Kindsklasse erhält
Mehr3. Übungsbesprechung Programmkonstruktion
3. Übungsbesprechung Programmkonstruktion Karl Gmeiner karl@complang.tuwien.ac.at December 12, 2011 K Gmeiner (karl@complang.tuwien.ac.at) 3. Übungsbesprechung PK December 12, 2011 1 / 13 Rückblick und
MehrEinführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1
Kapitel 13 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch
MehrEinführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1
Kapitel 12 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch
MehrInstitut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 17. Juli 2015 Hinweise: Klausurtermine: Programmieren II Übungsklausur Programmieren I: 7. September
MehrProgrammieren in Java
Programmieren in Java Vorlesung 04: Rekursive Klassen Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2015 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 56 Inhalt
MehrII.4.2 Abstrakte Klassen und Interfaces - 1 -
1. Unterklassen und Vererbung 2. Abstrakte Klassen und Interfaces 3. Modularität und Pakete 4. Ausnahmen (Exceptions) 5. Generische Datentypen 6. Collections II.4.2 Abstrakte Klassen und Interfaces - 1
MehrKonkatenation zweier Listen mit concat
Ein Datenmodell für Listen Konkatenation zweier Listen mit concat Was ist an der Konkatenation etwas unschön? Man muss die vordere Liste einmal durchgehen, um den letzten Nachfolger (urspr. null zu erhalten,
Mehr13 Abstrakte Datentypen
13 Abstrakte Datentypen Bisher: Konkrete Datentypen Menge von Elementen Operationen auf den Elementen (Konstruktoren, Selektoren, Typprädikate) Eigenschaften abgeleitet Jetzt: Abstrakte Datentypen (ADT)
MehrAbschlussklausur Lösung. Bitte in Druckschrift leserlich ausfüllen!
Informatik für Informationsmanager II SS 2006 Universität Koblenz-Landau Institut für Informatik Prof. Dr. Steffen Staab Dr. Manfred Jackel Abschlussklausur 04.08.2006 Lösung Bitte in Druckschrift leserlich
MehrEinführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen
Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1 Kapitel 11 Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 2 Ziele Implementierungen für
MehrInstitut für Programmierung und Reaktive Systeme 10. Mai Programmieren II. 11. Übungsblatt
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 10. Mai 2013 Programmieren II 11. Übungsblatt Hinweis: Dieses Übungsblatt enthält die zweite Pflichtaufgabe.
Mehr! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -
! 1. Rekursive Algorithmen! 2. Rekursive (dynamische) Datenstrukturen II.3.2 Rekursive Datenstrukturen - 1 - Ausdruck Ausdruck Grundwert ( Typ ) Präfix-Operator Name Methodenaufruf [ Ausdruck ] ( Ausdruck
MehrProgrammieren 2 Java Überblick
Programmieren 2 Java Überblick 1 Klassen und Objekte 2 Vererbung 4 Innere Klassen 5 Exceptions 6 Funktionsbibliothek 7 Datenstrukturen und Algorithmen 8 Ein-/Ausgabe 9 Graphische Benutzeroberflächen 10
MehrÜberblick. Rekursive Methoden. Backtracking. Memorization. Einfache rekursive Datenstrukturen. Aufzählen, Untermengen, Permutationen, Bitmengen
Überblick 2 Rekursive Methoden Backtracking Memorization Bäume Aufzählen, Untermengen, Permutationen, Bitmengen Memorization Nochmals Fibonacci-Zahlen int fibo(int n) { if(n == 0) { return 0; else if(n
MehrMartin Unold INFORMATIK. Geoinformatik und Vermessung
Wiederholung So sieht ein leeres Java-Programm aus public class Programmname { public static void main (String[] args) { // Hier stehen die Anweisungen Welche Arten von Anweisungen gibt es? Anweisungen
MehrNachklausur Lösung. Bitte in Druckschrift leserlich ausfüllen!
Informatik für Informationsmanger I SS 2006 Universität Kolenz-Landau Institut für Informatik Prof. Dr. Steffen Staa Dr. Manfred Jackel Nachklausur 13.04.2007 Lösung Bitte in Druckschrift leserlich ausfüllen!
MehrALP II Dynamische Datenmengen Datenabstraktion
ALP II Dynamische Datenmengen Datenabstraktion O1 O2 O3 O4 SS 2012 Prof Dr Margarita Esponda M Esponda-Argüero 1 Dynamische Datenmengen Dynamische Datenmengen können durch verschiedene Datenstrukturen
MehrII.4.4 Exceptions - 1 -
1. Unterklassen und Vererbung 2. Abstrakte Klassen und Interfaces 3. Modularität und Pakete 4. Ausnahmen (Exceptions) 5. Generische Datentypen 6. Collections II.4.4 Exceptions - 1 - Ausnahmen (Exceptions)
MehrSoftware Entwicklung 1
Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Datenstruktur Liste Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 42 Formale Definition
MehrProgrammieren in Java -Eingangstest-
Programmieren in Java -Eingangstest- Nummer: 1. Studiengang: Informatik B.Sc. Informatik M.Sc. ESE B.Sc. ESE M.Sc. Sonstiges: Fachsemester: Bitte Fragen, die Sie nicht beantworten können unbedingt mit
MehrWiederholungsblatt Einführung in die Programmierung Lösungen
Ludwig-Maximilians-Universität München Institut für Informatik Prof. Dr. Peer Kröger Michael Fromm, Florian Richter WiSe 2018/2019 09.02.2019 Wiederholungsblatt Einführung in die Programmierung Lösungen
MehrInstitut für Programmierung und Reaktive Systeme 7. Mai Programmieren II. 11. Übungsblatt
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 7. Mai 2018 Programmieren II 11. Übungsblatt Hinweis: Auf diesem und den folgenden Übungsblättern
MehrWas bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):
Was bisher geschah deklarative Programmierung funktional: Programm: Menge von Termgleichungen, Term Auswertung: Pattern matsching, Termumformungen logisch: Programm: Menge von Regeln (Horn-Formeln), Formel
MehrII.4.4 Exceptions - 1 -
n 1. Unterklassen und Vererbung n 2. Abstrakte Klassen und Interfaces n 3. Modularität und Pakete n 4. Ausnahmen (Exceptions) n 5. Generische Datentypen n 6. Collections II.4.4 Exceptions - 1 - Ausnahmen
MehrPolymorphie. 15. Java Objektorientierung II
432 Polymorphie 15. Java Objektorientierung II Objektorientierung: Verschiedene Aspekte 433 Daten Typhierarchie Objekte Code Vererbung Unter- und Oberklassen Methoden überschreiben Unterklassen zuweisen
MehrDie Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten.
4.5.5 Rekursive Typen Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten. datatype IntList = Nil Cons o f ( i n t IntList ) ; Damit
MehrVorlesung Objektorientierte Programmierung Klausur
Prof. Dr. Stefan Brass 16. Februar 2007 Dipl.-Inform. Annett Thüring Institut für Informatik MLU Halle-Wittenberg Vorlesung Objektorientierte Programmierung Klausur Name: Matrikelnummer: Studiengang: Aufgabe
MehrPolymorphie. 15. Java Objektorientierung II
446 Polymorphie 15. Java Objektorientierung II Objektorientierung: Verschiedene Aspekte 447 Daten Typhierarchie Objekte Code Vererbung Unter- und Oberklassen Methoden überschreiben Unterklassen zuweisen
Mehr13 Berechenbarkeit und Aufwandsabschätzung
13 Berechenbarkeit und Aufwandsabschätzung 13.1 Berechenbarkeit Frage: Gibt es für jede Funktion, die mathematisch spezifiziert werden kann, ein Programm, das diese Funktion berechnet? Antwort: Nein! [Turing
MehrInformatik II. Übungsstunde 6. Distributed Systems Group, ETH Zürich
Informatik II Übungsstunde 6 simon.mayer@inf.ethz.ch Distributed Systems Group, ETH Zürich Ablauf Besprechung der Vorlesung Uebungsbezogene Themen: Statisches & Dynamisches Type Checking Zeit zum Programmieren...
MehrEINFÜHRUNG IN DIE PROGRAMMIERUNG
EINFÜHRUNG IN DIE PROGRAMMIERUNG OBJEKTORIENTIERTES PROGRAMMIEREN Tobias Witt 25.03.2014 09:00-10:30 Täglich Übungen zur Vertiefung Laptop hier nicht erforderlich Linux, OS X Freitag: http://hhu-fscs.de/linux-install-party/
Mehr11. Elementare Datenstrukturen
11. Elementare Datenstrukturen Definition 11.1: Eine dynamische Menge ist gegeben durch eine oder mehrer Mengen von Objekten sowie Operationen auf diesen Mengen und den Objekten der Mengen. Dynamische
MehrKapitel 12: Induktive
Kapitel 12: Induktive Datenstrukturen Felix Freiling Lehrstuhl für Praktische Informatik 1 Universität Mannheim Vorlesung Praktische Informatik I im Herbstsemester 2009 Folien nach einer Vorlage von H.-Peter
MehrÜbungsblatt 10. Thema: Abstrakte Datentypen, Datenstrukturen in Java
Informatik I WS 05/06 Prof. Dr. W. May Dipl.-Inform. Oliver Fritzen Dipl.-Inform. Christian Kubczak Übungsblatt 10 Ausgegeben am: Abgabe bis: 13.01.2006 24.1.2006 (Theorie) 27.1.2006 (Praktisch) Thema:
Mehr7. Dynamische Datenstrukturen Bäume. Informatik II für Verkehrsingenieure
7. Dynamische Datenstrukturen Bäume Informatik II für Verkehrsingenieure Übersicht dynamische Datenstrukturen Wozu? Oft weiß man nicht von Beginn an, wieviele Elemente in einer Datenstruktur untergebracht
MehrEINFÜHRUNG IN DIE PROGRAMMIERUNG
EINFÜHRUNG IN DIE PROGRAMMIERUNG OBJEKTORIENTIERTES PROGRAMMIEREN Tobias Witt 25.03.2014 10:30-12:00 Täglich Übungen zur Vertiefung Laptop hier nicht erforderlich Aber in den Übungen! Linux, OS X http://hhu-fscs.de/linux-install-party/
MehrProgrammierung für Mathematik HS11
software evolution & architecture lab Programmierung für Mathematik HS11 Übung 8 1 Aufgabe: Codeverständnis (Repetition) 1.1 Lernziele 1. Code verstehen können. 2. Fehler im Code finden und korrigieren
MehrIII.1 Prinzipien der funktionalen Programmierung - 1 -
1. Prinzipien der funktionalen Programmierung 2. Deklarationen 3. Ausdrücke 4. Muster (Patterns) 5. Typen und Datenstrukturen 6. Funktionale Programmiertechniken III.1 Prinzipien der funktionalen Programmierung
MehrIn C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht:
Typprüfung (Compiler / Laufzeit) In C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht: 1) Der Compiler prüft
MehrWorkshop Einführung in die Sprache Haskell
Workshop Einführung in die Sprache Haskell Nils Rexin, Marcellus Siegburg und Alexander Bau Fakultät für Informatik, Mathematik und Naturwissenschaften Hochschule für Technik, Wirtschaft und Kultur Leipzig
MehrWie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?
Generic Programming without Generics from JAVA5 Motivation Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen? Ein Bespiel: sie haben bereits eine Klasse zur Multiplikation von Matrizen
Mehr6. Verkettete Strukturen: Listen
6. Verkettete Strukturen: Listen 5 K. Bothe, Inst. f ür Inf., HU Berlin, PI, WS 004/05, III.6 Verkettete Strukturen: Listen 53 Verkettete Listen : Aufgabe Vergleich: Arrays - verkettete Listen Listenarten
MehrLösungshinweise/-vorschläge zum Übungsblatt 8: Software-Entwicklung 1 (WS 2017/18)
Dr. Annette Bieniusa Mathias Weber, M. Sc. Peter Zeller, M. Sc. TU Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungshinweise/-vorschläge zum Übungsblatt 8: Software-Entwicklung 1 (WS 2017/18)
MehrProgrammierung und Angewandte Mathematik
Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ablauf Was sind Funktionen/Methoden
MehrKlausur Einführung in die Programmierung
Ludwig-Maximilians-Universität München Institut für Informatik Prof. Dr. Peer Kröger Michael Fromm, Florian Richter WiSe 2018/2019 09.02.2019 Klausur Einführung in die Programmierung Vorname: Nachname:
MehrKlausur: Java (Liste P)
Klausur: Java (Liste P) SS05 Erlaubte Hilfsmittel: Gebundene! Unterlagen (Skript mit Anmerkungen, eigene Mitschrift) und maximal ein Buch. Bitte keine losen Blätter. Lösung ist auf den Klausurbögen anzufertigen.
Mehr5.14 Generics. Xiaoyi Jiang Informatik I Grundlagen der Programmierung
Motivation für Generics: Containertypen speichern eine Anzahl von Elementen anderer Typen Wie definiert man die Containerklasse ArrayList? In der Definition könnte man als Elementtyp Object angeben maximale
MehrAlgorithmen und Datenstrukturen CS1017
Algorithmen und Datenstrukturen CS1017 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Datenstrukturen I: Lineare Sequenzen / Listen Datenstrukturen für Sequenzen Sequenzen in der Java-API:
MehrAlgorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B3.1 Einführung. B3.2 Verkettete Liste. B3.3 Bäume
Algorithmen und Datenstrukturen 22. März 2018 B3. Verkettete Listen und Bäume Algorithmen und Datenstrukturen B3. Verkettete Listen und Bäume B3.1 Einführung Marcel Lüthi and Gabriele Röger B3.2 Verkettete
Mehr4.4.1 Implementierung vollständiger Bäume mit Feldern. Reguläre Struktur: Nachfolger des Knoten i sind die Knoten 2*i und 2*i+1.
4.4 Implementierung von Bäumen 4.4.1 Implementierung vollständiger Bäume mit Feldern 1 3 2 7 9 3 4 8 5 17 12 10 6 7 8 13 11 18 9 10 Reguläre Struktur: Nachfolger des Knoten i sind die Knoten 2*i und 2*i+1.
MehrProf. Dr. Uwe Schmidt. 30. Januar 2017
Prof. Dr. Uwe Schmidt 30. Januar 2017 Aufgaben zur Klausur Algorithmen und Datenstrukturen im WS 2016/17 ( B Inf, B TInf, B MInf, B CGT, B WInf, B Ecom, B ITE) Zeit: 75 Minuten erlaubte Hilfsmittel: keine
Mehr1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen
1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen II.3.2 Rekursive Datenstrukturen - 1 - Grundwert ( Typ ) Präfix-Operator Name Methodenaufruf [ ] ( ) Infix-Operator Methodenaufruf new
MehrProgrammieren in Java
Programmieren in Java Vorlesung 09: Generics and Comparison Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2017 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 /
MehrBäume. Listen und Bäume, Graphen und Bäume, elementare Eigenschaften von Binärbäumen, Implementierung, Generische Baumdurchläufe
Bäume Listen und Bäume, Graphen und Bäume, elementare Eigenschaften von Binärbäumen, Implementierung, Generische Baumdurchläufe S. Staab, Informatik für IM II; Folien nach D. Saupe, sowie W. Küchlin, A.
Mehr! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -
! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete II.4.2 Abstrakte Klassen und Interfaces - 1 - Ähnliche Programmteile public class Bruchelement { Bruch wert;
Mehr