Raphael Fischer fischrap@student.ethz.ch 27.03.2014 Informatik II - Übung 05 Raphael Fischer fischrap@student.ethz.ch 27.03.2014.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
Klassen - Verkettete Liste -
Sortieren I - Bubblesort -
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Sortieren mit Binären Bäumen
Java: Dynamische Datentypen
Listen Richard Göbel.
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (06 - Anwendungen von Stapeln und Schlangen) Prof. Th. Ottmann.
Anwendungen von Stapeln und Schlangen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.

EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
6 Folgen (Teil II - Datenstrukturen und Algorithmen)
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
Modulare Programmierung
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Einfach verkettete Listen
Einfach verkettete Listen (OOP)
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Rekursive Funktionen (Fakultät)
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Einführung in die Programmierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Efficient Alias Set Analysis Using SSA Form Proseminar Programmanalyse WS 11/12 André Hunke.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmiersprache C 4
Rekursion Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren.
1.6 Die Datenstruktur Stapel Ein Stapel (Stack) ist ein Sonderfall einer Liste. Die Elemente werden nach dem Prinzip LIFO (Last In First Out) angefügt.
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger.
Sortieralgorithmen Greedy Sortieren: Sortieren durch Auswahl, Einfügen und Austauschen Divide-and-Conquer-Sortieren: Quicksort und merge sort Foliensatz.
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003 Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger,
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
1 // Verkettete Liste 2 // demonstriert verkettete Listen und // Rekursion // (Einfügen am "Fuß") // #include struct Liste { int Element; Liste *weiter;
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Generisches Programmieren.
Tutorium Software-Engineering SS14 Florian Manghofer.
Strukturen (Eigenschaften) Strukturen dienen zur Zusammenfassung mehrerer Komponenten verschiedener Typen zu einer Einheit, die dann mit gemeinsamen Namen.
Informatik II – Übung 4 Gruppe 3
Praktische Informatik 1
Rekursion – Speicherverwaltung
Gruppe 2 Carina Fuss Informatik II – Übung 4 Gruppe 2 Carina Fuss Carina Fuss
Raphael Fischer Informatik II - Übung 04 Raphael Fischer
Raphael Fischer Informatik II - Übung 07 Raphael Fischer
Raphael Fischer Informatik II - Übung 03 Raphael Fischer
Raphael Fischer Informatik II - Übung 06 Raphael Fischer
Raphael Fischer Informatik II - Übung 08 Raphael Fischer
Grundkurs Informatik mit Java
1. Die rekursive Datenstruktur Liste 1.3 Rekursive Funktionen
Raphael Fischer Informatik II - Übung 10 Raphael Fischer
1. Die rekursive Datenstruktur Liste 1.6 Die Datenstruktur Stapel
Informatik II – Übung 4 Gruppe 3
 Präsentation transkript:

Raphael Fischer fischrap@student.ethz.ch 27.03.2014 Informatik II - Übung 05 Raphael Fischer fischrap@student.ethz.ch 27.03.2014

Besprechung Übungsblatt 4 Raphael Fischer 29.11.2018

L4.A1 – Stack Zwei Attribute: buffer und size Vergrößern der Kapazität durch grow() Bedingung für grow(): in push(): size() == capacity() Java-Bibliotheksfunktionen möglich: int[] Arrays.copyOf(int[] original, int newLength) Raphael Fischer 29.11.2018

L4.A2 – Ackermann-Funktion Rekursive Definition der Ackermann-Funktion: Raphael Fischer 29.11.2018

L4.A2 – Ackermann-Funktion Raphael Fischer 29.11.2018

