Informatik II Übung 3. Pascal Schärli

Ähnliche Dokumente
Informatik II Übung 2. Gruppe 4. Lukas Burkhalter (Folien teils von Christian B. und Leyna S.)

Informatik II Übung 3

Informatik II Übung 2. Pascal Schärli

Informatik II Übung 2

Informatik II Übung 4. Pascal Schärli

Informatik II Übung 2

Informatik II Übung 04

Kapitel 12: Induktive

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Informatik II - Übung 07

Übungen zum Bioinformatik-Tutorium. Blatt 6

Informatik II Übung 5. Pascal Schärli

Software Entwicklung 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 17/18. Kapitel 14. Bäume. Bäume 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 14. Bäume. Bäume 1

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

Algorithmen und Datenstrukturen Musterlösung 5

Tutoraufgabe 1 (Implementierung eines ADTs):

Informatik II. Woche 10, Giuseppe Accaputo

Software Entwicklung 1

Übung 4: Die generische Klasse AvlBaum in Java 1

Bäume. Text. Prof. Dr. Margarita Esponda SS 2012 O4 O5 O6 O ALP2-Vorlesung, M. Esponda

Objektorientierte Programmierung

Abschnitt 11: Beispiel: Die Klasse String (Teil 1)

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Martin Unold INFORMATIK. Geoinformatik und Vermessung

13. Bäume: effektives Suchen und Sortieren

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

13. Bäume: effektives Suchen und Sortieren

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Stacks, Queues & Bags. Datenstrukturen. Pushdown/Popup Stack. Ferd van Odenhoven. 19. September 2012

Abschnitt 7: Beispiel: Die Klasse String (Teil 1)

Pascal Schärli

Abgabe: (vor 12 Uhr)

Objektorientierte Programmierung

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Beispielprüfung CuP WS 2015/2016

Informatik II Musterlösung

Nachtragstest in Programmkonstruktion 1. Phase. 1. Multiple-Choice-Aufgaben

Informatik II Übung 5

Übung Algorithmen und Datenstrukturen

5.4 Arrays. Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu!

Tutorium 2. Strings. Skript zur Vorlesung Einführung in die Programmierung

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

7. Dynamische Datenstrukturen Bäume. Informatik II für Verkehrsingenieure

4.4.1 Implementierung vollständiger Bäume mit Feldern. Reguläre Struktur: Nachfolger des Knoten i sind die Knoten 2*i und 2*i+1.

Aufgabe11. Methode test1. import java.util.hashmap; import java.util.arraylist; public class Aufgabe11 {

18. Vererbung und Polymorphie

Klausur. Informatik 1 Wintersemester 2005/2006 Prof. Dr. Wolfgang May 4. April 2006, Uhr Bearbeitungszeit: 90 Minuten

Einführung in die Informatik 2

Transkript:

Informatik II Übung 3 pascscha@student.ethz.ch

Warm up Ist das ein Baum? Left child: Right child: Parent: [A B C _ E _ G H I _] 0 2 3 4 5 6 7 8 9 1 2*i + 1 2*i + 2 (i-1)/2 2

Überblick Serie 3 Aufgabe 1 Caesar Verschlüsselung String vs StringBuffer Garbage Collector Aufgabe 2&3 Syntaxdiagramme und Syntaxparser Aufgabe 4 Schleifeninvarianten 3

Aufgabe 1 Caesar-Verschlüsselung Buchstaben werden um 3 weiterversetzt. Geheimniss --> Jhkhlpqlvv Chars können durch Integeroperationen nach ASCII modifiziert werden. ( A - 1) = @ ( A + $ ) = e 4

Aufgabe 1 String vs StringBuffer Klasse String Unveränderlich (immutable) final Operationen können gut optimiert werden. (Zb. multithreading) Klasse StringBuffer Ohne Kopie veränderbar (mutable) Mehr Platz Gewisse Operationen sind teurer. 5

Aufgabe 1 String vs StringBuffer Objekte im Speicher: String mystring = "hello"; mystring = mystring + " world"; hello world hello world StringBuffer mystringbuffer = "hello"; mystringbuffer.append(" world"); hello hello world world 6

Aufgabe 1 String vs StringBuffer Speicher "hello" Garbage Collector " world" "hello world" " how" "hello world how" " are" String mystring = "hello"; mystring = mystring+" world"; "hello world how are" " you" mystring = mystring+" how"; Garbage Collector mystring = mystring+" are"; "hello world how are you" " today" mystring = mystring+" you"; mystring = mystring+" today"; "hello world how are you today" Animation von Beat Saurenmann 7

Aufgabe 1 String vs StringBuffer Garbage Collector: C++ MyObject obj1 = new MyObject(1); delete obj1; obj1 = new MyObject(2) Java: MyObject obj1 = new MyObject(1); obj1 = new MyObject(2) 8

Aufgabe 2 Syntaxdiagramm (Beliebt an Prüfungen!) Welche der folgenden Ausdrücke können nach dem Diagramm Expr (Ausdruck) korrekt erzeugt werden? Von hand durchgehen und schauen ob es gültig ist. 9

Aufgabe 3 Syntaxdiagramm (Beliebt an Prüfungen!) Ergänzen Sie das Syntaxdiagramm auf Folie 455 im Skript, sodass leere Bäume und leere Teilbäume generiert werden können. Leerer Baum = - 10

Aufgabe 3 Syntaxparser (Beliebt an Prüfungen!) Funktion, welche einen Baum in Klammerdarstellung auf Korrektheit überprüft. Eigene Funktion für Baum, Nachfolger und Knoten Folie 434 im Skript als Inspiration 11

Aufgabe 3 Syntaxparser (Beliebt an Prüfungen!) Benötigte Funktionen: //checks if the char at position offset in the String kd is equal to c Boolean checknext(char c, String kd, int offset){ int parsetree(string kd, int offset){ int parsesubtree(string kd, int offset) { int parsenode(string kd, int offset){ Der return-wert der parse-funktionen ist die Anzahl Zeichen, des Strings kd, welche schon auf die Korrekte Syntax überprüft wurden. Prüft regelmässig, ob euer Index noch innerhalb des Strings ist. 12

Aufgabe 4 Schleifeninvarianten (Beliebt an Prüfungen!) Schleifeninvarianten gilten zum Beginn und Ende jeder Schleifenausführung Nach dem Ende der Schleife ist die Schleifenbedingung (hier: u > 0) nicht mehr erfüllt. Das Resultat ist die Invariante, wenn man die nicht erfüllte Schleifenbedingung (hier: u = 0) einsetz. static int f(int int u = i; int z = 0; while (u > z = z + u = u return z; i, int j) { 0){ j; 1; 13

Nachbesprechung Serie 2 Aufgabe 1 c) S Gegeben sei die folgene Klammerdarstellung S(R(H(K)),P(A(N,O),Q,T),V(J,F(G))) Ist der Baum eindeutig rekonstruierbar? Ja, falls die Reihenfolge der Kinder keine Rolle spielt Sonst nein (zb. Binärbaum) P R H K V A Q T N J F O G Falls man zwischen linken und rechten Nachfolgern differenzieren will (im Falle eines Binärbaums), könnte man leere Blätter zb mit kodieren: S(R(H(K,-)),P(A(N,O),Q,T),V(J,F(-,G))) 14

Nachbesprechung Serie 2 Aufgabe 1 d) 0 1 Baum aus Teilaufgabe a): Höhe: 4 Längste Pfade: 2-76-11-25-13 2-76-7-16-54 2-76-7-16-17 2-79-87-23-5 2-79-87-23-3 2 3 4 Blätter: 41,7,13,54,17,1,5,3,65 15

