Informatik II Übung 5

Ähnliche Dokumente
Informatik II Übung 5 Gruppe 4

Informatik II (D-ITET) Übungsstunde 5,

Informatik II Übung 5. Pascal Schärli

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Vorlesung Programmieren

Informatik II Übung 4. Pascal Schärli

Informatik II. Woche 10, Giuseppe Accaputo

Advanced Programming in C

Software Entwicklung 1

Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II a[0] a[1] a[2] a[3] a[n 1]

Informatik II Übung 6

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

ALP II Dynamische Datenmengen Datenabstraktion

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Algorithmen und Datenstrukturen

Einstieg in die Informatik mit Java

Fallstudie: Online-Statistik

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

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

Betriebssysteme, Rechnernetze und verteilte Systeme 1. Crashkurs C (2)

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

Methoden und Wrapperklassen

Probeklausur Name: (c)

Arrays. Einleitung. Deklarieren einer Array Variablen

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel

Konstruktor. public Rational(int i) { Zaehler = i; Nenner = 1; }

Informatik II Übung 2

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Programmieren in Java

Stacks, Queues & Bags. Datenstrukturen. Pushdown/Popup Stack. Ferd van Odenhoven. 19. September 2012

ADT: Verkettete Listen

Informatik II Übung 8

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Praxis der Programmierung

ADT: Verkettete Listen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 17/18. Kapitel 14. Bäume. Bäume 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 14. Bäume. Bäume 1

16. Dynamische Datenstrukturen

Listen. M. Jakob. Gymnasium Pegnitz. 20. September Hinführung: Wartenschlangen. Grundprinzip von Listen Rekursion

Übung zur Vorlesung Programmierung

Informatik II Übung 3

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Übung Algorithmen und Datenstrukturen

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

Java Referenzdatentypen genauer betrachtet

1. Die rekursive Datenstruktur Liste

13. Dynamische Datenstrukturen

Strukturiertes Programmieren

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Teil 8: Dynamische Speicherverwaltung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden

Einleitung Grundlagen Erweiterte Grundlagen Zusammenfassung Literatur. C: Funktionen. Philip Gawehn

Transkript:

Informatik II Übung 5 Gruppe 2 Carina Fuss cfuss@student.ethz.ch 28.3.2018 Carina Fuss 28.3.2018 1

Übung 5 Administratives/Tipps zu Eclipse Nachbesprechung Übung 4 kurze Demo zu Stacks Java Pakete Call by Reference/Call by Value Vorbesprechung Übung 5 Listen: Funktionen, Sortieren von Listen, Stack mit Liste Carina Fuss 28.3.2018 2

Administratives Bonus-Übung ist online! bis 15. April falls unklar ist, was bestimmte Funktionen machen: in der API nachschlagen https://docs.oracle.com/javase/8/docs/api/ Carina Fuss 28.3.2018 3

Nachbesprechung Übung 4 Carina Fuss 28.3.2018 4

Übung 4 Aufgabe 1 Stack Konstruktor Carina Fuss 28.3.2018 5

Übung 4 Aufgabe 1 Stack tostring Carina Fuss 28.3.2018 6

Übung 4 Aufgabe 1 Stack grow Carina Fuss 28.3.2018 7

Übung 4 Aufgabe 1 Stack Carina Fuss 28.3.2018 8

Übung 4 Aufgabe 1 Stack Carina Fuss 28.3.2018 9

Übung 4 Aufgabe 2 Ackermann-Funktion Implementierung wie Animation mit Stack A(0, m) = m+1 A(n, 0) = A(n-1, 1) A(n, m) = A(n-1, A(n, m-1)) Carina Fuss 28.3.2018 10

Übung 4 Aufgabe 3 Bytecode if(n == 0) return m + 1 if(m == 0) Carina Fuss 28.3.2018 11

Übung 4 Aufgabe 3 Bytecode return A(n-1, 1) return A(n-1, A(n, m-1)) Carina Fuss 28.3.2018 12

Übung 4 Aufgabe 3 Bytecode Feststellung: Bytecode der rekursiven Implementierung gleicht der iterativen Implementierung Grund: Java arbeitet mit Stack und setzt alle Methoden damit um Werte auf dem Javastack entsprechen den Werten von unserem manuell verwalteten Stack aus der iterativen Implementierung Carina Fuss 28.3.2018 13

Call Stack Beispiel: Stack Stackoverflow Stack Trace Demo Carina Fuss 28.3.2018 14

Java Hintergrundinformationen Carina Fuss 28.3.2018 15

Pakete Funktionen aus Klassen benutzen, die in anderen Paketen sind? Klassen importieren import package1.class1; Bsp.: IterativeAckermann braucht Funktionen aus der Klasse Stack braucht ihr in Übung 5 Carina Fuss 28.3.2018 16

Datentypen Primitive Typen z.b. byte, int, float, char Referenz-Typen z.b. Arrays, Strings, Klassen Carina Fuss 28.3.2018 17

