Informatik II – Übung 4 Gruppe 3

Slides:



Advertisements
Ähnliche Präsentationen
Einführung in die Programmiersprache C/C++
Advertisements

der Universität Oldenburg
der Universität Oldenburg
Objektorientierte Programmierung
der Universität Oldenburg
Ein- und Ausgabe von Dateien
Sortieren I - Bubblesort -
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
der Universität Oldenburg
FH-Hof Einbindung von JavaScript Anweisungen
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (06 - Anwendungen von Stapeln und Schlangen) Prof. Th. Ottmann.
Programmieren mit JAVA
Programmieren mit JAVA
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Grundlagen der Informatik 4 Lehrstuhl für Betriebssysteme 1 Wie werden Funktionen realisiert? Beispiel: int maximum(int x, int y) { int j = x; if (y >
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.
Dynamische Datentypen
Reinhard Stumptner Seminar Softwareentwicklung Dynamisches Laden und Binden in Java.
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Mittwoch Informatik II, 1. Teil
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
A Workshop About this chapter General description Units Time Schedule
Einführung in die Programmierung mit Java
Java-Kurs Übung Besprechung der Hausaufgabe
Die STL. Schreiben und Lesen von Dateien  Einbinden von  Lesen und Schreiben über stream-Objekte Streams führen Transformationen zwischen Programmobjekten.
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.
C++ FÜR cOMPUTERSPIELENTWICKLER
Ein Spiel mit der SDL – Teil 2. Ein Spiel mit der SDL TSingleton CTimerCFramework CGame CPlayer CShot CAsteroids CSprite.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
1 Arrays und Schleifen Özgü & Tim. 2 Inhaltsverzeichnis Arrays Was ist ein Array? Bauanleitung Beispiel Matrix Fehler Schleifen Wofür Schleifen? While-Schleife.
Schwarz, Lubkoll : Javakurs LE Organisatorisches ● Wer sind wir? ● Was machen wir hier? ● Was haben wir davon? ● Was habt ihr davon?
Objektorientiertes Modellieren und Programmieren mit Java
Informatik II – Übung 4 Gruppe 3
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
Aufgaben zu Rückgabewerten
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Grundkurs Informatik 11-13
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 03 Raphael Fischer
Raphael Fischer Informatik II - Übung 06 Raphael Fischer
Raphael Fischer Informatik II - Übung 05 Raphael Fischer
Von Cem, Maurice und lars
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Polymorphie Überladen
1. Die rekursive Datenstruktur Liste 1.3 Rekursive Funktionen
Datenstrukturen und Softwareentwicklung
Implementieren von Klassen
Felder in der Informatik
3. Die Datenstruktur Graph 3.3 Durchlaufen von Graphen
1. Die rekursive Datenstruktur Liste 1.6 Die Datenstruktur Stapel
2. Die rekursive Datenstruktur Baum 2.3 Baum und Kompositum
 Präsentation transkript:

Informatik II – Übung 4 Gruppe 3 Julia Gygax jgygax@student.ethz.ch Julia Gygax 03.09.2019

Nachbesprechung Übung 2 Julia Gygax 03.09.2019

Aufgabe 1 - Programmverifikation Schleifeninvariante z+u*j–i*j=0 Anfang: z = 0 und u*j = i*j Nach einem Schleifendurchgang: z = z + j und u = u – 1 -> (z+j) + (u-1)*j – i*j= z + j + u*j – j - i*j = 0 Nach n Schleifendurchgängen: z = n*j und u = i - n Am Ende (nach u Schleifendurchgängen): z = u*j und u = i – u = 0 -> u*j + 0*j – i*j = 0 Julia Gygax 03.09.2019

Aufgabe 1 - Programmverifikation Gilt die Schleifeninvariante noch? Ist das Programm korrekt? Julia Gygax 03.09.2019

Terminierung BSP: Collatz-Vermutung: Terminierung nicht bei allen Programmen ersichtlich Julia Gygax 03.09.2019

Aufgabe 2 – String und StringBuffer Inspiration bei encrypt() Char entspricht dem numerischen Wert aus dem ASCII-Zeichensatz Main-Funktion misst Ausführungszeit Julia Gygax 03.09.2019

Aufgabe 3 - Syntaxdiagramm ∼ (X1 OR ∼ X2)  (X2) OR (∼X1 OR X2)  (X1 OR X2) AND (∼X1)  (X1) AND (∼X1 OR ∼X2) AND (X2)  Julia Gygax 03.09.2019

Aufgabe 4 – Syntaxdiagramm für Bäume Unterbäume Knoten – Julia Gygax 03.09.2019

Aufgabe 5 – Syntaxchecker für Wurzelbäume Was wir brauchen: -> Funktionen für Bäume, Unterbäume und Knoten -> Hilfsfunktion um das nächste Zeichen vorherzusehen Julia Gygax 03.09.2019

Aufgabe 5 – Syntaxchecker Bäume Leerer Baum? -> nichts mehr zu prüfen 1.) ein Knoten und evtl. 2.) eine Klammer auf 3.) ein Unterbaum 4.) eine Klammer zu Nach jedem Zeichen den offset erhöhen! Julia Gygax 03.09.2019

