Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Gruppe 2 Carina Fuss cfuss@student.ethz.ch 21.3.2018 Informatik II – Übung 4 Gruppe 2 Carina Fuss cfuss@student.ethz.ch 21.3.2018 Carina Fuss 21.3.2018.

Ähnliche Präsentationen


Präsentation zum Thema: "Gruppe 2 Carina Fuss cfuss@student.ethz.ch 21.3.2018 Informatik II – Übung 4 Gruppe 2 Carina Fuss cfuss@student.ethz.ch 21.3.2018 Carina Fuss 21.3.2018."—  Präsentation transkript:

1 Gruppe 2 Carina Fuss cfuss@student.ethz.ch 21.3.2018
Informatik II – Übung 4 Gruppe 2 Carina Fuss Carina Fuss

2 Übung 4 Administratives Nachbesprechung Übung 3 Vorbesprechung Übung 4
Stack, Bytecode, (Ackermann-Funktion) Carina Fuss

3 Übung 4 Code-Samples auf der Vorlesung sind auf CodeExpert verfügbar.
alte Prüfungen auf der amiv-Website (aber Achtung: Es wird betont, dass man aus alten Prüfungen nicht auf die nächste schliessen kann!) Tests benutzen! Man sieht auch seine falschen Ausgaben und kann damit korrigieren. Demo Carina Fuss

4 Nachbesprechung Übung 3
Carina Fuss

5 Übung 3 – Aufgabe 1 – String vs. StringBuffer
Verschlüsseln mit String Entschlüsseln mit StringBuffer Carina Fuss

6 Übung 3 – Aufgabe 1 Main bestimmt die Zeit, die es für die Ver-/Entschlüsselung braucht Warum gibt es Laufzeitunterschiede? Strings sind immutable und müssen jedes Mal kopiert werden, an StringBuffer kann man ohne Kopie neue Zeichen anhängen (append) Carina Fuss

7 Übung 3 – Aufgabe 2 – Syntaxdiagramme
Clause: Expr: Carina Fuss

8 Übung 3 – Aufgabe 3 – Syntaxchecker
Knoten: Baum: Unterbäume: Bäume in Klammerdarstellung Wie kann man auch leere Bäume und Teilbäume ‘-’ darstellen? Carina Fuss

9 Übung 3 – Aufgabe 3 – Syntaxchecker
Carina Fuss

10 checkNext() Hilfsmethode: checkNext()
überprüft, ob das nächste Zeichen einem bestimmten (erwarteten) Zeichen entspricht und ob wir noch im String sind Carina Fuss

11 Knoten Carina Fuss

12 Baum Carina Fuss

13 Unterbaum Carina Fuss

14 Methode parse() public, kann mit einem String aufgerufen werden
Carina Fuss

15 Übung 4 – Aufgabe 4 – Programmverifikation
Schleifeninvariante: z + u * j – i * j = 0  Schleifeninvariante gilt nach n Schleifendurchläufen immer noch vor und nach der Schleife Carina Fuss

16 Übung 3 – Aufgabe 4 Korrektheitsbeweis mittels Schleifeninvariante:
I gilt vor dem Schleifenkörper, I ist Schleifeninvariante (gilt während der Schleife)  I gilt auch nach dem Schleifenkörper Schleifenbedingung C gilt vor der Schleife, aber nach der Schleife nicht mehr Hoare-Kalkül (Aussage über dem Strich impliziert die darunter) Carina Fuss

17 Übung 4 – Aufgabe 4 Dummy-Implementierung:
Schleifeninvariante gilt immer noch…  Programm ist partiell korrekt Terminierung? Programm terminiert nie, da u immer grösser als 0 bleibt  keine totale Korrektheit Carina Fuss

18 Vorbesprechung Übung 4 Carina Fuss

19 Übung 4 – Aufgabe 1 – Stack siehe Informatik I… 
LIFO (last in first out) Java arbeitet mit Stacks Demo Carina Fuss

20 Konstruktor des Stacks
Initialisieren der Klassenvariablen: private int[] buffer private int size size momentane Grösse des Stacks capacity Kapazität des Stacks (wenn sie aus- gelastet ist, muss der Stack wachsen) Mit dem Konstruktor erstellt man eine neue Instanz der Klasse Stack: Stack s = new Stack(100); Carina Fuss

