|
Diese Seite gibt weitere Informationen zur Vorlesung. Wir bemühen
uns diese Informationen so aktuell wie möglich zu halten.
Aktuelles
-
Diejenigen Studierende, die ihr Fachgespräch nicht bestanden haben oder nicht zum
Fachgespräch erschienen sind, haben noch die Möglichkeit einen Schein zu erwerben
durch ein Fachgespräch bei Jan Peleska. Diese Nachprüfungen finden am
30. und 31. März statt.
Diejenigen, die ihr erstes Fachgespräch nicht bestanden haben, sollten
mittlerweile eine mail mit einem festgesetzten Termin erhalten haben.
Diejenigen, die zum Fachgespräch zugelassen, aber nicht erschienen sind,
sollten ebenfalls eine mail erhalten haben. Falls Ihr die Möglichkeit
der Nachprüfung wahrnehmen wollt, müsst Ihr auf diese Mail
antworten, damit ein Termin festlegt werden kann.
Sollte jemand der Ansicht sein, einer der beiden obigen Gruppen
anzugehören, aber keine mail bekommen haben: Schickt bitte schnell
eine mail an Ulrich Hannemann (ulrichh) , damit wir das klären
können.
-
Da die Veranstaltung für Studierende mehrere Studiengänge
angeboten wird, hier einige Hinweise zu den Anmeldeformalitäten
(nach bestem Wissen):
- Zur Begleitung der Veranstaltung wurde unter STUD.IP das
zugehörige Forum freigeschaltet, Fragen und Hinweise zur
Vorlesung können auch dort geklärt werden.
Inhalt dieser Seite
Termine
VAK: |
03-05-G-700.01/03-05-G-700.04 |
Semester: |
WiSe 08/09 |
Vorlesung: |
Mo. 13-15 Uhr, NW1 H1 (H0020)
Mi. 15-17 Uhr, NW1 H1 (H0020)
regulär ab 27.10.2008 (inkl. Tutoriumsbetrieb) |
Die Tutorien werden in kleinen Übungsgruppen abgehalten. Die
Eintragung in die Gruppen findet während der Einführungswoche statt.
Bitte sorgt für eine gleichmässige Auslastung der Gruppen. Die
Tutorien beginnen ab dem 28.10.2008.
Tutorien: |
Tutorium 1: |
Di. 10 - 12 Uhr,
MZH
7230 |
Jan Frederik Sima
|
Tutorium 2 (primär für Digitale Medien):
|
Di. 10 -12 Uhr,
MZH
2492 |
Martin Stommel (bislang:Burcu Cinaz) |
Tutorium 3:
|
Di 13 - 15 Uhr,
MZH
7230 |
Kai Florian Richter
|
Tutorium 12 : |
Di. 13 - 15 Uhr,MZH 2492 |
Serge Fopoussi
|
Tutorium 4 (primär für Digitale Medien): |
Mi. 10 - 12 Uhr, MZH
7230 |
Jan Frederik Sima
|
Tutorium 13 : |
Mi. 10 - 12 Uhr,MZH 2492 |
Christian Genz
|
Tutorium 5 : |
Mi. 13 - 15 Uhr,
MZH
7230 |
Stefan Haase
|
Tutorium 6 (primär für
Mathematik/Technomathematik): |
Mi. 13 - 15 Uhr,
MZH
2492 |
Elena Vorobev
|
Tutorium 7 (primär für
Mathematik/Technomathematik): |
Do. 10 - 12 Uhr,
MZH 7230 |
Daniel Möhlmann
|
Tutorium 8:
|
Do. 10 - 12 Uhr,
MZH 2492
|
Ulrich Hannemann
|
Tutorium 9 : |
Do. 13 - 15 Uhr,
MZH
7230 |
Florian Lapschies
|
Tutorium 10 (primär für Systems Engineering) |
Do. 15 -17 Uhr,
MZH
7230 |
Elena Vorobev
|
Tutorium 11 (primär für Systems Engineering): |
Do. 15 - 17 Uhr,
MZH 2492 |
Oliver Birbach
|
Die Veranstaltung ist 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. Ferner werden auch die
Lösungsansätze für die Aufgaben besprochen, die von den
Teilnehmern im Tutorium zu lösen sind.
- Keine Theorie ohne Praxis: Im Tutorium werden
die erarbeiteten Konzepte im Rahmen von Programmieraufgaben umgesetzt.
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 muss
nicht notwendig in genau einer Vorlesung abgehandelt werden.
Session 0 - Begrüßungsvorlesung: Praktische Informatik und ihre Anwendungen
In dieser Vorlesung wird ein Überblick über den Inhalt von PI1 (und
ebenso ein bisschen von PI2) gegeben. Ziel dieses Überblicks ist es, zu
illustrieren, dass dieser Lernstoff die Grundlage
für nahezu alle aktuellen Entwicklungen in Forschung, Technik und
Gesellschaft bildet. Die Vorlesung ist eher motivierender Natur; es werden
dabei allerdings folgende Begriffe eingeführt, die zum "echten Stoff" von
PI1 gehören:
- Betriebssystem versus Laufzeitumgebung
- Interpretierte versus kompilierte Programmiersprachen
- Programmiercode auf verschiedenen Abstraktionsebenen bei kompilierten
Programmiersprachen:
- Quellcode in "Höherer" Programmiersprache, z.B. C, C++: Wird
durch den Compiler übersetzt in
- Assembler: Wird durch den Assembler übersetzt in
- Maschinencode: wird durch den Linker übersetzt in
- Ausführbares Programm: wird durch das Betriebssystem
transformiert in einen laufenden
- Prozess: Wird auf der CPU interpretiert durch den
- Microcode
- Beispiele für kompilierte Programmiersprachen:
- C
- C++
- Algol
- Pascal
- Fortran
- Modula 2
- Ada
- Programmiercode auf verschiedenen Abstraktionsebenen bei Java
- Java Quellcode: Wird durch den Compiler javac übersetzt in
- Java Byte-Code: wird durch die Java Laufzeitumgebung (JRE)
interpretiert
- Die Java Laufzeitumgebung muss für jede Rechnerplattform (CPU,
Betriebssysrem) neu durch einen konventionellen Compiler, Assembler und
Linker in ein ausführbares Programm übersetzt werden.
- Beispiele fü interpretierte Programmiersprachen (auch Skriptsprachen genannt):
- Lisp
- Smalltalk
- Basic
- Unix Shells, z.B. bash
- Python
- JavaScript
- Java
- Die Sonderstellung von Java unter den interpretierten Programmiersprachen:
die Java Laufzeitumgebung (die Java Virtual Machine) interpretiert den
Byte-Code, in welchen das Java Programm vorübersetzt wurde.
- C# und Microsoft Intermediate Language (MSIL) unter .NET (Common Language
Runtime und Framework Class Library) als konkurrierende
Alternatve zu Java, Byte-Code und JRE, Java API
- Just in Time (JIT) Kompilation: Byte-Code oder MSIL Code wird erst dann in
Maschinencode übersetzt, wenn er tatsächlich zur Ausführung
kommt.
- Alphabet: Der Zeichenvorrat einer Sprache (in unserem Zusammenhang immer:
Programmiersprache)
- Syntax: Die formalen Beziehungen zwischen Zeichen einer Sprache, d.h.: Die
Konstruktionsvorschrift zur Erzeugung wohlgeformter ("erlaubter")
Ausdrücke einer Sprache
- Grammatik: Formale Erfassung aller Syntaxregeln
- Semantik: Die Lehre von der Bedeutung von (sprachlichen) Zeichen
- Semiotik: Die Lehre von den Zeichen
- Algorithmus: Endliche Anweisung zur Lösung eines Problems in
endlicher Zeit, unter Verwendung von elementaren auf dem Computer
ausfürbaren Schritten
- Security: Schutz vor (böswilliger oder versehentlicher) menschlich
verursachten Störungen des intendierten Verhaltens von Computersystemen
Session 1: Grundlagen aus der technischen Informatik
-
Begriffe: von-Neumann'sche Rechnerorganisation und
Rechnerarchitektur
-
CPU und ihre Grundstruktur (Register und
Befehlszähler)
-
Datenbus und Adressbus, Cache, RAM und ROM,
Hintergrundspeicher
-
Bytes, Bits, Maschinenworte
-
Ein-/Ausgabeeinheit
- Arbeitsweise einer CPU ("fetch"-"execute")
-
Assembler und Maschinensprache
-
Speicheradresse versus
Speicherinhalt, Speicherwort
- eine fiktive Assemblersprache und
ihre Realisierung im Mikrocode
Schemata und Begriffe .
Session 2: Erste Schritte in Java
- Programmierparadigmen: Imperativ (Pascal, C), objekt-orientiert (Java,
C++, C#, Smalltalk), funktional (Lisp, Haskell), logisch (Prolog)
- Imperative Programmiersprachen arbeiten mit Variablen,
auf denen Anweisungen operieren.
- Deklarationen und Deklarative Programmiersprachen
- Klassendeklaration in Java - die main()-Methode
- Lokale Variablendeklarationen in Java: Basistypen und Referenztypen
- Anweisungen: Zuweisungen, Kontrollstrukturen, Variablendefinitionen,
Ein-/Ausgabeanweisungen
- Ausdrücke und Operatoren
-
Erläuterungen zu den oben genannten Begriffen findet man in den
Kommentaren im folgenden
Java Beispielprogramm .
Hinweis: Die Kommentare sind im Doxygen-Stil
geschrieben - mit diesem Doxyfile wird Dokumentation generiert.
Session 3: Erste Algorithmen und Datenstrukturen: Suchen und Sortieren
- Definition des Begriffs Algorithmus
- Eingenschaften von Algorithmen:
- Korrektheit
- Terminierung
- Laufzeitbedarf
- Speicherbedarf
- Der Bubble-Sort Algorithmus
- Berechnung des Laufzeitbedarfs für den Bubble-Sort Algorithmus
- Der Algorithmus Binäre Suche auf sortierten Arrays
- Berechnung des Laufzeitbedarfs im schlimmsten Fall ( Worst Case
Execution Time WCET) für die Binäre Suche
- Programmbeispiel Binäre Suche mit Anwendung eines
Back-to-Back Testverfahrens und Hinweisen zur Berechnung des
Laufzeitbedarfs
- Der Quick Sort Algorithmus.
- Fehlerhafter Algorithmus,
wie in der Vorlesung 2008-11-19 diskutiert.
- Korrigierter Algorithmus,
aus der Vorlesung 2008-11-19.
- Korrekter Algorithmus - eine elgantere
Alternative nach Aho,
Hopcroft, Ullman: Data Structures and Algorithms, Addison Wesley 1983.
Neu 2008-11-25: Der Quellcode ist im Doxygen-Stil dokumentiert.
Im Verzeichnis q/ befindet sich die Quelldatei zusammen mit der
Doxygen Konfigurationsdatei Doxyfile . Im Unterverzeichnis
q/doc/html findet man die von Doxygen erzeugte
HTML-Dokumentation.
- Link für den
Download von Doxygen
- Link für den
Download von GraphViz - dieses Werkzeug wird benötigt, um
Aufrufgraphen, Klassenhierarchien etc. zu visualisieren.
- Rekursive Methodenaufrufe und die dabei erfolgende Nutzung des Stacks
Session 4: Systematische Java-Spracheinführung
- Begriffe: Syntax, Alphabet, Token (= Lexem oder Terminales Symbol),
Kontext-freie Grammatik, Produktionsregel, nicht-terminales Symbol, terminales
Symbol, Zielsymbol
- Lexikalische Grammatik: Spezifiziert das von der syntaktischen Grammatik
verwendete Alphabet
- Syntaktische Grammatik: Spezifiziert die Menge der erlaubten Forlgen
terminaler Symbole
- Java Syntax: siehe Gosling,
The Java Language Specification, Third Edition
- Syntaktische Metasprachen: Sprachen zur Spezifikation der Syntax
anderer Sprachen. Beispiele für syntaktische Metasprachen sind
- Extended Backus-Naur Form EBNF
- Syntaxgraphen
- Reguläre Ausdrücke
- Die von Gosling eingeführte Syntaxnotation in The Java Language
Specification, Third Edition
- Die ISO-EBNF-Notation:
ISO-normierter Dialekt von der EBNF-Notation, welche
wir verwenden): iso-14977.pdf
- Entwicklung von Algorithmen für die Syntaxprüfung
- Syntaxdiagramme als Alternative zur EBNF-Notation
- Operationelle Semantik von while-Sprachen und ihre Anwendung auf einfache
Java-Algorithmen.
-
Semantik-Definition nach Gunter Saake, Kai-Uwe Sattler: Algorithmen und
Datenstrukturen. dpunkt 2004. Abschnitt 3.3.
-
Beispiel für eine formale Verifikation auf Basis der operationellen
Semantik.
Session 5: Algorithmen und Datenstrukturen: Listen und Stacks
- Java Klassen können Kreuzprodukt-Datentypen definieren:
class T {
t1 x1;
t2 x2;
...
tn xn;
}
repräsentiert die Menge T = t1 x t2 x ... x tn.
Die
Komponenten x1, x2, ..., xn heissen Attribute oder auch
Feldelemente der Klasse.
- Rekursive Datentypen sind in Java durch Klassen T definiert, die
Attribute besitzen, welche wieder per Referenz auf T verweisen.
class T {
t1 x1;
...
tn xn;
T y;
}
(Im allgemeinen
Fall rekursiver Datentypen hat man eine zyklische Verweiskette T1 -> T2 -> T3
-> ... -> T1).
- Doppelt verkettete Ringlisten - im Detail erläutert am
Beispiel MyList.java
- Operationelle Semantik und Verifikation von Listen in Java:
Session 6: Algorithmen und Datenstrukturen: Hashing
- Zielsetzung des Hashings: Bilde grossen Schlüsselbereich moeglichst
gleichverteilt auf kleinen Indexbereich ab.
- Hashfunktion für Integer
- Hashfunktion für Strings
- Beispielprogramm MyHashS.java:
Streuspeicherung mit einem Array, dessen Elemente null sind, oder den Kopf
einer einfach verketteten Liste bilden.
- Streuspeicherung auf Basis eines Arrays allein, dessen Elemente direkt auf
Nutzdaten referenzieren. Suchverfahren bei Kollisonen: nächster freier
Index, bei Bedarf weitere Indices im logarithmisch mit der Anzahl der
Fehlschläge zunehmenden Abstand suchen.
Session 7: Grundlagen der objekt-orientierten Programmierung mit Java
In diesem Abschnitt findet Ihr die Aufgabenblätter und gegebenenfalls
Zusatzinformationen zum Herunterladen und
ausdrucken. Die Lösungen sollen mit LaTeX unter Verwendung
der Dokumentenklasse pi1.cls erstellt werden und jeweils
Montags vor der Vorlesung abgegeben werden. Als Hilfe zur lesbaren Erklärung von Java Programmen, hier
eine .tex Datei, die auch Code
präsentiert. Für die Serien 3 und 4 soll der Java
Quellcode per e-mail an den jeweiligen Tutor geschickt werden.
Ab
Serie 5 erfolgt die Quellcodeabgabe im Repository der jeweiligen
Gruppe tXXgYY in einem Unterverzeichnis uebungZZ, mit ZZ = 05, 06, ...
- Übungsblatt 1, Abgabe am
03.11.2008
- Übungsblatt 2, Abgabe am
10.11.2008
- Übungsblatt 3, Abgabe am
17.11.2008. Dazu die Java-Datei
Sets.java
- Übungsblatt 4, Abgabe am
24.11.2008.
- Übungsblatt 5 (aktuell
Version 1.2 mit Punktezuordnung), Abgabe am
1.12.2008.
- Übungsblatt 6, Abgabe am
8.12.2008.
- Übungsblatt 7, Abgabe am
15.12.2008. Die der Aufgabe 1 zugrundeliegende Grammatik findet Ihr unter
http://java.sun.com/docs/books/jls/index.html.
- Übungsblatt 8, Abgabe am
5.1.2009. Wie die Aufgabe 1 bearbeitet werden kann zeigt dieses Beispiel .
- Übungsblatt 9, Abgabe am
12.1.2009.
- Übungsblatt 10, Abgabe
der Aufgabe 2 am
19.1.2009, Abgabe der Aufgabe 1 am 26. 1. 2009. Als Hilfe zur Aufgabe
2 beim Einlesen einer Datei MyReader.java.
- Übungsblatt 11, Abgabe am
26.1.2009.
Es werden wöchentlich Übungszettel ausgegeben, die
jeweils in Gruppen zu dritt bearbeitet werden. Die Note ergibt sich
aus der Durchschnittsprozentzahl der erfolgreichen Bearbeitung der restlichen
Übungsblätter:
Ab 95%: 1,0
Ab 90%: 1,3
Ab 85%: 1,7
Ab 80%: 2,0
Ab 75%: 2,3
Ab 70%: 2,7
Ab 65%: 3,0
Ab 60%: 3,3
Ab 55%: 3,7
Ab 50%: 4,0
Unter 50%: nicht bestanden
Jede Gruppe muss mindestens einmal eine Aufgabe im Tutorium
vorführen.
Aus den Übungszetteln ergibt sich die Vornote für das
Fachgespräch am Ende des Semesters, falls die erreichte Note
mindestens 4,0 ist. Hier wird die Einzelleistung der
Gruppenmitglieder überprüft und bewertet.
An dieser Stelle findet sich eine kleine Auswahl an Literatur zur
Vorlesung. 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 angegeben.
Literatur zur Vorlesung
Zum Erlernen der Programmiersprache Java verfahren wir
folgendermaßen:
-
Die intuitive, motivierende ;-) Einführung in Java erfolgt
auf Grundlage des Tutoriums The Java Tutorial - A practical guide for
programmers welches im WWW unter
http://java.sun.com/docs/books/tutorial zu finden ist.
-
Das systematische, wissenschaftlich ausgerichtete Erlernen von Java
Syntax und Semantik erfolgt auf Grundlage der "offiziellen"
Dokumentation The Java Language Specification von James
Gosling, Bill Joy, Guy Steele und Gilad Bracha. Auch dieses Dokument
ist im WWW erhältlich:
http://java.sun.com/docs/books/jls/index.html
- Die Java-Klassenbibliothek zum
Nachschlagen
- Ein empfehlenswertes Lehrbuch zur Einführung in Java ist
Reinhard Schiedermeier: Programmieren in Java. Pearson 2005.
Algorithmen und Datenstrukturen
- Zu den Themen Algorithmen und
Datenstrukturen wird im Wesentlichen folgendes Buch verwendet:
Gunter Saake, Kai-Uwe Sattler: Algorithmen und Datenstrukturen. dpunkt
2004.
Rechnerorganisation und -architektur
- Einige Grundlagen in Bezug auf Rechnerorganisation, -Architektur
und Assembler-/Maschinensprachen werden auf Basis des Buches
W. Oberschelp und G. Vossen: Rechneraufbau und
Rechnerstrukturen. Oldenburg 1998 eingeführt.
Latex
- Für die eingehendere Beschäftigung mit diesem System zum
anspruchsvollen Setzen von Dokumenten ist als Einstieg Leslie Lamport:
Das LaTeX Handbuch. Addison-Wesley 1995
- ebenso wie Helmut Kopka: LaTeX Einführung, Band
1. Addison-Wesley 2000 zu empfehlen.
- Alles, was in Bezug auf LaTeX für die Abgabe der
Aufgabenblätter notwendig ist,
findet man ebenfalls in der online verfügbaren Kurzanleitung zu LaTeX
Linux und Unix
- Eine Einführung in die Grundlagen der Benutzung des UNIX
bzw. Linux Betriebssystems findet man in dem
SuSE-Linux
Handbuch im Kapitel 19. Interessant sind dabei insbesondere die
Abschnitte 19.5 bis 19.9.
Nachschlagewerke
Allgemeine Fachbegriffe und auch spezielle Begriffe der Informatik
werden häufig sehr gut in den im WWW
verfügbaren Nachschlagewerken erklärt.
Online-Wörterbuch Deutsch-Englisch
Ein sehr gutes Wörterbuch für Übersetzungen Deutsch-Englisch wird von der
TU-Chemnitz zur Verfügung gestellt:
http://dict.tu-chemnitz.de
Wenn Ihr lieber zuhause arbeiten möchtet, so könnt Ihr das unter allen
gängigen Betriebssystemen tun - alle notwendigen Tools dafür stehen
kostenfrei im Internet zur Verfügung.
Für Linux (auch auf jeder aktuellen Distribution vertreten):
Für Windows:
Eine Einführung in die Installation von Latex unter Windows findet ihr
hier (Miktex-Webseite) und
hier
(bebildertes pdf-Dokument).
Für MacOS:
|
|