|
Auf dieser Seite werden während des Semesters weiterführende
Informationen sowie die jeweiligen Aufgabenblätter bereitgestellt.
Eine Übersicht über Inhalte, Termine,... der Veranstaltung
findet sich in unserer
Liste der Lehrveranstaltungen.
Inhalt dieser Seite:
Die Lösungen zu den Aufgabenblättern müssen mit LaTeX
gesetzt werden, dabei sollen die Vorgaben aus
pi2-muster.tex und der
Hilfsdatei defs.tex verwendet
werden.
- Blatt 1
(ps/gzip, 27 kB -
pdf, 48 kB):
ausgegeben am 8.4.2002.
Abgabe in den Übungen am 29. April - 2. Mai 2002.
- Tip:
Die Methode checkTerm schreibt Ihr am besten so,
daß sie selbst getNextToken() aufruft, das
Token in einer Variablen zwischenspeichert und es dann
versuchsweise an checkBinterm(...)
bzw. checkMinterm(...) übergibt. Für
letzteres solltet Ihr eine Version mit Parameter vorsehen, so
wie es in der Vorlesung beim Thema Overloading vorgestellt
worden ist.
- Musterlösung:
SynCheck.java und dazu das Testprogramm
Test.java
- Blatt 2
(ps/gzip, 26 kB -
pdf, 42 kB):
ausgegeben am 6.5.2002.
Abgabe in den Übungen bzw. beim Tutor
am 21.-23. Mai 2002.
- Blatt 3
(ps/gzip, 33 kB -
pdf, 55 kB):
ausgegeben am 27.5.2002.
Verlängerung der Abgabe:
jetzt für alle Gruppen am
Donnerstag, den 6. Juni 2002.
- Korrektur:
Anders als es im Blatt 3 steht, ist für die Behandlung von
primitiven Java-Typen als Methoden-/Konstruktor-Parameter doch
eine Sonderbehandlung notwendig. Der dafür notwendige
Java-Schnipsel findet sich
hier.
- Musterlösungen:
- Blatt 4
(ps/gzip, 56 kB -
pdf, 86 kB):
ausgegeben am 3.6.2002.
Abgabe in den Übungen
am 17.-20. Juni 2002.
- Blatt 5
(ps/gzip, 34 kB -
pdf, 69 kB):
ausgegeben am 10.6.2002.
Abgabe in den Übungen
am 1.-4. Juli 2002.
Zum Nacharbeiten der Übungsblätter für das
Fachgespräch sind die
Mindmaps zu den Übungsblättern
von Michael Skibbe
hilfreich (auch als Textversion in
PostScript).
(Und sie waren seiner Gruppe beim Lösen sicherlich ebenfalls
hilfreich.)
Unermüdlich arbeiten für Euch:
Vorlesung
Prof. Dr. Jan Peleska, jp@tzi.de
Übungen
Organisation:
Dr. Jan Bredereke, brederek@tzi.de
Übungsgruppenleiter:
- Felix Beckwermert, foetus@tzi.de
-
Dr. Jan Bredereke, brederek@tzi.de
- Stefan Hansen, beeswax@tzi.de
-
Arne Hormann, ah@tzi.de
- Kolja Köster, warhead@tzi.de
- Hendrik Mangels, mangels@tzi.de
- Udo Neitzel, neitzel@tzi.de
- Bernd Schiffer, bschiff@tzi.de
-
Michael Skibbe, mskibbe@tzi.de
- Dennis Walter, dw@tzi.de
Die Newsgruppe Fb3.lv.pi2 bietet die
Möglichkeit, Fragen rund um die Veranstaltung zu stellen und zu
beantworten. In erster Linie soll sie zwar als Medium für die
Studenten untereinander dienen, aber auch die Tutoren haben
Interesse daran geäußert, mitzulesen und im Rahmen ihrer
Möglichkeiten mal zu antworten.
Die Veranstaltung wird dieses Semester in zwei Bereiche gegliedert:
- In der Vorlesung werden die Themenbereiche der
Praktischen Informatik im Überblick vorgestellt. Wir
versuchen, Fragestellungen und ihre Lösungen zu motivieren,
Schwerpunkte zu setzen, Zusammenhänge deutlich zu machen,
wichtige Probleme zu verdeutlichen und ganz allgemein den
Zuhörern Appetit auf weitere Vertiefung des Lehrstoffs zu
machen.
- In den Übungen wird der Stoff aus der Vorlesung noch
einmal diskutiert, insbesondere indem auf die Inhalte der
begleitenden Übungsblätter eingegangen wird. Weiterhin
werden allgemeine Problem und gute Vorgehensweisen bei der
Lösung der Übungsaufgaben (auch von Euch) vorgestellt.
Natürlich sollte hier auch immer noch genug Zeit bleiben, um auf
allgemeine Verständnisfragen aus der Vorlesung einzugehen.
Scheinkriterien
In der Vorlesung am 15.4.2002 wurden folgende Scheinkriterien
vereinbart:
- Es gibt n Übungszettel (ca. 14-tägig),
davon sind mindestens n-1 Zettel abzugeben.
- 60% der Aufgaben der n Übungszettel müssen erfolgreich
gelöst worden sein, um zum Schein-Fachgespräch
zugelassen zu werden.
- Das Fachgespräch findet mit je einer Abgabe-Gruppe statt
und dauert ca. 15-20 min.
- Jeder bekommt eine eigene Note.
- Es ist (als Einzelprüfung) wiederholbar (ggf. auch
für eine bessere Note).
Fachgespräch
Termin: Freitag, 12.7.2002, 9-18 Uhr
Inhalte:
- Der Stoff der Vorlesung und der Übungen (s.u.)
- Die Aufgabenblätter (s.o.)
Das Fachgespräch wird gruppenweise mit jeweils einer
Aufgabenblatt-Abgabegruppe durchgeführt.
Falls jemand zum Prüfungstermin absolut verhindert ist, kann
die gesamte Gruppe nach Absprache mit Jan Bredereke auch am
Ersatztermin geprüft werden: Freitag,
30.8.2002, 9-12 Uhr.
Schein mitbringen:
Bitte zum Fachgespräch einen ausgefüllten, aber noch
nicht unterschriebenen Schein mitbringen. Folgende Informationen
sollen eingetragen sein (im Falle von Hauptfach-Informatikern):
- Name, Vorname
- Matrikelnummer
- Titel: "Praktische Informatik 2"
- Veranstaltungskennziffer: "03-532"
- Semester: "SS 2002"
- Wochenstunden: "2+2"
- Studiengang: "Informatik" (oder ...)
- Art der Leistung: "Gruppenarbeit + Fachgespräch"
- Datum hinter "Bremen, den...": "12.7.2002"
Die Listen mit den genauen Terminen am 12.7. wurden in der letzten
Vorlesungswoche in den Tutorien herumgegeben. Eventuelle
Nachmeldungen jetzt bitte direkt über Jan Bredereke.
Die "Ersatzregelungsliste" liegt ebenfalls
im Sekretariat MZH 8190 aus.
Zuordnung von Tutorien zu Prüfern und Räumen am 12.7.2002
Tutor |
Übungstermin |
Prüfer |
Raum |
Jan Bredereke |
Mo 13-15 |
Jan Bredereke |
MZH 7260 |
Kolja Köster |
Mo 13-15 |
Dirk Meyer |
MZH 7210 |
Udo Neitzel |
Mo 15-17 |
Thorsten Scholz |
MZH 7220 |
Stefan Hansen |
Mi 13-15 |
Stefan Bisanz |
MZH 7230 |
Bernd Schiffer |
Do 8-10 |
Stefan Bisanz |
MZH 7230 |
Arne Hormann |
Do 8-10 |
Stefan Bisanz |
MZH 7230 |
Felix Beckwermert |
Mi 15-17 |
Tillman Vierhuff |
MZH 7250 |
Dennis Walter |
Do 8-10 |
Jan Peleska |
MZH 8055 |
Michael Skibbe |
Do 10-12 |
Mike Foedisch |
MZH 6240 |
Hendrik Mangels |
Mo 15-17 |
(siehe unten) |
(siehe unten) |
Die Tutanden von Hendrik Mangels (Tutorium Mo 15-17 Uhr) werden von
allen sieben Prüfern im Wechsel geprüft. Welcher
Prüfer für welche Gruppe zuständig ist, ergibt sich
aus folgender
Tabelle:
Zeit |
Prüfer |
Raum |
9:15 |
Jan Bredereke |
MZH 7260 |
10:30 |
Thorsten Scholz |
MZH 7220 |
10:50 |
Stefan Bisanz |
MZH 7230 |
13:00 |
Tillman Vierhuff |
MZH 7250 |
13:20 |
Jan Peleska |
MZH 8055 |
14:15 |
Mike Foedisch |
MZH 6240 |
14:35 |
Jan Bredereke |
MZH 7260 |
Ersatztermin Fachgespräch
Termin: Freitag, 30.8.2002, 9-15 Uhr
Die Liste für die Prüfungstermine liegt nicht mehr
im Sekretariat aus.
Wer sich noch am Ersatztermin prüfen lassen möchte, meldet
sich jetzt bitte bei Jan Bredereke
(brederek@tzi.de).
Wer die Prüfung vom 12.7. wiederholen möchte (und sei es
nur, um seine Note zu verbessern), kann sich am Ersatztermin bei Jan
Peleska einzelnd prüfen lassen.
Zuordnung von Terminen zu Prüfern und Räumen am 30.8.2002
Uhrzeit |
Prüfer |
Raum |
9:00-10:20 |
Jan Bredereke |
MZH 7210 |
10:40-12:00 |
Stefan Bisanz |
MZH 7250 |
13:00-14:40 |
Jan Peleska |
MZH 8055 |
Die Prüfungsinhalte sind die gleichen wie am Haupttermin.
Bitte bringt ebenfalls einen ausgefüllten Schein mit, wie oben
beschrieben.
Die folgende Liste von Lerninhalten wird im Laufe des Semesters
fortgeschrieben. Sie dient als Checkliste, mit welchen Themen und
Begriffen die Veranstaltungsteilnehmer vertraut werden sollten. Eine
"Session" entspricht einer zusammengehörigen
Lerneinheit, sie muß nicht notwendig in genau einer Vorlesung
abgehandelt werden.
Zum Nacharbeiten des Vorlesungsstoffs für das
Fachgespräch sind die
Mindmaps über den gesamten Vorlesungsstoff von
Michael Skibbe
hilfreich (auch als Textversion in
PostScript).
Außerdem gibt es von Michael Skibbe einen weiteren Satz von
Mindmaps zu den Übungsblättern
(ebenfalls auch in
PostScript).
- Begriffe: Syntax (die möglichen Zeichenfolgen einer gegebenen
Sprache) - Semantik (die Bedeutung der Sprachkonstrukte) -
Semiotik (die Lehre von den Symbolen und ihrer Bedeutung) -
Grammatik (Spezifikation der erlaubten Zeichenfolgen einer
Syntax)
- Alphabet: Menge der als logische Einheit zusammengehörigen
Zeichenketten der Sprache. Die Elemente des Alphabets heissen
Tokens oder gleichbedeutend Lexeme. Beispiel Java: Die
reservierten Worte und Zeichen der Sprache (class, if, else,
do, while, ';', '{', '}', ...) sind Lexeme aus dem
Java-Alphabet. Zusätzlich können Nutzer noch eigene
Tokens einführen (Namen für Klassen, Konstanten,
Variablen, Methoden, Literale, ...). Das Java-Alphabet ist daher
unbeschränkt.
- Lexikalische Grammatik: Spezifikation der zum Sprachalphabet
gehörigen Tokens.
- Syntaktische Grammatik: Spezifikation der in der Sprache
erlaubten Folgen von Tokens.
- Scanner: Teil eines Compilers, der für die Erkennung der
einzelnen Tokens in der das Programm repräsentierenden
Zeichenkette zuständig ist.
- Syntax Checker: Teil eines Compilers, der für das
Prüfen des zu übersetzenden Programms gegen die
syntaktische Grammatik zuständig ist.
- Parser: Kombination des Syntax Checkers mit einer Einheit
zum Aufbau des Parse Trees.
- EBNF (Extended Backus-Naur Form) Notation zur Spezifikation
kontext-freier Grammatiken: Jede EBNF-Spezifikation besteht aus
- Jede EBNF-Spezifikation besteht aus
Produktionsregeln der Form
<Name der Produktionsregel> ::= ...
Spezifikation der Produktionsregel ...
- Die Namen der Produktionsregeln heissen auch nicht-terminale
Symbole.
- In den rechten Seiten der Produktionsregeln können
Tokens (hier dann terminale Symbole genannt) oder Verweise
auf andere Produktionsregeln auftreten.
- In den rechten Seiten der Produktionsregeln werden
nicht-terminale oder terminale Symbole, die in der Sprache
nacheinander aufzutreten haben, sequenziell
aufgeführt. Alternativen zwischen mehreren
nicht-terminalen oder terminalen Symbolen werden durch |
gekennzeichet. Optionale nicht-terminale oder terminale
Symbole werden in [...] eingeschlossen. Beliebig oft
(keinmal oder mehrmals) auftretende nicht-terminale oder
terminale Symbole werden in {...} eingeschlossen. Die
Referenzen auf Produktionsregeln in Form von
nicht-terminalen Symbolen dürfen rekursiv verwendet
werden. Damit ist die Spezifikation von Sprachen mit
unbeschränkt langen Sätzen (also z.B.
Computerprogrammen) möglich.
Hintergrundinformationen zu Session 0
- Das in der Vorlesung am 22.4.2002 durchgesprochene
Beispielprogramm zur Syntaxspezifikation mittels EBNF und zur
Entwicklung eines Scanners und Syntax Checkers für diese
Sprache findet man
hier.
Literatur zu Session 1
Balzert: Lehrbuch Grundlagen der Informatik, Abschnitte 2.5, 2.14.
Gosling et al.: The Java Language Specification, Kapitel 8 und 14.
- Quasi-Parallelität auf 1 CPU
- zwei Formen von echter Parallelität: enge/lose Kopplung
(gemeinsamer Hauptspeicher oder nicht)
- Thread
- Klasse Thread in Java
- Monitor
- synchronized-Eigenschaft von Methoden
- atomare Transaktion
- Producer-Consumer-Muster
- wait()- und notify()-Methoden bei von der Klasse Thread
abgeleiteten Klassen
Hintergrundinformationen zu Session 2
-
AccountAccess.java:
Beispiel "Kontenverwaltung"
Thread-Erzeugung, Monitore und synchronized-Eigenschaft von
Methoden, erläutert am Beispiel paralleler konkurrierender
Transaktionen auf einem Bankkonto.
-
Prod_con.java:
Beispiel "Producer - Consumer"
wait() und notify()-Methoden - Der Erzeuger produziert
Datenpakete, die in einen begrenzten Datenbereich eingetragen
werden, solange noch Platz ist. Der Verbraucher entnimmt diesem
Bereich die Datenpakete, wenn welche vorhanden sind.
- Transitionssysteme
- Definition (s.u.)
- Markierung/Label
- Zustand
- Transition
- Realisierung in Java
- abstrakte/konkrete Klassen, Interfaces
- binäre Bäume
- siehe auch das Kapitel dazu im Balzert
- Knoten
- Wurzelknoten
- Markierung/Label an Knoten
- Blatt
- Suchen, Einfügen, Löschen, sortiertes Ausgeben
- Darstellung in Java
- Transformation des Schlüssels in eine Bitfolge für
links/rechts-Entscheidungen
- oder: Schlüssel komplett im Knoten
- AVL-Bäume
- Vorteile balancierter Bäume gegenüber normalen
binären Bäumen
- Tiefe, Neigung eines Baumes
- die Operationen zum Rebalancieren beim Einfügen
- Hashing/Streuspeicherung
- Motivation: Wertebereich der Schlüssel viel
größer als des Arrays
- Hashfunktion für Integer
- Hashfunktion für Strings
- Hashfunktion ist injektiv: Hinter jedem Array-Eintrag ist eine
Liste von "Hash-Buckets" nötig
- Ziel für die Hashfunktion: Gleichverteilung auf die
Array-Indizes
- Größe des Hash-Arrays: Primzahl
Hintergrundinformationen zu Session 3
- Definition Transitionssystem:
Als ein Bäume verallgemeinernder abstrakter Datentyp wurden in
der Vorlesung Transitionssysteme eingeführt:
Definition: Ein Transitionssystem (englisch Labelled Transition
System) ist ein Quadrupel
LTS = (S,S0,A,T) mit folgenden Eigenschaften:
- S ist eine endliche Menge, deren Elemente die
Zustände von LTS genannt werden.
- S0 ist eine Teilmenge von S, deren Elemente die
Anfangszustände von LTS genannt werden.
- A ist eine endliche Menge, genannt das Alphabet von
LTS. Die Elemente von A heissen Markierungen oder
Label von LTS.
- T ist eine Teilmenge von S × A × S (also eine
dreistellige Relation), die Menge der Transitionen von LTS.
Ein Transitionssystem heisst deterministisch, wenn folgende
Bedingungen beide erfüllt sind:
- S0 enthält genau ein Element
- Wenn (z0,a,z1) eine Transition aus T ist,
dann folgt für alle (w0,b,w1) aus T mit
w0 = z0 und b = a auch
w1 = z1.
Eine Ausführung (englisch Execution) eines
Transitionssystems LTS = (S,S0,A,T) ist eine Folge
(z0,a0,z1,a1,z2,a2,
... ), so dass folgende Bedingungen erfüllt sind:
- z0 ist ein Element von S0
- Für alle i = 0,1,2,... gilt:
(zi,ai,zi+1) ist eine Transition aus T.
- Binäre Bäume:
Das Programm aus der Vorlesung am 17.6.2002:
BinaryTree.java,
BtMain.java
- Ausführliche Erklärung von binären
Bäumen und AVL-Bäumen mit vielen Beispielen
und Bildern, verfaßt vom Lehrer
Axel Wagner aus Homburg/Saar:
http://www.hom.saar.de/~awa/jbaum.htm
- Das Programm zu Hashing aus der Vorlesung am 1.7.2002
findet man hier.
Anmerkung: Der Stoff dieser Session ist für das
Fachgespräch nicht relevant.
- AWT vs. Swing
- Beispiel für eine einfache AWT-GUI: "Lonely PacMan"
- Ausblick: Java3D
Hintergrundinformationen zu Session 4
- "Lonely PacMan":
Beispiel für eine einfache AWT-GUI.
-
demo-pacman.tgz: komprimiertes tar-File mit allen Quellen,
und zwar den folgenden Dateien:
Dieser Code läßt sich
hier auch als Applet ausprobieren.
-
demo-pacman-aus-vorlesung.tgz: Dasselbe, aber mit den Dateien,
die online in der Vorlesung entwickelt wurden. Hier gibt es
entsprechend keine Kommentare im Code usw., dafür aber
mehr "Live-Feeling".
- Die UML-Diagramme zum PacMan-Programm aus der Vorlesung
finden sich
hier.
- Weiterführende Informationen:
- Packages: Definition und Verwendung
- Applets
- Start nicht durch main()
- Erzeugung/Vernichtung mit init()/destroy()
- Sichtbarmachung/Unsichtbarmachung mit start()/stop()
- File-IO
- Unterschied 8Bit-Bytes vs. Unicode-Buchstaben
- Ein-/Ausgabe mit Bytes: Input-Streams und Output-Streams
- Ein-/Ausgabe mit Buchstaben: Reader und Writer
- File-Streams: FileReader, FileWriter
- Verkettung von Streams
- Programmierprinzipien, Objektorientiertes Programmieren,
Algorithmen und Datenstrukturen:
Es wird folgendes Lehrbuch verwendet:
Helmut Balzert:
Lehrbuch Grundlagen der Informatik,
Spektrum Akademischer Verlag (1999). ISBN 3-8274-0358-8.
- Erlernen der Programmiersprache Java:
- Einführung in Java:
The Java Tutorial - A practical guide for programmers,
http://java.sun.com/docs/books/tutorial
- Code-Konventionen für Java:
Die Code-Konventionen finden sich unter
http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html
Beim Schreiben von Java-Programmen sollten sie beachtet
werden, damit der korrigierende Tutor den Code auch lesen
kann. Was wir nicht in begrenzter Zeit verstehen
können, können wir auch nicht als gut bewerten.
Die Präsentation von Bernd Schiffer, die in den
Übungen gezeigt wurde, findet sich hier sowohl in
Farbe als auch in
Schwarz-Weiß.
- "offizielle" Dokumentation:
James Gosling, Bill Joy, Guy Steele und Gilad Bracha:
The Java Language Specification,
http://java.sun.com/docs/books/jls/index.html.
Diese Dokumentation dient zum systematischen, wissenschaftlich
ausgerichteten Erlernen der Java-Syntax und -Semantik.
- Übersicht über die Java API:
http://java.sun.com/j2se/1.4/docs/api/index.html
Diese Übersicht eignet sich gut, um die
Parameter und Funktionsweise einzelner Methoden nachzuschlagen.
- Java Platform 1.1 (Core) API Specification:
http://java.sun.com/products/jdk/1.1/docs/api/packages.html .
Überblick über alle Packages, ebenfalls zum
Nachschlagen. Unter SuSE Linux findet sich (fast) die
gleiche Dokumentation auch auf der Festplatte unter
file:///usr/share/doc/packages/javadoc/docs/api/packages.html .
Die gesamte Java Development Kit Dokumentation findet sich
entsprechend unter
http://java.sun.com/products/jdk/1.1/docs/index.html
und
file:///usr/share/doc/packages/javadoc/docs/index.html .
- Überblick über Java Tutorien, Artikel und
Bücher:
http://developer.java.sun.com/developer/infodocs/
- LaTeX:
- Vorlage für die kommentierten Lösungen
der Aufgaben:
Die Lösungen werden von den Teilnehmern mit LaTeX
formatiert. Die herunterladbare Vorlage
pi2-muster.tex und
die zugehörige Hilfsdatei
defs.tex helfen dabei.
- Kurzanleitung:
Die hier verfügbare
Kurzanleitung zu LaTeX enthält alles, was für
die Abgabe der Aufgabenblätter notwendig ist.
- Eingehendere Einführung in das
anspruchsvolle Setzen von Dokumenten mit LaTeX:
- Leslie Lamport: Das LaTeX Handbuch.
Addison-Wesley 1995.
- Helmut Kopka: LaTeX Einführung, Band 1.
Addison-Wesley 2000.
- Weitere Lerninhalte, die nicht direkt in der hier genannten
Literatur verfügbar sind, werden als Skripte im Laufe des
Semesters im WWW veröffentlicht, die Links werden in diesem
Abschnitt
hier angegeben.
|
|