Informatik II - Übung 01 Katja Wolff katja.wolff@inf.ethz.ch
Themen 1. Ein Algorithmus und seine Implementierung in Java 2. Java: Elementare Aspekte 3. Klassen und Referenzen 4. Syntaxanalyse und Compiler 5. Pakete in Java 6. Objektorientierung 7. Exceptions 8. Binärbäume als Zeigergeflechte 9. Binärsuche 10. Backtracking 11. Spielbäume 12. Rekursives Problemlösen 13. Komplexität von Algorithmen 14. Simulation 15. Heaps 16. Parallele Prozesse und Threads Katja Wolff 01.03.2017 2
Wie sieht eine Übungsstunde aus? 1) Fragen aus der Vorlesung Aufschreiben! 2) Praktische Dinge: Demos, Eclipse Tipps & Tricks, Coding style, Debugging, häufige Fehler, etc. 3) Besprechung Blatt n (heute: n = 0) 4) Ausblick Blatt n+1 Wichtig: Seid aktiv! Katja Wolff 01.03.2017 3
Abgabe der Übungen Bearbeitung der Übung in individuell Abgabe auf Codeboard bitte bis Mittwoch, 13:00 Uhr Automatische Prüfung eurer Abgaben bereits durch Codeboard Feedback durch mich auf Codeboard am darauffolgenden Dienstag Katja Wolff 01.03.2017 4
Weitere Hinweise Plagiate: Verboten! Abschreiben bringt nichts, es braucht sowieso niemand Punkte... Bestraft wird trotzdem: Vorladung beim Dekan Elektrotechnik und bei Prof. Mattern Nutzung externer Quellen (Internet, andere Studenten) erlaubt es muss nur kenntlich gemacht werden! Erfolgreiche Bearbeitung der Übungsaufgaben korreliert extrem mit dem Klausurergebnis, da in der Klausur unter anderem auch programmiert wird Katja Wolff 01.03.2017 5
Java-Installation http://www.oracle.com/technetwork/java/javase/downloads/index.html Java SE 8 JDK (Java Development Kit) Windows: Systemsteuerung environment variables Pfad C:/path_to_jdk-8.xx/bin; an den Anfang der Pfad Variable hinzufügen Test, ob Java installiert ist (und Angabe der Version): In der Kommandozeile (cmd) eingeben: java version Oder eingeben: javac Katja Wolff 01.03.2017 6
Java files.java files sind source code (was wir schreiben).class (Bytecode) files werden aus.java files vom Compiler erzeugt.jar files sind Bibliotheken Java source code Java bytecode Bytecode wird in einer virtuellen Machine (VM) interpretiert Plattformunabhängigkeit (PC, Server, Mobiltelefon, Linux, Windows, etc..) Browser mit integrierter VM Betriebssystem mit VM VM in speziellen VLSI-chip Computer Spiel-Konsole Mobiltelefon Waschmaschine Kreditkarte Katja Wolff 01.03.2017 7
Eclipse www.eclipse.org Katja Wolff 01.03.2017 8
Eclipse-View Run as Java Application Editor Mit CTRL+SHIFT+F kann man autoformatieren Konsole Katja Wolff 01.03.2017 9
Neues Java-Projekt 1 Bsp.: Entpacken von u0.zip nach D:\projects\U00_... 2 3 4 files in D:\projects\u0 wurden automatisch hinzugefügt Katja Wolff 01.03.2017 10
Neues JUnit4 TestCases 1 2 3 4 Rechtsklick New JUnitTestCase 5 Katja Wolff 01.03.2017 11
Debugging (lohnt sich!) Klick Ändere perspective für Debugging Katja Wolff 01.03.2017 12
Debugging (lohnt sich!) Debug as Java Application Breakpoint (Doppelklick auf Zeile) Konsole Katja Wolff 01.03.2017 13
Testing (lohnt sich ebenfalls!) Run Tests.java All tests passed Junit test methods Katja Wolff 01.03.2017 14
Javadoc Mit ALT+SHIFT+J kann man Javadoc hinzufügen Javadoc description Javadoc tab Katja Wolff 01.03.2017 15
Übungsblatt 0 Katja Wolff 01.03.2017 16
Übungsblatt 0 Aufgabe 1: HelloWorld.java a. Java installieren b. Programm auf Kommandozeile kompilieren und ausführen c. Eclipse Setup d. Codeboard ausprobieren Katja Wolff 01.03.2017 17
Übungsblatt 0 Aufgabe 2: Das erste Java-Programm (simple) Signum-Funktion in Eclipse und Codeboard Katja Wolff 01.03.2017 18
Übungsblatt 0 Aufgabe 3: Automatisiertes Testen Setup von JUnit4 In der Kommandozeile (painful) In Eclipse (ziemlich einfach) Testen der signum Funktion Aufgabe 4: Gerichtete Graphen 3 Kannen unterschiedlicher Größe (8l, 5l, 2l) Wein von einer Kanne in die andere umschütten Graph zeichnen, Zahl der nötigen Umschüttungen herausfinden Katja Wolff 01.03.2017 19
Aufgabe 4 Katja Wolff 01.03.2017 20
Aufgabe 4c) Maximale Anzahl von Umschüttungen: 6 (siehe Graph) Mittlere Anzahl von Umschüttungen: Katja Wolff 01.03.2017 21
Übungsblatt 1 Theorieaufgaben Katja Wolff 01.03.2017 22
Übungsblatt 1 Aufgabe 1: Altägyptische Multiplikation (AM) In Vorlesung besprochen (siehe Skript) Rekursiver Algorithmus für Berechnung von a * b (a,b: positive ganze Zahlen) Gesucht: Korrektheit und Terminierungsbeweis Katja Wolff 01.03.2017 23
Übungsblatt 1 Aufgabe 1: Altägyptische Multiplikation (AM) a) Testet Induktion über a b) Terminiert der Algorithmus? Beweis? c) Nachdenken mit kleinstem Fall b=0 Katja Wolff 01.03.2017 24
Übungsblatt 1 Aufgabe 2: Laufzeitkomplexität a) Implementierung der AM gegeben. Aufrufe von den Funktionen gerade, verdopple, halbiere zählen b) Aufwandabschätzung einer einzigen Instanz von f(int a, int b) Resultat soll ein Ausdruck von a und b sein c) Gesamtzahl aller Methodenaufrufe von f(int a, int b) unter Verwendung der Resultate aus Aufgabe b. Wichtig: Wie oft wird die Rekursion aufgerufen? Katja Wolff 01.03.2017 25
Übungsblatt 1 Aufgabe 3: Überprüfung von Benutzereingaben Implementierung der AM gegeben Falsche Eingaben sollen Exceptions hervorrufen Fehler sollen mit Hilfe von UnitTests gefunden werden Einführung in JavaDoc (ALT+SHIFT+J + Javadoc Tab) In mult Methode throw new IllegalArgumentException( ) Katja Wolff 01.03.2017 26
Danke Fragen?