Aufgabe 5 – Syntaxchecker Unterbaum Ein Unterbaum ist ein Baum gefolgt von beliebig vielen Bäumen getrennt durch Kommas Julia Gygax 03.09.2019

Aufgabe 5 – Syntaxchecker Falls kein Knoten mehr kommt -> Exception Knoten Gültige Knoten sind Grossbuchstaben Ansonsten -> Exception Julia Gygax 03.09.2019

Aufgabe 5 - Syntaxchecker checkNext Liegt der offset im String? Gibt true zurück, wenn an der Stelle offset im Baum das Zeichen c steht Julia Gygax 03.09.2019

Aufgabe 5 - Syntaxchecker Parser Nach dem parsen sollte der offset gleich sein wie die Länge de Strings Julia Gygax 03.09.2019

Theorie Julia Gygax 03.09.2019

Klassenmethoden und Instanzmethoden static Für die Klasse als ganzes Lösen allgemeine Aufgaben Zugriff nur auf klassenbezogene Variablen und andere Klassenmethoden (static) Zugriff via Klassenname Von allen Instanzen einer Klasse geteilt Main-Funktion ist static Instanzmethoden Für spezifische Objekte Zugriff auf this (und andere Instanz- und Klassenmethoden und -variablen) Julia Gygax 03.09.2019

Stack Funktioniert wie ein Stapel -> LIFO-Prinzip (Last in, first out) Pointer zeigt auf das nächste freie Element Vielgenutzte Datenstruktur Z. B. Call-Stack Julia Gygax 03.09.2019

Call Stack Jeder Funkstionsaufruf erhält eigenen “Kontext” Eigene Parameter (Funktionsargumente) Lokale Variablen Rücksprungadresse und Rückgabewerte Je nach Implementierung (verfügbare “Features”) sehr komplex Beispiel: siehe Demo Impedance.add Vereinfachtes Beispiel Julia Gygax 03.09.2019

Call Stack Beispiel Impedance z3 = Impedance.add("z3", z1, z2); double real = z1.getReal() + z2.getReal(); getReal double real double imag String name = “z3” Impedance z1 = #1 Impedance z2 = #2 add local Variables function arguments Julia Gygax 03.09.2019 Animation von Leyna Sadamori

Call Stack Beispiel Impedance z3 = Impedance.add("z3", z1, z2); double real = z1.getReal() + z2.getReal(); double imag = z1.getImag() + z2.getImag(); getImag double real double imag String name = “z3” Impedance z1 = #1 Impedance z2 = #2 add local Variables function arguments Julia Gygax 03.09.2019 Animation von Leyna Sadamori

Call Stack Beispiel Impedance z3 = Impedance.add("z3", z1, z2); double real = z1.getReal() + z2.getReal(); double imag = z1.getImag() + z2.getImag(); return new Impedance(name, real, imag); String name = “z3” double real = 50.0 double imag = 20.0 Impedance double real double imag String name = “z3” Impedance z1 = #1 Impedance z2 = #2 add local Variables function arguments Julia Gygax 03.09.2019 Animation von Leyna Sadamori

