Informatik II Übung 03 Benjamin Hepp [email protected] 16 March 2017 Nachbesprechung U2 16 March 2017 Informatik II - Übung 01 2 Nachbesprechung U2 16 March 2017 § 1. Wurzelbaeume § 2. Rekursives Sortieren § 3. Binaerbaeume als Array Informatik II - Übung 02 3 Nachbesprechung U2.1 16 March 2017 § a) b) d) an der Tafel § c) Eindeutige Rekonstruktion moeglich: Ja Informatik II - Übung 02 4 Nachbesprechung U2.2 § 16 March 2017 Code in Eclipse Informatik II - Übung 02 5 Beispiel der rekursiven Funktionsaufrufe [ [ [ [ [ [ [ [ [ [ [ [ [ 5 5 5 5 5 5 5 9 9 9 9 9 9 1 1 1 1 1 1 1 1 1 5 5 5 5 9 9 9 9 9 9 9 5 5 1 1 2 2 Uebernommen von Gabor Soeres 16 March 2017 2 2 2 2 2 2 2 2 2 2 2 1 1 ] ] ] ] ] ] ] ] ] ] ] ] ] recursiveSort(4) recursiveSort(3) recursiveSort(2) recursiveSort(1) recursiveSort(0) Ist sortiert! 9 <- findLargest(0,3) Swap 5 <- findLargest(1,3) Swap 2 <- findLargest(2,3) Swap Kein swap mehr noetig... à Liste absteigend sortiert! Informatik II - Übung 02 6 Nachbesprechung U2.3 Darstellung als Array Binaerer Baum A B C 16 March 2017 Knoten A B E C D _ _ Index 0 1 2 3 4 5 6 E D § Index der Wurzel: 0 § Index linkes Kind: 2𝑖 + 1 § Index rechtes Kind: 2𝑖 + 2 § Index Vorfahre: (i − 1)/2 (Integer Division --> wird also immer abgerundet) Informatik II - Übung 02 7 Nachbesprechung U2.3 Darstellung als Array Binaerer Baum A B C § E Knoten A B E C D _ _ Index 0 1 2 3 4 5 6 D Vorteil der Darstellung als binaeres Array: § Knoten sind im Speicher eng beieinander, dadurch gute Ausnutzung des Caches § Kein extra Speicher fuer Zeiger von Vorfahre auf Nachfahren § Nachteil der Darstellung als binaeres Array: § Leere Unterbaeume brauchen trotzdem Speicher. Schlecht fuer unbalancierte Baeume § Fixe maximale Hoehe des Baumes, sonst muss Speicher neu alloziert und kopiert werden. 16 March 2017 Informatik II - Übung 02 8 Hinweise zu U3 16 March 2017 Informatik II - Übung 01 9 Hinweise U3 16 March 2017 § 1. Programmverifikation § 2. String und StringBuffer § 3. Syntaxbaeume § 4. Syntaxchecker Informatik II - Übung 02 10 Endresultat durch Akkumulation in einer Sch 1 2 3 4 5 6 7 Hinweise U3.1 § Schleifeninvariante formulieren § 𝑧 + 𝑢𝑗 − 𝑖𝑗 8 9 static int f(int i, int j) { int u = i; int z = 0; while (u > 0) { z = z + j; u = u - 1; } return z; } (1a) (2 Punkte) Geben Sie eine Schleifeninva § Invariante vor, in und nach der Schleife d.h.pruefen eine Bedingung, die vor und nach der Ende eines jeden Schleifendurchlaufs gilt (Z § Vollstaendige Verifikation benoetigt Terminierungsbeweis u ⇥ j und i ⇥ j. (1b) (3 Punkte) Beweisen Sie mittels der S tierung. 16 March 2017 Informatik II - Übung 02 (1c) (0 Punkte) Nehmen Sie an, der Schleifenk folgende Dummy-Statements ersetzt: : z = ante? Wenn ja, ist Ihr Beweis aus der vorigen 11 Hinweise U3.2 § String in Java immutable § d.h. jede Modifikation ist intern eine Kopie des String (inklusive Objekterzeugung und Schleife zum kopieren) § Zugriff auf einzelnen Charakter mit .charAt() Methode (von 0 bis .length() 1) § Loesung: Stringbuffer § Charakter oder String hinzufuegen mit .append() Methode § String erzeugen durch .toString() Methode § Achtung: Codeboard hat ein Laufzeitlimit 16 March 2017 Informatik II - Übung 02 12 Hinweise U3.3 § Syntaxdiagram: Regeln zum Erstellen eines Ausdrucks. § Abzweigungen stellen Optionen dar. 16 March 2017 Informatik II - Übung 02 13 Hinweise U3.3 § Ueberpruefen, ob Ausdruck valide: § Konstruktion mit Syntaxdiagramm § oder Widerspruch/Sackgasse zeigen § Haeufige Aufgabe in Examen 16 March 2017 Informatik II - Übung 02 14 Hinweise U3.4 16 March 2017 Informatik II - Übung 02 15 Hinweise U3.4 § Syntaxchecker § Mittels rekursiver Funktionsaufrufe § parseTree() § parseSubtree() § parseNode() § Jede Funktion nimmt einen String und Offset, prueft, ob an der Stelle der richtige Ausdruck ist und gibt den Offset nach dem Ausdruck zurueck. § Bei Fehler soll ParseException geworfen werden. § Erster Aufruf: parseTree(str, 0) sollte als neuen Offset die Laenge des Strings zurueckgeben. Sonst kein valider Ausdruck! 16 March 2017 Informatik II - Übung 02 16