Universität Bremen FB3 TZI BISS | ||||||
AG BS > Lehre > WiSe 2002/03 > | ||||||
Praktische Informatik 1, WiSe 2002/03 |
||||||
Diese Seite gibt weitere Informationen zur Vorlesung. Wir bemühen uns diese Informationen so aktuell wie möglich zu halten. Anmeldung zum FachgespächAnmeldungen zum Fachgespräch für diejenigen, die zu den ersten Terminen verhindert waren, bitte per e-mail an Ulrich Hannemann: ulrichh@informatik.uni-bremen.de.
Anmeldungen zur Wiederholung des Fachgesprächs bitte direkt an Prof. Dr. Jan Peleska: jp@informatik.uni-bremen.deLeistungsnachweiseWer einen Leistungsnachweis erhalten möchte, muß ein vorausgefülltes Formular zum Fachgespräch mitbringen!Das PI1-TeamDie Veranstaltung Praktische Informatik 1 wird von folgenden Personen durchgeführt:Vorlesung: Prof. Dr. Jan Peleska, http://www.informatik.uni-bremen.de/~jp, EMail: jp@informatik.uni-bremen.de Übungen - Lektüre:
Programmierpraktikum:
VeranstaltungszeitenVorlesung: Mo. 10 - 12 Uhr,
Struktur der VeranstaltungDie Veranstaltung wird in drei Bereiche gegliedert:
Hinweis auf Veranstaltung "Frequently Asked Questions": Vor allem für ausländische Studierende bieten wir die Möglichkeit, Verständnisfragen zu besprechen. Jeden Mittwoch von 10-13 Uhrbietet Hui Shi die Möglichkeit an, in Kleingruppen allgemeine Fragen zu der Praktischen Informatik zu stellen und zu diskutieren. Meldet Euch bitte vorher (kurzfristig) bei ihr an, wenn Ihr einen Teil der Zeit in Anspruch nehmen wollt, z.B. per eMail an shi@informatik.uni-bremen.de. Um dabei auch die praktischen Aspekte zu berücksichtigen, findet diese Session im Raum P5, Ebene 0, statt.
Literatur
Java, Emacs, LaTeX für ZuhauseWenn 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):
VeranstaltungsinhalteDie 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 1: Grundlagen aus der technischen InformatikVorlesung: von-Neumann'sche Rechnerorganisation - 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 - Darstellung nicht-negativer ganzer ZahlenDie Hierarchie der Programmiersprachen (von "unten nach oben", d.h. von hardwarenah bis anwendungsnah): (1) CPU Mikrocode (2) Maschinencode (3) Assembler (4) Wide-spectrum Languages, 3rd generation (C,C++,Java,Ada,...) (5) Domain-specific Languages (anwendungsspezifische Sprachen) - eine fiktive Assemblersprache und ihre Realisierung im Mikrocode Übungen - Lektüre: Wiederholung von Grundbegriffen aus der Logik und Mengenlehre - Eine einfache "fiktive" Assemblersprache mit Load/Store/Jump/Integer-Befehlen - Maschinencode - Realisierung der Assemblerbefehle im (fiktiven) Mikrocode einer CPU - Schnittstellen Treiber und Controller: Polling, Interrupts, DMA. Dazu auch der Lektüretext und die Literaturangabe. Programmierpraktikum:Textverarbeitung in LaTeX - Emacs im LaTeX Mode - pdflatex und Acrobat Reader - xdvi - ghostview Eine Kurzeinführung, die auch Grundlage für das erste Praktikum ist, liegt hier zum Download bereit. Literatur für Vorlesung und Übungen/Lektüre:Oberschelp und G. Vossen: Rechneraufbau und Rechnerstrukturen, Kapitel 8 Session 2: Programmiersprachen und die ersten Schritte in JavaVorlesung: Semiotik, Syntax, Semantik - maschinell interpretierbare Sprachen - problemorientierte versus maschinenorientierte Programmiersprachen - wide-spectrum languages versus domain-specific languages - Programmiersprachenübersicht - ein Muss für ProgrammiererInnen [:-)]: Hello World-Programm als Java Anwendung - Betriebssysteme und Laufzeitumgebungen - Virtuelle Maschinen - Compiler und Interpreter - Java Byte Code - Die ersten Sprachelemente von Java: Kommentare, Klassen, Objekte, Methoden, die main-Methode, Variablen mit primitiven Typen, Operatoren, Ausdrücke, Anweisungen, Blöcke und Scope, erste Kontrollstrukturen - Spezifikationen, Precondition, Postcondition - Arrays als erstes Beispiel für Referenzvariablen - Parameterübergabe bei Methoden - lokale Variablen in Methoden - das Prinzip des Stack - Ein-/Ausgabe: das Konzept von Abstraktion und Verfeinerung - Ein erster Sortier-Algorithmus: Quicksort.Die Programmierbeispiele der ersten 2 Java-Vorlesungen sind in HelloWorldDoc.java zu finden. Das Beispiel zur Einführung von Methoden ist VorlesungClass.java. Das Progammskelett für binäre Suche und Quicksort: BinSearch3.java . Zu den Charakteristika objekt-orientierter Sprachen: Stichworte . Zur Erläuterung der unterschiedlichen Ansätze von objekt-orientierten und anderen Programmiersprachen gibt es die folgenden drei Beispielprogramme aus der Vorlesung vom 16. Dezember: Modular.java als Beispiel für einen "klassischen" (nicht objekt-orientierten) Ansatz und Oo.java als Beispiel für den objektorientierten Ansatz. Oo2.java illustriert den Zusammenhang zwischen Objekten und Abstrakten Datentypen. Zu Methodenaufrufen und der Funktion des Laufzeitstacks sind
hier einige
ergänzende Skizzen.
Einführung in
die grundlegenden Werkzeuge zur Programmentwicklung unter Java: Emacs
im Java-Mode, javac, java, appletviewer, Netscape,
Debugger, Sourcebrowserfunktion mit Emacs (ctags/etags).
Übungsprogramme zum Erlernen der Wertebereiche von primitiven Typen und
zum Anwenden der Operatoren.
Session 3: Systematische Java-SpracheinführungVorlesung: Vorbemerkung: In der vorigen Session bestand das Lernziel darin, eine intuitive Einführung in die Programmiersprache Java zu geben. In der Session 3 nähern wir uns Java von der wissenschaftlichen Seite: Wie beschreibt man die gültigen, vom Rechner interpretierbaren Sprachkonstrukte auf eindeutige und systematische Weise? Welche grundsätzlichen "Zutaten" gehören zu einer Programmiersprache? Wie kann man die Semantik von Sprachkonstrukten auf eindeutige Weise spezifizieren?Lexeme und Syntax - lexikalische Grammatik - syntaktische Grammatik - Notation zum Beschreiben von Java-Grammatiken: Java-spezifische Notation, Syntaxdiagramme, EBNF (erweiterte Backus-Naur-Form) - lexikalische Struktur von Java: Unicode, Eingabeelemente, Tokens, Bezeichner, Schlüsselworte, Literale, Separatoren, Operatoren - Einführung in die syntaktische Struktur von Java: Übersetzungseinheit (Compilation Unit), Package Declarations, Import Declarations, Type Declarations, primitive Typen, Variablen, Blöcke und Anweisungen - Ausdrücke und Zuweisungen: die Java/C/C++-Problematik - Anweisungen, insbesondere Kontrollstrukturen: leere Anweisung, Ausdrucksanweisungen, if, switch, while, do, for, break, continue, return, throw-try-catch, Anweisungs-Labels, Package-Konzept, Prinzip der Rekursion. Übungen - Lektüre: Beschreibung der Syntax einfacher fiktiver Sprachen mit der Java Notation für Grammatiken, mit Syntaxdiagrammen und mit EBNF-Notation - Vertiefung der systematischen Java-Spracheinführung. Programmierpraktikum: Programmieraufgaben mit primitiven Variablen und Kontrollstrukturen. Literatur für Vorlesung und Übungen/Lektüre: The Java Language Specification, Chap. 2,3,4(teilweise),7(teilweise),14 Session 4: Algorithmen und Datenstrukturen - Teil 1Vorlesung: Vorlesung: Sortieralgorithmen: Bubblesort ,( Merge Sort), Quick Sort - Suchalgorithmen: Binaere Suche auf sortierten Feldern, Hashing (Hierzu werden Listen benötigt, daher wird Hashing nach den Listen und ihren Basisoperationen eingeführt) HINWEIS: Die hier eingeführten Sortier- und Suchalgorithmen kommen mit linearen Datenstrukturen - das sind Arrays und Listen - aus. In der Vorlesung PI2 werden weitere Suchalgorithmen eingeführt, die auf komplexeren Datenstrukturen (Graph-Strukturen, zu denen Bäume und Listen als Spezialfälle gehören) operieren. - Java Klassen zur Realisierung des Kreuzprodukt-Typs - Verzeigerung durch Java-Referenzdatentypen - Listen in Java. Ein komplexeres Paket zur Implementierung von Listen als Abstrakten Datentyp: ListHandler.java
Zur den hierbei verwendeten Abstraktionsfunktionen haben wir eine
Zusammenfassung mit Anwendung erstellt: Abstraktionen
AufgabenblätterIn diesem Abschnitt findet Ihr die Aufgabenblätter und gegebenenfalls Zusatzinformationen für die Lektürestunden zum Herunterladen und ausdrucken. Die Lösungen zu den Aufgabenblättern müssen mit
LaTeX gesetzt werden, dabei sollen die Vorgaben aus pi1-muster.tex und der
Hilfsdatei defs.tex
verwendet werden. Für die Bewertung der Programmieraufgaben haben
wir unsere Grundzüge
aufgeschrieben, ebenso wie Hinweise zum
Kommentieren und Testen der
Programme.
18. November: Das dritte Aufgabenblatt ( postscript , pdf ). Für die erste Aufgabe soll das folgende Programmskelett Sets.java verwendet werden. 2.Dezember: Das vierte Aufgabenblatt ( postscript , pdf ). Für die erste Aufgabe soll das folgende Programmskelett BinSearch3.java aus der Vorlesung verwendet werden. Achtung: Die erste Version enthielt einen Fehler, der mittlerweile korrigiert ist. Nachdem die Methode pushElement bereits in der Vorlesung diskutiert wurde, stellen wir diese auch in BinSearch3.java zur Verfügung. Bei den Methoden binsearch und quicksort sei darauf hingewiesen, daß diese jeweils auf dem gesamten Array operieren sollen, ungeachtet des Wertes von NumElems.
Aufgabe 1 a) soll dabei mit einer Java Methode implementiert werden,
die ohne Rekursion zur Lösung kommt (etwa mit einer
while-Schleife...).
Zur ersten Aufgabe hat es einige Nachfragen gegeben, die Aufgabenstellung ist (teilweise) interpretationsfähig. Mit Durchlaufen der Liste (- von rechts nach links, bzw. - von links nach rechts) ist gemeint, daß jeweils auch eine Ausgabe der Listenelemente damit verbunden ist. Der Unterpunkt Ausgabe der Listenelemente entfällt somit, da bereits abgedeckt. |
||||||
Autor: jp |
||||||
AG Betriebssysteme, Verteilte Systeme |
|