Raphael Fischer fischrap@student.ethz.ch 23.03.2014 Informatik II - Übung 04 Raphael Fischer fischrap@student.ethz.ch 23.03.2014.

Slides:



Advertisements
Ähnliche Präsentationen
ALP II: Objektorientierte Programmierung Sommersemester 2006
Advertisements

der Universität Oldenburg
Objektorientierte Programmierung
der Universität Oldenburg
der Universität Oldenburg
Einführung in die Programmierung Zusammenfassung
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
10. Grundlagen imperativer Programmiersprachen
Übung 6.6Schranken 1.Angenommen, Ihr Algorithmus habe einen Aufwand von g(n) = 5n 3 + n für alle n a)Geben sie eine obere Schranke O(g(n)) an. b)Beweisen.
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
3 Sprachelemente und Anweisungen JavaHS Merseburg (FH) WS 06/07 Strings (Zeichenketten)
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Listen Richard Göbel.
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
Konstruktoren.
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (06 - Anwendungen von Stapeln und Schlangen) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Methoden (Motivation) Idee: Identische Programmabschnitte zusammenfassen und mit einem Namen versehen Vorteile: Übersichtlichkeit.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Zusammenfassung Vorwoche
Modulare Programmierung
DVG Methoden 1 Methoden. 2 int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0); dezi = Math.abs(dezi); String Bin = ""; do { } while.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Einführung in die Programmierung Datensammlung
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
IT2 – WS 2005/20061Oct 10, 2005 Externes Verhalten – Quelltext (source code) Durch Aufrufe der Konstruktoren und Methoden kann das externe Verhalten (=die.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Java und Eclipse.
Informatik 1 Letzte Übung.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Dynamische Datentypen
2.4 Rekursion Klassifikation und Beispiele
Programmiervorkurs WS 2014/15 Methoden
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Übung Informatik I exercise01. 2 Inhaltsübersicht Nachbesprechung Übung 1 Individuelle Fragen/Bemerkungen.
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
Informatik II – Übung 4 Gruppe 3
Konstruktoren.
Gruppe 2 Carina Fuss Informatik II – Übung 4 Gruppe 2 Carina Fuss Carina Fuss
Raphael Fischer Informatik II - Übung 03 Raphael Fischer
Raphael Fischer Informatik II - Übung 06 Raphael Fischer
Raphael Fischer Informatik II - Übung 05 Raphael Fischer
Raphael Fischer Informatik II - Übung 08 Raphael Fischer
«Delegierter» Methoden Schablone Funktionszeiger
Implementieren von Klassen
1. Die rekursive Datenstruktur Liste 1.6 Die Datenstruktur Stapel
Informatik II – Übung 4 Gruppe 3
 Präsentation transkript:

Raphael Fischer fischrap@student.ethz.ch 23.03.2014 Informatik II - Übung 04 Raphael Fischer fischrap@student.ethz.ch 23.03.2014

Besprechung Übungsblatt 3 Raphael Fischer 13.11.2018

U3.A1 Terminierungsbeweis nötig für Korrektheitsbeweis! static int f(int i, int j) { int u = i; int z = 0; while (u > 0) { z = z + j; u = u - 1; } return z; i*j = z + u*j u = 0 => i*j = z Terminierungsbeweis nötig für Korrektheitsbeweis! Raphael Fischer 13.11.2018

U3.A2 – String vs StringBuffer Raphael Fischer 13.11.2018

U3.A2 – Unterschied zwischen diesen Optionen? StringBuffer sb = new StringBuffer("Hey "); sb.append("you!"); //Option 1 sb = sb.append(":)"); //Option 2 String str = "Hey"; str = str + "you! :)";//Option 3 Raphael Fischer 13.11.2018

U3.A2 b) Starting encryption (using Strings) Done - Duration: 2927 ms. Starting decryption (using StringBuffers) Done - Duration: 54 ms. Decryption successful :-) Raphael Fischer 13.11.2018

U3.A3 – Was ist erzeugbar und was nicht? Raphael Fischer 13.11.2018

U3.A4 a) - Raphael Fischer 13.11.2018