Nachbesprechung Serie 2 Aufgabe 2 a) Konstruktor für RandomArray: public RandomArray(int length){ Random r = new Random(); //create new random number generator numbers = new int[length]; //create array with desired length for (int i=0; i<length; i++) { //fill array with random integers from 0 to 999 numbers[i] = r.nextint(1000); 16

Nachbesprechung Serie 2 Aufgabe 2 b) Stringrepräsentation des Arrays public String tostring(){ String s="["; //create String for (int i=0; i<numbers.length; i++) { if (i!=0) { s = s + ", "; //add comma unless its the first time s = s + numbers[i]; //add number to string s = s + "]" //close bracket return s; 17

Nachbesprechung Serie 2 Aufgabe 2 c) Recursive sort private void recursivesort(int until){ if (until == 0) { //An empty array is already sorted return; else { recursivesort(until 1); //Sort first n-1 elements if (until == numbers.length) return; //Return if we reached the end int index_max = until-1; for (int i=until; i<numbers.length; i++) { //Find biggest element in rest of array if (numbers[i] > numbers[index_max]) { index_max = i; swap(until - 1, index_max); //Swap biggest element with first unsorted element 18

Nachbesprechung Serie 2 Aufgabe 3 a) int leftchild(int node ){ return 2 * node + 1; int rightchild(int node ){ return 2 * node + 2; int father(int node ){ return (node 1) / 2; 19

Nachbesprechung Serie 2 Aufgabe 3 b) tostring() - Rekursive Lösung: Gebe aktuellen Knoten aus (unter Berücksichtigung der Ebene) Gebe linken Unterbaum aus Gebe rechten Unterbaum aus 20

Nachbesprechung Serie 2 Aufgabe 3 b) private String tostring(int node, String indentation){ assert (tree[node]!= ); //Error if tree is empty String s = indentation + tree[node] + \n ; int c1 = leftchild(node); if (isnode(c1)) { //Add left Child if it exists s = s + tostring(c1, indentation + " "); int c2 = rightchild(node); if (isnode(c2)) { //Add right Child if it exists s = s + tostring(c2, indentation + " "); return s; 21

Nachbesprechung Serie 2 Aufgabe 3 c) private static void checktree(char[] array) throws IllegalArgumentException { if (array.length == 0) throw new IllegalArgumentException( "At least one, node is required."); for (int i=0; i<array.length; i++) { if (array[i]!= ' ') { int f = father(i); if (array[f] == ' ') { throw new IllegalArgumentException("node number " + i + " has no father"); 22

Viel Spass! 23