Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Raphael Fischer fischrap@inf.ethz.ch 15.03.2014 Informatik II - Übung 03 Raphael Fischer fischrap@inf.ethz.ch 15.03.2014.

Ähnliche Präsentationen


Präsentation zum Thema: "Raphael Fischer fischrap@inf.ethz.ch 15.03.2014 Informatik II - Übung 03 Raphael Fischer fischrap@inf.ethz.ch 15.03.2014."—  Präsentation transkript:

1 Raphael Fischer fischrap@inf.ethz.ch 15.03.2014
Informatik II - Übung 03 Raphael Fischer

2 Besprechung Übungsblatt 2
Raphael Fischer

3 U2.A1 S R H P V F A N O Q J K G Können Sie aus den obigen
Linksklammerdarstellungen den dazugehörigen Baum eindeutig rekonstruieren? S(R(H(K)),P(A(N,O),Q,T),V(J,F(G))) Ja, falls Position der Knoten unwichtig (linker oder rechter Nachfolger?) Nein, da Position der Knoten in Binary tree nicht eindeutig bestimmbar bei einzelnem Kind (linker oder rechter Nachfolger?) S R H P V F A N O Q J K G Raphael Fischer

4 U2.A2 – Coding style: Effizienz
Objektinstanzierung ist teuer! void initialize() { for (int i=0; i<a.length; i++) { Random r = new Random(); a[i] = r.nextInt(1000); } void initialize() { Random r = new Random(); for (int i=0; i<a.length; i++) { a[i] = r.nextInt(1000); } Raphael Fischer

5 Aufgabe 2c Raphael Fischer

6 [ 5 1 9 2 ] [ 9 1 5 2 ] [ 9 5 1 2 ] [ 9 5 2 1 ] recursiveSort(4)
Kein swap mehr noetig... recursiveSort(3) 2 <- findLargest(2,3) Swap recursiveSort(2) 5 <- findLargest(1,3) Swap recursiveSort(1) 9 <- findLargest(0,3) Swap recursiveSort(0) Ist sortiert! Animation von Simon Mayer Liste absteigend sortiert! Raphael Fischer

7 U2.A3 Wurzel an Index 0 Direkte Nachfolger von i an (2i + 1) und (2i + 2) int leftChild( node ){ return 2 * node + 1; } int rightChild( node ){ return 2 * node + 2; int father( node ){ return (node – 1) / 2; (father(0) = -1 / 2 = 0) Raphael Fischer

8 U2.A3 b Prüfen des übergebenen Arrays:
Teste: Jedes Element braucht einen Vater ("The root is its own father.”) Was passiert mit leeren Knoten? (Brauchen keinen Vater) private static void checkTree(char[] array) { if(array.length == 0) throw new IllegalArgumentException("Empty array is invalid tree!"); for(int i = 1; i < array.length; i++) if(array[father(i)] == ' ' && array[i] != ' ') throw new IllegalArgumentException("Node " + array[i] + " has no father"); } Raphael Fischer

9 Überladung (gleicher Funktions- name, andere Argumente)
U2.A3 c Überladung (gleicher Funktions- name, andere Argumente) public String toString() { return toString(0, ""); } private String toString(int node, String intendation) if(node >= tree.length || tree[node] == ' ') return ""; return intendation + tree[node] + "\n" + toString(leftChild(node), intendation + " ") + toString(rightChild(node), intendation + " "); Raphael Fischer

10 Ausblick: Übungsblatt 3
Raphael Fischer

11 Schleifeninvarianten 🙄
Mathematischer Ausdruck, der immer am Anfang (oder am Ende) der Schleife korrekt ist. Beispiel: int add(int a, int b) { int i = b; int e = a; while(i != 0){ e++; i--; } return e; e+b = a+b b+i = a+b e+i = a+b a+i = a+b i = 0 Raphael Fischer

12 Schleifeninvarianten 🙄
Leider kein Patentrezept. -> Code verstehen 1c) Trickaufgabe. -> Wichtiges Detail Raphael Fischer

13 U3.A2: String und StringBuffer
Klasse String (immutable) Operationen können gut optimiert werden Aber: Modifikationen nur durch Kopie! Klasse StringBuffer (mutable) Veränderbar ohne Kopie Aber: Gewisse Operationen sind teuer! Demo: Immutable und Mutable Strings Raphael Fischer

14 U3.A2 – String vs. StringBuffer
Speicher "hello" " world" String myString = "hello"; myString = myString + " world"; "hello world" String-Konkatenation in Java StringBuffer myStringBuffer = "hello"; myStringBuffer.append(" world"); "hello" "hello world" " world" Methode von StringBuffer Raphael Fischer

15 U3.A2 – String vs. StringBuffer
Speicher "hello" " world" "hello world" " how" Garbage Collector "hello world how" String myString = "hello"; myString = myString+" world"; myString = myString+" how"; myString = myString+" are"; myString = myString+" you"; myString = myString+" today"; " are" "hello world how are" " you" "hello world how are you" Garbage Collector " today" "hello world how are you today" Animation von Beat Saurenmann Raphael Fischer

16 U3.A2 Fehler im Code: Ändere import von Main.java:
import u3a1.util.RandomString; import u3a2.util.RandomString; Raphael Fischer

17 Syntaxdiagramme Was stellt das dar?
Wie ändern, so dass Pinoccio mit bel. Nasenlänge darstellbar ist? Z.B. :--) oder ;------( oder ;) oder : ) Raphael Fischer

18 Syntaxdiagramme Verzweigung: if() {…} else if (…) Oder if(… || …) {…}
Pfeil zurück: Irgendeinen loop Raphael Fischer

19 U3.A3 – Syntaxchecker für Bäume
Implementierung eines Syntaxcheckers für Bäume Zuerst: Erweiterung der Baumsyntax auf leere Teilbäume Syntaxchecker: Je eigene Methode für Baum, Nachfolger und Knoten Lösungsansatz: public static int f(String str, int offset){...} Gebt jeweils den neuen Offset an die übergeordnete Funktion zurück. Überlegt euch, wie gross der Offset am Schluss sein muss und was passiert ist, falls er nicht genau diese Grösse hat. Hinweis: Lösung von 3a) muss mit eingebaut werden Mögliche Probleme und dazugehörige Lösungsansätze/Erklärungen: StringIndexOutOfBoundsException – ihr versucht auf den character n des Strings zuzugreifen, der Array ist aber weniger lang als n Informatik II - Übung 02

20 …viel Spass! Informatik II - Übung 02


Herunterladen ppt "Raphael Fischer fischrap@inf.ethz.ch 15.03.2014 Informatik II - Übung 03 Raphael Fischer fischrap@inf.ethz.ch 15.03.2014."

Ähnliche Präsentationen


Google-Anzeigen