Call by Reference Call by Value Call by value an Funktion übergebenen Daten werden kopiert keine Verbindung mehr zwischen den Daten beim Aufrufer und den Daten in der Funktion Call by reference Anstatt Daten zu kopieren werden Referenzen auf die Daten übergeben Methodenaufrufe an einem so übergebenen Objekt arbeiten also auf demselben Objekt, das auch außerhalb sichtbar ist Carina Fuss 28.3.2018 18

Call by Reference Call by Value C++: beides möglich Call by value: Daten werden kopiert und übergeben //C++ void swap(a, b); Call by reference: Referenz auf die Daten wird übergeben //C++ void swap(&a, &b); Java ist IMMER call by value!! Bei Übergabe von einem primitiven Typ wird der Wert in eine lokale Variable kopiert. Und bei Übergabe von einem Referenz-Typ wird der Adressenwert in eine lokale Variable kopiert! Carina Fuss 28.3.2018 19

Call by Reference Call by Value Modifizieren ist möglich, Vertauschen aber nicht! Hauptprogramm erzeugt zwei Objekte main(){ } mypoint1 mypoint2 int x1; int y1; int x2; int y2; Hauptprogramm ruft swap(mypoint1, mypoint2); innerhalb Swap heisst das: swap(point p1, Point p2){ } mypoint1 p1 mypoint2 p2 int x1; int y1; int x2; int y2; Bemerkung: Modifizieren von Attributen ist möglich: p1.x1 = 5; aber im Hauptprogramm nach swap(...) mypoint1 p1 mypoint2 p2 int x1; int y1; int x2; int y2; Beachte: Die Referenzen p1 und p2 existieren eigentlich nicht mehr Carina Fuss 28.3.2018 20

int a = 5; Tier fido = new Tier( fido,m); Tier rex = new Hund( rex,m, braun); Tier (name, String, "fido") (geschlecht, char, 'm') Hund Tier (name, String, "rex") (geschlecht, char, 'm') (fellfarbe, String, "braun") STACK (rex, Tier, ) (fido, Tier, ) (a, int, 5) HEAP Carina Fuss 28.3.2018 21

foobar(rex, a); void foobar(tier t, int p) { t.name = "#@!&"; p = 42; t = new Tier( xena,w); } STACK Tier (name, String, "fido") (geschlecht, char, 'm') Hund Tier (name, String, "#@!&") "rex") (geschlecht, char, 'm') (fellfarbe, String, "braun") Tier (name, String, "xena") (geschlecht, char, 'w') (p, int, 42) 5) (t, Tier, ) (rex, Tier, ) (fido, Tier, ) (a, int, 5) HEAP Carina Fuss 28.3.2018 22

Vorbesprechung Übung 5 Carina Fuss 28.3.2018 23

Linked Lists verkettete Listen Dynamische Grösse keine Initialisierung (wie z. B. bei Arrays) mylist value 76 value 15 value 22 value 3 value 32 next next null next null next null next null null Durch die Liste iterieren? Woher weiss man, wann man beim letzten Element angekommen ist? Carina Fuss 28.3.2018 24

Linked Lists verkettete Listen Rekursive Implementierung von Methoden Idee: Eine Liste besteht immer aus einem Element und einer nachfolgenden Teil-Liste. Abbruchbedingung: keine nachfolgende Liste mehr vorhanden (letztes Element) Abbruchbedingung: arbeitet mit StringBuffer, da der String oft modifiziert werden muss u5a1.lists.tostring(mylist) rekursiver Aufruf mit restlicher Liste 76,15,22,3,34,null Carina Fuss 28.3.2018 25

Übung 5 Aufgabe 1 Methoden zur Verwendung von Listen (rekursiv implementieren!): add() size() sum() last() sublist() (Index fängt bei 0 an!) valueat() index() (Gesucht ist der Index des ersten Elements mit gegebenem Wert.) Carina Fuss 28.3.2018 26

Übung 5 Aufgabe 2 Methoden zur Veränderung von Listen: append() (Ein neues Element wird an das Ende einer Liste gehängt.) nicht rekursiv concat() (Eine Liste (Tail) wird an das Ende einer Liste (Head) gehängt.) nicht rekursiv insertat() (Füge ein Element/eine Liste an einem bestimmten Index ein 2 Mal implementieren! List.next Referenzen in sinnvoller Reihenfolge neu setzen.) rekursiv remove() (Entferne das Element an einem bestimmten Index.) rekursiv Methoden aus Lists verwenden! Carina Fuss 28.3.2018 27

Übung 5 Aufgabe 3 Methoden zum Sortieren von Listen insertsorted() (Füge ein Element in eine bereits (aufsteigend) sortierte Liste ein.) rekursiv sort() (Sortiere eine Liste aufsteigend.) Verwende insertsorted(). Carina Fuss 28.3.2018 28

Übung 5 Aufgabe 4 Stack mit verketteter Liste: push() (Erstes Element der Liste ist oberstes Element auf Stack.) pop() (Daran denken, die Referenzen auf next neu zu setzen.) peek() empty() size() Methoden aus Aufgabe 1 verwenden! Muss nicht kopiert werden, da er keine Kapazitätsgrenze hat, die er erreichen kann (wie der Stack aus Übung 4). Carina Fuss 28.3.2018 29

Fragen? Carina Fuss 28.3.2018 30