Bytecode In der Konsole navigieren: cd change directory cd.. eine Ebene zurück dir listet die Dateien auf (Windows) ls listet die Dateien auf (Linux) Kompilieren javac myPackage/*.java (kompiliert alles im Package myPackage) Ausführen java myPackage.myCode Disassemble javap -c myPackage.myCode Julia Gygax 03.09.2019

Bytecode iconst_0 lade int mit Wert 0 auf Stack istore_3 speichere den Wert in res iload_3 lade res auf stack iload_2 lade a auf stack iadd a + res usw. Index Variabel 1 a 2 b 3 res Julia Gygax 03.09.2019

Vorbesprechung Übung 3 Julia Gygax 03.09.2019

Aufgabenübersicht A1 – Ein wachsender Stack A2 – Ackermann-Funktion A3 – Stackimplementierung der Ackermann-Funktion A4 – Java-Bytecode Julia Gygax 03.09.2019

Aufgabe 1 – Ein wachsender Stack A1.1: Konstruktor implementieren - muss die Klassenvariablen initialisieren - d.h. für Objekte: dieses Objekt erzeugen - size ist die aktuelle Grösse des Stacks (und nicht die Kapazität) A1.2: toString() implementieren - StringBuffer verwenden -> sb.append(String str) verwenden (für StringBuffer sb) - Integer zu String mit Integer.toString(int i) - StringBuffer zu String mit sb.toString() Julia Gygax 03.09.2019

Aufgabe 1 – Ein wachsender Stack A1.3: grow() implementieren - Neues Array mit doppelter Länge (Kapazität) erstellen - Alle Werte aus dem alten Array ins neue kopieren A1.4: push, pop, peek, empty, size, capacity implementieren - push: überprüft, ob noch Platz auf dem Stack ist, sonst -> grow() - pop und peek: überprüft, ob überhaupt ein Element auf dem Stack ist - Beschreibung der Funktionen im JavaDoc lesen Julia Gygax 03.09.2019

Aufgabe 2 – Ackermann – Funktion Quelle: Wikipedia Julia Gygax 03.09.2019

Aufgabe 3 – Stackimplementierung der Ackermann - Funktion Eine etwas andere Definition der Funktion: A(0, m) = m+1 A(n+1,0) = A(n,1) A(n+1, m+1) = A(n, A(n+1, m)) A(0,m) = m+1 A(n,0) = A(n-1,1) A(n, m) = A(n-1, A(n, m-1)) Julia Gygax 03.09.2019

Aufgabe 3 – Stackimplementierung der Ackermann - Funktion Push Start A(1,1) ---------------------------------------- Size > 1 ? m = 1 n = 1 n == 0 ? Nein m == 0 ? Nein n - 1 n m - 1 A(1,1) A(1,0) A(0,1) 2 A(0,2) 3 Pop m = 0 n = 1 m = 1 n = 0 n = 1 Push Stack A(0,m) = m+1 A(n,0) = A(n-1,1) A(n, m) = A(n-1, A(n, m-1)) Julia Gygax 03.09.2019

Aufgabe 3 – Stackimplementierung der Ackermann - Funktion Start A(1,1) ---------------------------------------- Size > 1 ? m = 0 n = 1 n == 0 ? Nein m == 0 ? Ja n -1 1 A(1,1) A(1,0) A(0,1) 2 A(0,2) 3 Pop m = 1 m = 0 n = 1 n = 0 Push n = 0 Stack A(0,m) = m+1 A(n,0) = A(n-1,1) A(n, m) = A(n-1, A(n, m-1)) Julia Gygax 03.09.2019

Aufgabe 3 – Stackimplementierung der Ackermann - Funktion Start A(1,1) ---------------------------------------- Size > 1 ? m = 1 n = 0 n == 0 ? Ja m == 0 ? Nein m+1 A(1,1) A(1,0) A(0,1) 2 A(0,2) 3 Pop m = 1 n = 0 m = 2 Push n = 0 Stack A(0,m) = m+1 A(n,0) = A(n-1,1) A(n, m) = A(n-1, A(n, m-1)) Julia Gygax 03.09.2019

Aufgabe 3 – Stackimplementierung der Ackermann - Funktion Start A(1,1) ---------------------------------------- Size > 1 ? m = 2 n = 0 n == 0 ? Ja m == 0 ? Nein m+1 A(1,1) A(1,0) A(0,1) 2 A(0,2) 3 Pop m = 2 Push n = 3 n = 0 Stack A(0,m) = m+1 A(n,0) = A(n-1,1) A(n, m) = A(n-1, A(n, m-1)) Julia Gygax 03.09.2019

Aufgabe 3 – Stackimplementierung der Ackermann - Funktion Start A(1,1) ---------------------------------------- Size > 1 ? Ende A(1,1) = 3 A(1,1) A(1,0) A(0,1) 2 A(0,2) 3 Pop n = 3 Stack A(0,m) = m+1 A(n,0) = A(n-1,1) A(n, m) = A(n-1, A(n, m-1)) Julia Gygax 03.09.2019

Aufgabe 3 – Stackimplementierung der Ackermann - Funktion Verwendet den Stack aus Aufgabe 1 -> import u4a1.stack; Falls Aufgabe 1 nicht geklappt hat, könnt ihr den Stack aus java.util verwenden Ein neues Objekt vom Typ Stack erzeugen: Julia Gygax 03.09.2019

Aufgabe 4 – Bytecode Erst kompilieren, dann disassemblieren Für Bytecode -> nutzt die Links: https://en.wikipedia.org/wiki/Java_bytecode_instruction_listings https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5 Hinweis für Linux und Mac Nutzer: Verwendet den >> Operator in der Konsole, um die Ausgabe direkt in eine Datei zu schreiben Beispiel: javap -c RecursiveAckermann >> output.txt Julia Gygax 03.09.2019

… viel Spass! Julia Gygax 03.09.2019