L4.A2.b – Pseudocode (Beispiel) n m L4.A2.b – Pseudocode (Beispiel) while(stack.size() > 1){ .... push n on stack push m on stack As long as the stack's size is greater than 1 pop the uppermost element from stack to m [m] pop the uppermost element from stack to n [n] if n = 0 then push m+1 on stack [A(0,m)=m+1] elseif m = 0 then push n-1 on stack; push 1 on stack [A(n,0)=A(n-1,1)] else push n-1 on stack push m-1 on stack [A(n,m)=A(n-1,A(n,m-1))] the uppermost element from the stack is the result “Funktionsaufruf” if n == 0  result = m+1 else if m == 0  push(n-1), push(1) else push(n-1), push(n), push(m-1) Raphael Fischer 29.11.2018

L4.A3 – Bytecode Quellcode-Bytecode-Zuordnung klar? Parameterreihenfolge / Rückgabe klar? return A(n-1, A(n, m-1)) 21: aload 0 22: iload 1 23: iconst 1 24: isub 25: aload 0 26: iload 1 27: iload 2 28: iconst 1 29: isub 30: invokevirtual 33: invokevirtual 36: ireturn Raphael Fischer 29.11.2018

Call by value vs. Call by reference Aufgabe 1 Raphael Fischer 29.11.2018

Lösung // swap1: Geht nicht void swap2(int a, int b) { //Kein Effekt } void swap1(int & a, int & b) { int t = a; a = b; b = a; } void swap2(int a, int b) { } // swap1: Geht nicht void swap2(int a, int b) { //Kein Effekt } ((Vorname Nachname)) 29.11.2018

Lösung void swapFoo1(Foo & a, Foo & b) { Foo t = a; a = b; b = t; } void swapFoo2(Foo a, Foo b) { //Swap x-Values of a and b: int t = a.x; a.x = b.x; b.x = t; //Swap y-Values of a and b: t = a.y; a.y = b.y; b.y = t; void swapFoo1(Foo a, Foo b) { //Swap x-Values of a and b: int t = a.x; a.x = b.x; b.x = t; //Swap y-Values of a and b: t = a.y; a.y = b.y; b.y = t; } void swapFoo2(Foo a, Foo b) { //Kein Effekt } ((Vorname Nachname)) 29.11.2018

Call by reference / by value: C++ vs Java C++ und Java: swap(int a, int b) Funktioniert nicht! Nur C++: swap(int& a, int& b) Funktioniert swap(int a, int b): int a = 1; int b = 2; swap(int& a, int& b): a: b: int a = 1; int b = 2; int a = 1; int b = 2; Raphael Fischer 29.11.2018

Call by reference / by value: C++ vs Java C++ Style: Objekte sind genau wie primitive Typen: SwapFoo1 funktioniert SwapFoo2 funktioniert nicht! Java Style: Die Referenzen auf Objekte werden kopiert (Call- by-value) Nur SwapFoo2-Style funktioniert swapFoo2(Foo a, Foo b): Foo a: int x = 1; int y = 2; Foo b: int x = 2; int y = 1; Foo a: int x = 1; int y = 2; Foo b: int x = 2; int y = 1; swapFoo(Foo a, Foo b): Foo a: Foo b: Foo a: int x = 1; int y = 2; Foo b: int x = 2; int y = 1; Foo a: Foo b: Raphael Fischer 29.11.2018

Listen Raphael Fischer 29.11.2018

Listen public class List { public int value; public List next; public List(int value, List next) { this.value = value; this.next = next; } myList value 76 next value 15 next value 22 next value 3 next value 32 next null Raphael Fischer 29.11.2018

Aufgabe 2 - Lösung Liste: Array: Stack: List: Entfernen eines Wertes ist einfach («aushängen») Einfügen eines Wertes ist auch einfach Ausgeben aller Werte ist einfach (den Next-Pointern folgen) Array: Es ist schnell, den n-ten Wert zu lesen (a[n];) Stack: Hinzufügen neuer Werte mit push N-mal pop List: Neue Elemente/Aufgaben hinten anhängen Zu bearbeitende Elemente vorne lesen und entfernen Raphael Fischer 29.11.2018

Übungsblatt 5 Hilfsklasse Lists mit vielen static Funktionen, die Aufgabe 1: Listen nicht verändern Aufgabe 2: Listen verändern Aufgabe 3: Listen sortieren Raphael Fischer 29.11.2018

Beispiel: toString() 76,15,22,3,34,null myList null public static String toString(List list) { if (list == null) return "null"; return list.value + "," + toString(list.next); } myList value 76 next value 15 next value 22 next value 3 next value 32 next null 76,15,22,3,34,null u5a1.Lists.toString(myList) Raphael Fischer 29.11.2018

Aufgaben Verwendet nirgends Schleifen! Nur Rekursion und andere Hilfsfunktionen Raphael Fischer 29.11.2018

Ü5.A1: Funktionen, die Listen nicht verändern String toString(List list) List add(List list, int value) int size(List list) int sum(List list) List sublist(List list, int index) throws ... List last(List list) int valueAt(List list, int index) throws ... int index(List list, int value) throws ... Bereits implementiert Aufgabe 1 Wieso keine Veränderung? Raphael Fischer 29.11.2018

Ü5.A2: Funktionen, die Listen verändern void append(List list, int value) throws ... void concat(List head, List tail) throws ... void insertAt(List list, int i, int value) throws ... void insertAt(List list, int i, List nl) throws ... List remove(List list, int index) throws ... Aufgabe 2 Warum?

Ü5. A3 Listen sortieren List insertSorted(List list, int value) throws ... List sort(List list) throws ... Aufgabe 3 InsertSorted: Füge Wert in bereits sortierte Liste ein sort: Nehme ein Element nach dem anderen und füge es in neue Liste ein Ihr dürft Schleife verwenden Challenge: Es gibt aber Lösung mit 2-3 Zeilen! (Rekursiv) Raphael Fischer 29.11.2018

Ü5.A4 – Dynamisch wachsender Stack mit verketteten Listen Neuimplementieren der Stack-Methoden mit Hilfe der Liste Raphael Fischer 29.11.2018

…viel Spass! Raphael Fischer 29.11.2018