Tag 6 Repetitorium Informatik (Java) Dozent: Norbert Oster Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2016/2017
Willkommen zum Informatik-Repetitorium! auf Grund der hohen Teilnehmerzahlen: bitte zusammenrücken und keine Plätze in der Mitte freilassen Videoübertragung in mehrere Hörsäle: mit eigenem Notebook laut eigener Angabe im EST: Nachname A R Hörsaal H5 Nachname S Z Hörsaal H6 ohne eigenes Notebook laut eigener Angabe im EST: Nachname A J Hörsaal H15 Nachname K Sch Hörsaal H16 Nachname Sd Z Hörsaal H6 bei Bild- oder Tonausfall bitte im Hörsaal H15 melden für Zwischenfragen liegt auf dem Pult ein Mikrofon bereit Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 2 / 29
Übersicht Was bisher geschah... Einfache Text-Editoren Kommandozeile IDE: Eclipse Erste Schritte Programmieren Ausführen Debuggen Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 3 / 29
Was bisher geschah...
Bisher: Erweiterte Text-Editoren + überall verfügbar, einfach zu bedienen, bestenfalls mit Syntax-Highlighting keinerlei Unterstützung bei komplexeren Aufgaben oder Fehler gedit kwrite Programm getippt... und was jetzt? Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 5 / 29
Bisher: Erweiterte Text-Editoren + überall verfügbar, einfach zu bedienen, bestenfalls mit Syntax-Highlighting keinerlei Unterstützung bei komplexeren Aufgaben oder Fehler gedit kwrite Programm getippt... und was jetzt? Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 5 / 29
Bisher: Übersetzen und Ausführen auf der Kommandozeile + überall verfügbar, einfach zu bedienen keinerlei Unterstützung bei komplexeren Aufgaben oder Fehler So kann es einem dann schon mal auch so ergehen... : 1 Programm mühsam im Text-Editor getippt. 2 Wechsel zur Kommandozeile und Übersetzen mittels javac. 3 Feststellen, dass Code nicht übersetzbar ist... und was jetzt? 4 Wechsel zum Text-Editor Fehler suchen und suchen und suchen... Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 6 / 29
Bisher: Übersetzen und Ausführen auf der Kommandozeile + überall verfügbar, einfach zu bedienen keinerlei Unterstützung bei komplexeren Aufgaben oder Fehler So kann es einem dann schon mal auch so ergehen... : 1 Programm mühsam im Text-Editor getippt. 2 Wechsel zur Kommandozeile und Übersetzen mittels javac. 3 Feststellen, dass Code nicht übersetzbar ist... und was jetzt? 4 Wechsel zum Text-Editor Fehler suchen und suchen und suchen... Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 6 / 29
Bisher: Übersetzen und Ausführen auf der Kommandozeile + überall verfügbar, einfach zu bedienen keinerlei Unterstützung bei komplexeren Aufgaben oder Fehler So kann es einem dann schon mal auch so ergehen... : 1 Programm mühsam im Text-Editor getippt. 2 Wechsel zur Kommandozeile und Übersetzen mittels javac. 3 Feststellen, dass Code nicht übersetzbar ist... und was jetzt? 4 Wechsel zum Text-Editor Fehler suchen und suchen und suchen... Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 6 / 29
Bisher: Übersetzen und Ausführen auf der Kommandozeile + überall verfügbar, einfach zu bedienen keinerlei Unterstützung bei komplexeren Aufgaben oder Fehler So kann es einem dann schon mal auch so ergehen... : 1 Programm mühsam im Text-Editor getippt. 2 Wechsel zur Kommandozeile und Übersetzen mittels javac. 3 Feststellen, dass Code nicht übersetzbar ist... und was jetzt? 4 Wechsel zum Text-Editor Fehler suchen und suchen und suchen... javac - Versuch... benutzer@faui06a: /ordner$ javac Volumen.java Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 6 / 29
Bisher: Übersetzen und Ausführen auf der Kommandozeile + überall verfügbar, einfach zu bedienen keinerlei Unterstützung bei komplexeren Aufgaben oder Fehler So kann es einem dann schon mal auch so ergehen... : 1 Programm mühsam im Text-Editor getippt. 2 Wechsel zur Kommandozeile und Übersetzen mittels javac. 3 Feststellen, dass Code nicht übersetzbar ist... und was jetzt? 4 Wechsel zum Text-Editor Fehler suchen und suchen und suchen... javac - Versuch gescheitert benutzer@faui06a: /ordner$ javac Volumen.java Volumen.java:9: reached end of file while parsing } ^ Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 6 / 29
Bisher: Übersetzen und Ausführen auf der Kommandozeile + überall verfügbar, einfach zu bedienen keinerlei Unterstützung bei komplexeren Aufgaben oder Fehler So kann es einem dann schon mal auch so ergehen... : 1 Programm mühsam im Text-Editor getippt. 2 Wechsel zur Kommandozeile und Übersetzen mittels javac. 3 Feststellen, dass Code nicht übersetzbar ist... und was jetzt? 4 Wechsel zum Text-Editor Fehler suchen und suchen und suchen... Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 6 / 29
Bisher: Übersetzen und Ausführen auf der Kommandozeile + überall verfügbar, einfach zu bedienen keinerlei Unterstützung bei komplexeren Aufgaben oder Fehler So kann es einem dann schon mal auch so ergehen... : 1 Programm mühsam im Text-Editor getippt. 2 Wechsel zur Kommandozeile und Übersetzen mittels javac. 3 Feststellen, dass Code nicht übersetzbar ist... und was jetzt? 4 Wechsel zum Text-Editor Fehler suchen und suchen und suchen... 5 Gehe zu Schritt 1. Nicht vergessen... Nach einer Änderung der Quelltext-Datei muss das Programm vor der Ausführung erneut übersetzt werden. Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 6 / 29
IDE: Eclipse
Bisher: Jetzt: Eclipse Integrated Development Environment (IDE): Syntax-Highlighting und automatische Formatierung automatische Code-Vervollständigung beim Tippen automatische Anzeige von Fehlern direkt im Quellcode automatisches Übersetzen (javac) im Hintergrund Ausführung von Programmen mit nur einem Klick Integrierte Werkzeuge zum Testen und Debuggen von Programmen kann auch andere Sprachen außer Java (z.b. C/C++, Scala, PHP,... ) beherrscht auch andere Tätigkeiten (z.b. UML, Android-Apps, Web-Apps) u.v.m.... Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 8 / 29
Eclipse starten und einrichten: Je nach Betriebssystem und Installation: aus dem Programm-Menü aus dem Datei-Manager (evtl. Doppelklick) auf der Kommandozeile ($> eclipse &) 1 Startbild 2 Arbeitsverzeichnis wählen ggf. Pfad anpassen Haken setzen Entscheidung merken (je nach Version unterschiedlich) Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 9 / 29
Eclipse starten und einrichten: Je nach Betriebssystem und Installation: aus dem Programm-Menü aus dem Datei-Manager (evtl. Doppelklick) auf der Kommandozeile ($> eclipse &) 3 Willkommen zu Eclipse Hier geht es weiter! Manchmal steht hier noch mehr... Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 9 / 29
Erklärung der Bestandteile: WICHTIG: Hier muss J oder Java stehen! Der eigentliche Text-Editor... (kommt später) Projekte, Pakete, Dateien (kommt später) Allerlei Meldungen... Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 10 / 29
Was tun, wenn da andere Dinge stehen? 1 Falls hier nicht J oder Java steht... 2... dann bitte so die Perspektive... 3... auf Java ändern! Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 11 / 29
Neues Java-Projekt anlegen: über das Menü File oder Rechtsklick im Package Explorer und dann New Java Project 1 Projektname eingeben 2 Fertigstellen Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 12 / 29
Neue Klasse anlegen: über das Menü File oder Rechtsklick auf src und dann New Class 1 Klassenname eingeben 2 main-methode automatisch generieren! 3 Fertigstellen Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 13 / 29
Jetzt kann es richtig losgehen... 1 Hier wartet Arbeit... 2 Falls man die Stelle nicht gleich findet, kommt man mit einem Doppelklick hier zum Ziel. Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 14 / 29
Jetzt kann es richtig losgehen... 3 Falls man mal ein Fenster (z.b. Tasks) vermisst... 1 Hier wartet Arbeit... 2 Falls man die Stelle nicht gleich findet, kommt man mit einem Doppelklick hier zum Ziel. Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 14 / 29
Programmieren mit Eclipse Syntax-Highlighting im Editor automatische Prüfung auf Anomalien und Tipps zur Verbesserung kontinuierliche Fehlerprüfung mit Hinweisen zur Korrektur Automatische Formatierung mittels Umschalt+Strg+F do it! 1 Java-Schlüsselwörter (lila) 2b zum Cursor korrespondierende Klammer hervorgehoben 2a akt. Cursor-Position 3 Text-Konstante (blau) 4 Kommentar (grün) Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 15 / 29
Programmieren mit Eclipse Syntax-Highlighting im Editor automatische Prüfung auf Anomalien und Tipps zur Verbesserung kontinuierliche Fehlerprüfung mit Hinweisen zur Korrektur Automatische Formatierung mittels Umschalt+Strg+F do it! 1 Anomalie: Nicht unbedingt falsch, aber vermutlich sinnlos... 2 Mauszeiger auf unterringelten Bereich bewegen 3 Korrekturvorschläge mit einem Klick automatisch anwenden (Vorschläge nicht immer sinnvoll Programmierer muss mitdenken!) Nur Warnings: Programm kann i.d.r. trotzdem übersetzt und ausgeführt werden. Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 15 / 29
Programmieren mit Eclipse Syntax-Highlighting im Editor automatische Prüfung auf Anomalien und Tipps zur Verbesserung kontinuierliche Fehlerprüfung mit Hinweisen zur Korrektur Automatische Formatierung mittels Umschalt+Strg+F do it! Fehler! Fehler! Lösung! Fehler! Fehler! Lösung! Auch Errors: Programm kann erst gar nicht übersetzt werden! Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 15 / 29
Programmieren mit Eclipse Syntax-Highlighting im Editor automatische Prüfung auf Anomalien und Tipps zur Verbesserung kontinuierliche Fehlerprüfung mit Hinweisen zur Korrektur Automatische Formatierung mittels Umschalt+Strg+F do it! vorher: hä? Shift-Ctrl+F nachher: aha! Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 15 / 29
Automatische Code-Vervollständigung: Strg+Leertaste auf Basis der Java-Bibliothek (API) mittels Abkürzungen (vordefinierte oder eigene) durch Kenntnis des restlichen Programms 1 Nach automatisch oder mit Ctrl+Space 3 Kurze Erklärung zur links ausgewählten Methode. 2 Vorschläge für mögliche Methoden. Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 16 / 29
Automatische Code-Vervollständigung: Strg+Leertaste auf Basis der Java-Bibliothek (API) mittels Abkürzungen (vordefinierte oder eigene) durch Kenntnis des restlichen Programms Ctrl+Space 1 Abkürzung sysout wird... 2... zu System.out.println(); Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 16 / 29
Automatische Code-Vervollständigung: Strg+Leertaste auf Basis der Java-Bibliothek (API) mittels Abkürzungen (vordefinierte oder eigene) durch Kenntnis des restlichen Programms Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 16 / 29
Unterstützung bei der Navigation: Strg+Mausklick markiert Deklaration und Verwendungen der gleichen Variable, Methode,... springt an die Stelle der Deklaration wie im Browser: Strg+Mausklick 1a Deklaration der Variablen jahr 1b Verwendungen der Variablen jahr 2 Strg+Mausklick : springt zu Deklaration/Implementierung (Hyperlink). Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 17 / 29
Umfangreiche Unterstützung beim Refactoring! hier exemplarisch: Umbenennen aller Vorkommen der gleichen Variablen 1 Variable markieren (Cursorposition). 2a Im Menü Refactor Rename aufrufen... 2b... oder gleich Shift+Alt+R drücken Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 18 / 29
Umfangreiche Unterstützung beim Refactoring! hier exemplarisch: Umbenennen aller Vorkommen der gleichen Variablen hier hier hier hier 3 Neuen Bezeichner eintippen und Enter drücken. Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 18 / 29
Programme ausführen mit Eclipse 1 Speichern! 2 Run-Taste drücken... 3 Ausgabe hier in der Console (vormals Kommandozeile ) beobachten! Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 19 / 29
Programm startet nicht richtig - was tun? 3 Fehler beheben: auf neben Run drücken... 2 Fehler verstehen: Keine Argumente angegeben... 1 Fehlermeldung lesen und draufklicken! Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 20 / 29
Programm startet nicht richtig - was tun? 3 Fehler beheben: auf neben Run drücken... 2 Fehler verstehen: Keine Argumente angegeben... 1 Fehlermeldung lesen und draufklicken! Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 20 / 29
Programm startet nicht richtig - was tun? 1 Register Arguments aufrufen. 2 Argumente wie auf Kommandozeile eingeben... 3 Und gleich nochmal versuchen... Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 20 / 29
Programm startet nicht richtig - was tun? Input - //////// Caput - Output Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 20 / 29
Debugging Fehler finden mit Eclipse First actual case of bug being found. [Grace Hopper, 09.09.1947] Quelle: Wikipedia Bug heute: Programmfehler (verursacht Fehlverhalten des Programms) Debugging = Bug 1. Diagnostizieren 2. Lokalisieren 3. Eliminieren Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 21 / 29
Debugging Fehler finden mit Eclipse First actual case of bug being found. [Grace Hopper, 09.09.1947] Quelle: Wikipedia Bug heute: Programmfehler (verursacht Fehlverhalten des Programms) Debugging = Bug 1. Diagnostizieren 2. Lokalisieren 3. Eliminieren Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 21 / 29
Debugging Fehler 0. Programmieren Spezifikation zu Höchste Fakultät : Schreiben Sie ein Programm MaxFactorial.java, das von einer Ganzzahl (int i) die höchste Fakultätszahl n! i berechnet. Geben Sie n, n! und i auf der Kommandozeile aus. Hinweis: Gehen Sie bei der Aufgabe so vor, dass Sie (wie im Beispiel auf den Folien) die Fakultätszahlen solange aufsteigend berechnen, bis Sie auf eine stoßen, die i überschreiten würde. Für i = 7 berechnen Sie also 1! = 1, 2! = 2 sowie 3! = 6 und hören dann auf, da die nächste Fakultät (4! = 24) größer als 7 wäre. Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 22 / 29
Debugging Fehler 1. Diagnostizieren Erster Implementierungsversuch zu Höchste Fakultät Testfall mit i = 7 wie im Beispiel. STOPP! Testausführung hier abbrechen. Fehler diagnostiziert: Da kommt nix raus... Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 23 / 29
Debugging Fehler 2. Lokalisieren Mit Doppelklick hier einen Haltepunkt (Breakpoint) setzen! Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 24 / 29
Debugging Fehler 2. Lokalisieren Programm im Debug-Modus starten! Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 24 / 29
Debugging Fehler 2. Lokalisieren Eclipse-Fenster in den Debug-Modus wechseln lassen. Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 24 / 29
Debugging Fehler 2. Lokalisieren Steuerung der weiteren Programmausführung. Bislang deklarierte Variablen ggf. samt aktuellem Wert. Programmausführung unmittelbar vor dieser Zeile (Haltepunkt) angehalten. Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 24 / 29
Debugging Fehler 2. Lokalisieren Wird durch einen Breakpoint die Programmausführung unterbrochen, kann der Entwickler angeben, wie die Ausführung fortgesetzt werden soll: Resume (F8): Ausführung wird bis zum Erreichen des nächsten Breakpoints fortgesetzt. Step Into (F5): Führt die aktuelle Zeile aus und springt zur nächsten. Enthält die aktuelle Zeile einen Methodenaufruf, wird zur ersten Anweisung dieser Methode gesprungen. Step Over (F6): Führt die aktuelle Zeile aus und springt zur nächsten. Methodenaufrufe werden, anders als bei F5, nicht verfolgt (es wird nicht in die Methode gesprungen). Step Return (F7): Kehrt zurück zum Aufrufer. Wird innerhalb einer Methode F7 gedrückt, wird die aktuelle Methode ausgeführt und nach der Rückkehr zum Aufrufer der Methode die Ausführung wieder unterbrochen. Resume (F8) Step Into (F5) Step Over (F6) Step Return (F7) Terminate (Ctrl+F2) Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 24 / 29
Debugging Fehler 2. Lokalisieren Der Wert von n hat sich in der letzten Zeile geändert! Nach 5 Step Over (F6) erreichen wir diese Zeile. Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 24 / 29
Debugging Fehler 2. Lokalisieren Der Wert von nfak hat sich in der letzten Zeile nicht geändert! Nach 6 Step Over (F6) erreichen wir wieder den Schleifenkopf. Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 24 / 29
Debugging Fehler 2. Lokalisieren Nach insgesamt 41 Step Over (F6)...... hat sich nur der Wert von n (Schleifenzähler) geändert! So wird die Schleifenbedingung (nfak * n < i) ja nie false. Fehler (vermutlich) gefunden: nfak darf nicht bei 0 beginnen! Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 24 / 29
Debugging Fehler 3. Eliminieren Bug debugged!? Sieht doch ganz gut aus... Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 25 / 29
Kleiner Exkurs in große Gebiete: Testen Testen ist eine Kunst für Generationen von Software-Ingenieuren Vorlesung Testen von Softwaresystemen (https://pswt.cs.fau.de/tsws) Tipps für eigene Programme: gründlich testen dabei auch Sonderfälle und Grenzwerte verwenden Beispiel Höchste Fakultät : Sonderfälle: negative Eingabe für i Testfall 1: i = 42 sehr große Eingabe (MAX_VALUE) für i Testfall 2: i = 2147483647 Grenzwerte: 0, null,,... Testfall 3: i = 0 i unmittelbar vor einer Fakultät (z.b. 5! = 120) Testfall 4: i = 119 i ist genau eine Fakultät Testfall 5: i = 120 i unmittelbar nach einer Fakultät Testfall 6: i = 121 Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 26 / 29
Ausblick: Testen mit JUnit Testfälle getrennt von der Lösung (eigene Klasse/Methoden). Roter Balken: einige Testfälle nicht bestanden! Testfall 4 nicht bestanden! Testfall 2 abgebrochen (Timeout)! Erwartetes vs. tatsächliches Ergebnis! Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 27 / 29
Ausblick: Testen mit JUnit Vermutlich nur noch nicht genug getestet... Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 27 / 29
Fragen? Fragen! (hilft auch den anderen)
Jetzt: Praktische Übungen mit eigenem Notebook: Nachname A R Hörsaal H5 Nachname S Z Hörsaal H6 bitte erstmal sitzen bleiben! ohne eigenes Notebook in den Rechnerräumen: Tutoren verteilen Gruppenzettel am Ausgang die Einteilung ist zunächst fest für das gesamte Repetitorium Informatik-Repetitorium Tag 6 WS 2016/2017 Lehrstuhl für Informatik 2 (Programmiersysteme) 29 / 29