U3.A3 b) - Syntaxchecker public class KD { private static boolean checkNext(char c, String kd, int offset) private static int parseTree(String kd, int offset) throws ParseException private static int parseNode(String kd, int offset) throws ParseException private static int parseSubtree(String kd, int offset) throws ParseException public static void parse(String kd) throws ParseException { int offset = parseTree(kd, 0); if(offset != kd.length()) throw new ParseException("There is something more at the end", offset); } parseTree(2,kd): returns 8 Die Funktionen parsen ihren Teil ab offset und geben den past-the-end offset ihres Teils zurück (1 nach dem letzten Zeichen) A(B(C,D),E) 012345678910 Raphael Fischer 13.11.2018

KD.nextChar() private static boolean checkNext(char c, String kd, int offset) { if (offset < kd.length()) { return kd.charAt(offset) == c; } return false; Raphael Fischer 13.11.2018

KD.parseNode() private static int parseNode(String kd, int offset) throws ParseException { boolean found = false; for(char c = 'A'; c <= 'Z'; c++) if(checkNext(c, kd, offset)){ found = true; break; } if(!found) throw new ParseException("Expected A..Z", offset); return offset+1; Raphael Fischer 13.11.2018

KD.parseTree() - private static int parseTree(String kd, int offset) throws ParseException{ if(checkNext('-', kd, offset)) offset++; else { offset = parseNode(kd, offset); if(checkNext('(', kd, offset)) { offset = parseSubtree(kd, offset); if(checkNext(')', kd, offset)) else throw new ParseException("Closing bracket expected", offset); } return offset; Raphael Fischer 13.11.2018

KD.parseSubtree() private static int parseSubtree(String kd, int offset) throws ParseException { while(true){ offset = parseTree(kd, offset); if(checkNext(',', kd, offset)) offset++; else break; } return offset; Raphael Fischer 13.11.2018

Ausblick: Übungsblatt 4 Raphael Fischer 13.11.2018

U4.A1 - Stack Datenstruktur: Nur oberstes Element zugreifbar Last-in-first-out Anwendungen Parameterübergabe bei Programmiersprachen Postfixnotation Peek Raphael Fischer 13.11.2018

Implementation aus der Vorlesung Raphael Fischer 13.11.2018

Hinweise U4.A1 a-c Konstruktor internes Array initialisieren. Grösse wird Konstruktor übergeben toString()-> am besten mit StringBuffer erwartete Ausgabe: "[e0, e1, e2, …]" grow() Kapazität verdoppeln, alte Werte kopieren Raphael Fischer 13.11.2018

Erinnerung: Objekte und Referenzen int[] a = new int[5]; int[] b = a; a = new int[6]; Referenzen: Objekte: a int[5] b int[6] Raphael Fischer 13.11.2018

Hinweise U4.A1 d) push(), pop(), peek(), empty() size() capacity() Standard Stackfunktionalität Argumente sind vom Typ int Wenn nötig, rufe grow() auf size() Anzahl der Elemente momentan auf dem Stack capacity() Gesamtzahl von Elementen welche auf den aktuellen Stack passen (ohne grow nochmal aufzurufen) Raphael Fischer 13.11.2018

U4.A3 – Java Bytecode Einfache Befehle = Spaghetticode z.B. Sprung nach Zeile … Kein if, keine Schleifen! Es gibt globalen Stack Alle arithm. Befehle operieren auf diesem z.B.: iadd: push(pop()+pop()) integer Raphael Fischer 13.11.2018

U4.A3 – Java Bytecode iload_0: push(Argument0) static int f(int a, int b) { if(a == 0) return b; return f(a-1, b); } iload_0: push(Argument0) ifne X: if(peek() != 0) goto X ifgt X: if(peek() > 0) goto X not equal greater than etc. ireturn: Return (Rückgabewert ist auf Stack) iconst_1: push(1) isub: Ersetze die beiden obersten Werte durch ihre Differenz invoke…: Funktionsaufruf. Argumente / Rückgabewert via Stack Raphael Fischer 13.11.2018

Hinweise U4.A3 – Java Bytecode D:\Projects\DisassemblerDemo> javac JavaTip.java //compiler java JavaTip //run javap –c –private JavaTip.java //disassembler Häufiger Fehler: „javap is not recognized as an internal or external command, operable program or batch file” Grund: java binaries sind nicht im Systemvariable PATH definiert Lösung: Rechtsclick auf Computer  Properties  Advanced System Settings  Environment Variables  PATH  folgendes hinzufügen (je nach dem, wo euer Java installiert ist): ;C:\Program Files\Java\jdk1.6.0_31\bin Raphael Fischer 13.11.2018

U4.A2 - Ackermannfunktion Bedeutende Funktion in der theoretischen Informatik Wächst extrem schnell! Wilhelm Ackermann (1986 – 1962, Deutschland) 19‘729 Dezimalstellen A(3,3) = 61 A(4,2) Raphael Fischer 13.11.2018

U4.A2 a&b a): A(2,1) „von Hand“ berechnen In Baumstruktur Interessant: http://www.wolframalpha.com b): Iterativer Algorithmus mit while und Stack auf Papier Pseudocode erlaubt! Die Ackermann-Funktion hat die Eigenschaft, dass man vorher nicht sagen kann, wie tief die Rekursion wird  anstatt for-loop benutze while! Raphael Fischer 13.11.2018

Was ist Pseudocode? Keine sprachspezifische Syntax Selbsterklärend Oft: einfache, englische Sprache Schon mit Funktionen, Verzweigungen und Schlaufen Selbsterklärend Vorteil???  Fokus auf das Wesentliche! Raphael Fischer 13.11.2018

Hinweise U4.A2 b&c – Iterativer Ansatz Funktionsaufruf = 1 while-Durchgang Funktionsarg. immer zuoberst auf Stack Rückgabewert wieder auf Stack push Argument_1_or_2 //In welcher Reihenfolge? push Argument_2_or_1 //->3. Fall muss funktionieren Loop as long as stack size != 1: //neuer Aufruf der Ackermann-Funktion: //Parameter vom Stack holen: a = pop b = pop //Do something with those values Push one value as return item or: Push two values for new function call or: What to do for third case? Raphael Fischer 13.11.2018

Hinweise U4.A2c – Iterativer Ansatz Stack Nutzt dazu euren Stack aus Aufgabe 1 Verändert euren Code davon nicht! Debuggen oder toString() Methode des Stacks verwenden Was, wenn Ihr Aufgabe 1 nicht gelöst habt? Ihr braucht nur push(), pop(), size und toString() Zur Not: Nutzt java.util.Stack<Integer> Raphael Fischer 13.11.2018

…viel Spass! Informatik II - Übung 02 06.03.2013