Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Informatik II – Übung 4 Gruppe 3

Ähnliche Präsentationen


Präsentation zum Thema: "Informatik II – Übung 4 Gruppe 3"—  Präsentation transkript:

1 Informatik II – Übung 4 Gruppe 3
Julia Gygax Julia Gygax

2 Nachbesprechung Übung 2 Julia Gygax

3 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

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

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

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

7 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

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

9 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

10 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

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

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

13 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

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

15 Theorie Julia Gygax

16 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

17 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

18 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

19 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 Animation von Leyna Sadamori

20 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 Animation von Leyna Sadamori

21 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 Animation von Leyna Sadamori

22 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

23 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

24 Vorbesprechung Übung 3 Julia Gygax

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

26 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

27 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

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

29 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

30 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

31 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

32 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

33 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

34 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

35 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

36 Aufgabe 4 – Bytecode Erst kompilieren, dann disassemblieren
Für Bytecode -> nutzt die Links: 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

37 … viel Spass! Julia Gygax


Herunterladen ppt "Informatik II – Übung 4 Gruppe 3"

Ähnliche Präsentationen


Google-Anzeigen