21 toString() und grow() Verwendung von StringBuffer und der Methode append(String str) Konvertierung von int zu String mittels static String Integer.toString(int i) Stack soll wachsen, sobald seine Kapazitätsgrenze erreicht ist: neuen buffer mit doppelter Grösse anlegen alle Werte vom alten in den neuen buffer kopieren einfache, aber aufwendige (!) Methode, dynamisch wachsende Stacks zu ermöglichen Carina Fuss

22 Funktionen zum Arbeiten mit dem Stack
push() Kontrolliert, ob die Kapazität des Stacks ausreichend ist. Ansonsten  grow() pop(), peek() Kontrolliert, ob überhaupt etwas auf dem Stack liegt. size(), capacity() Gibt die aktuelle Anzahl an Elementen auf dem Stack und seine Kapazität zurück. Carina Fuss

23 Übung 4 – Aufgabe 2 – Ackermann-Funktion
A(0, m) = m+1 A(n, 0) = A(n-1, 1) A(n, m) = A(n-1, A(n, m-1)) extrem schnell wachsende Funktion: Carina Fuss

24 Ackermann – Stack A(0, m) = m+1 A(n, 0) = A(n-1, 1)
Push Start A(1,1) A(1,1) A(1,0) A(0, 1) <- 2 A(0, 2) <- 3 Iteration m = 1 m = 0 m = 1 m = 2 Pop size > 2? No. n = 0 n = 0 n = 1 n = 1 A(0, m) = m+1 A(n, 0) = A(n-1, 1) A(n, m) = A(n-1, A(n, m-1)) Push n == 0? m + 1 No. n - 1 Push m == 0? No. 1 n - 1 m = 1 m = 0 Push else n m = 2 n = 0 n = 1 m = 1 m - 1 m = 3 n = 0 n = 1 Berechnung von A(2,1)? Stack Pop End A(1,1) = 3 Carina Fuss

25 Iterative Ackermann Wie eben gezeigt mithilfe von Stack implementieren. Verwendet die Methoden vom Stack aus Aufgabe 1! Achtung: CodeExpert: eure Klasse Stack kopieren! Bei Schwierigkeiten: String-Repräsentation des Stacks ausgeben, um Fehler zu analysieren… Carina Fuss

26 Übung 4 – Aufgabe 3 – Java-Bytecode
Maschinensprache (Inhalt der class-Datei) in der Konsole anzeigen mit javap -c Demo Carina Fuss

27 Bytecode – Beispiel Code: 0: iload_0 1: ifne 6 4: iconst_1 5: ireturn
static boolean gerade(int); Code: 0: iload_0 1: ifne 4: iconst_1 5: ireturn 6: iload_0 7: iconst_1 8: isub 9: invokestatic # // Method gerade:(I)Z 12: ifne 15: iconst_1 16: goto 19: iconst_0 20: ireturn Carina Fuss

28 Bytecode – Beispiel static int verdopple(int); Code: 0: iload_0
1: ifne 4: iconst_0 5: ireturn 6: iconst_2 7: iload_0 8: iconst_1 9: isub 10: invokestatic # // Method verdopple:(I)I 13: iadd 14: ireturn Carina Fuss

29 Bytecode – Beispiel static int halbiere(int); Code: 0: iload_0
1: ifne 4: iconst_0 5: ireturn 6: iload_0 7: iconst_1 8: if_icmpne 11: iconst_0 12: ireturn 13: iconst_1 14: iload_0 15: iconst_2 16: isub 17: invokestatic # // Method halbiere:(I)I 20: iadd 21: ireturn Carina Fuss

30 Bytecode – wichtige Befehle
iload/aload: lädt lokale Variable/Referenz aus dem Speicher iconst: lädt Konstante (z.B. 0 oder 1) iadd: addiert die zwei obersten Variablen auf dem Stack isub: subtrahiert die zwei obersten Variablen auf dem Stack ireturn: Rückgabe (oberster Wert auf dem Stack) goto: springt zu bestimmter Zeile ifne: springt, wenn der Vergleich mit Null negativ ausfällt invokevirtual: ruft eine neue Instanz der Methode auf Carina Fuss

31 Fragen? Carina Fuss


Herunterladen ppt "Gruppe 2 Carina Fuss cfuss@student.ethz.ch 21.3.2018 Informatik II – Übung 4 Gruppe 2 Carina Fuss cfuss@student.ethz.ch 21.3.2018 Carina Fuss 21.3.2018."

Ähnliche Präsentationen


Google-Anzeigen