Programmierung I   —   Wintersemester   05/06

Programmieren ist eine Fertigkeit, die unabdingbar ist, um in der praktischen Informatik schnell und effizient Ideen umsetzen zu können.

In dieser Vorlesung soll das wesentliche Wissen zu einer flüssigen Beherrschung einer komplexen, objekt-orientierten Programmiersprache erlernt und geübt werden. Die Programmiersprache wird C++ sein.

Aus dem Inhalt:

  1. Einfuehrung in Unix/Linux
  2. Einstieg in C (File I/O, Aggregate, Pointer)
  3. Dynamischer Speicher,
  4. Funktionen, Scope, Rekursion, Overloading
  5. Klassen, Operatoren
  6. Polymorphie
  7. Templates

Ziel: Die Studenten sollen am Ende in der Lage sein, ein gegebenes Problem objekt-orientiert zu lösen, und mit den Mitteln von C++ umzusetzen. Höhere Konzepte, wie z.B. Meta-Programming, sollen mindestens vom Prinzip verstanden sein.

Was Sie vorab schon tun können:

Übersicht

Folgende Übersicht zeigt die geplanten Themen und die ungefähre Zeittafel. Je nach Bedarf können sich Verschiebungen und Last-Minute-Änderungen ergeben. Die Literaturangaben sollen nur ein Tip sein; sie sind weder vollständig noch verweisen sie auf die bestmögliche Literatur. Die behandelten Themen stehen ganz ähnlich in ziemlich jedem anderen Buch/Tutorial über C/C++ (bzw. Unix).

Datum Thema Folien, 6up Folien, 4up Folien, 2up Übungs-
aufgaben
Literatur
27.10. Intro (& Imm.feier) PDF1 PDF1 PDF1 Blatt 0
3.11. Unix PDF PDF PDF Blatt I LF "Erste Schritte", "Dateisystem" und teilweise "Shells"->"Csh und Tcsh"
10.11. Unix (Rest) PDF PDF PDF Blatt II LF "Erste Schritte", "Dateisystem" und teilweise "Shells"->"Csh und Tcsh"
17.11. Hello World, Edit-Debug-Compile-Zyklus, Basics PDF
PDF
PDF
PDF
PDF
PDF
Blatt III PIC "Der Einstieg", "Ausdrücke" und teilweise "Anweisungen"
24.11. Basics (IEEE, short-cut, precedence, promotion), File-IO PDF1
PDF2
PDF1
PDF2
PDF1
PDF2
Blatt IV PIC "Ausdrücke" und "Bildschirm I/O"
1.12. Kontrollstrukturen PDF PDF PDF Blatt V PIC "Anweisungen"
8.12. Arrays, Strings, Enums PDF1
PDF2
PDF1
PDF2
PDF1
PDF2
Blatt VI PIC "Datenstrukturen"
15.12. Structs, Komposition PDF PDF PDF Blatt VII PIC "Datenstrukturen"
22.12. Funktionen, Rekursion PDF PDF PDF Blatt VIII PIC "Funktionen"
12.1. Funktionen Rest (Lifetime, Scope, Linkage, Verdeckung, Default-Arg., Polymorphie, Dokumentation, Libraries) PDF PDF PDF Blatt IX
Code IX
PIC "Funktionen"
19.1. Pointer (Einführung, strong/weak typing) PDF PDF PDF Blatt X PIC "Zeiger"
26.1. Listen, Dynamic Memory Allocation PDF1 PDF2 PDF1 PDF2 PDF1 PDF2 Blatt XI PIC "Zeiger"
2.2. Pointer und Funktionen (Call-by-Value, Call-by-Reference, Return-by-...); Klassen (OOD, Einführung, Definition, Verwendung) PDF1 PDF2 PDF1 PDF2 PDF1 PDF2 Blatt XII PIC "Zeiger"
9.2.

Kürzel der Literaturhinweise (Links siehe unten):
LF = Linxufibel
PIC = Programmieren in C, Vorgängerversion von GoTo C Programmierung, leicht geänderte Kapitelbezeichnungen möglich.
LtP = Learning to Program
TIC = Thinking in C++, die Zahlen bedeuten die Seitennummern der Online-Version (s.u.); die entsprechenden Seitenzahlen im Buch sind leicht verschoben.

Unter Linux können Sie die PDF-Files mit acroread, xpdf oder gv lesen.
Postscript-Files können Sie mit gv lesen. Wenn Sie sie ausdrucken wollen, müssen Sie diese erst mit gunzip dekomprimieren, dann mit lpr zum Drucker schicken.

Die Folien sind kein Skript! Die Folien alleine reichen zum Nacharbeiten der Vorlesung nicht aus!

Vorschau

Die folgende Tabelle enthält einige Foliensätze als Vorschau. Sie sind kapitelweise organisiert, und nicht wochenweise. Kleinere "last-minute" Änderungen behalte ich mir vor. Die definitiven Folien sind in der obigen Tabelle zu finden.
Kapitel Thema Folien, 6up Folien, 4up Folien, 2up
4 File IO (stdio, printf, scanf, puts, gets) PDF PDF PDF
5 Konrtollstrukturen (Blöcke, Schleifen, Bedingungen, etc.) PDF PDF PDF
6 Arrays PDF PDF PDF
7 Aggregate (enum, struct, union) PDF PDF PDF
8 Funktionen (Call-by-..., Rekursion, Polymorphie) PDF PDF PDF
9 Pointer & Referenzen PDF PDF PDF

Klausur

Klausureinsicht

Die Klausureinsicht findet am 21.2.2006 von 10.00 bis 12.00 Uhr im Institut für Informatik im Raum 106 oder 121 statt.

Nachprüfungen

Gibt es nur bei Püfungsklausuren, also nur für die Studenten des Wirtschaftsingenieurwesens nach neuer DPO. Die mündlichen Nachprüfungen werden am 24.2.2006 ab 9.00 Uhr im Institut für Informatik (Büro von Prof. Zachmann) stattfinden. Es ist eine Anmeldung über eVE dazu erforderlich. Die jeweiligen Anfangszeiten der Prüfungen werden wir an die im eVE eingetragene E-Mail Adresse versenden. Halten Sie diese aktuell und rufen Sie Ihre E-Mails ab. Sollten Sie keine E-Mail erhalten, erscheinen Sie am 24.2.2006 pünktlich um 9.00 Uhr. Falls alle Plätze belegt sind, Sie aber teilnehmen wollen, melden Sie sich bei giesemann(at)in.tu-clausthal.de per E-Mail, es wird dann weitere Termine geben.

Statistiken

Folgen hier in der nächsten Woche.

Die "Ganze Klausur" haben 59% bestanden.
Die "Halbe Klausur" haben 35% bestanden.

Insgesamt haben 43% die Klausuren bestanden.

Ergebnisse

"Ganze" Klausur
"Halbe" Klausur

Klausuren

"Ganze" Klausur
"Halbe" Klausur


Voraussetzung zur Klausurteilnahme: 50% der gesamten Punkte aller 12 Übungsblätter und mindestens 25% der Punkte von jedem Übungsblatt. Die 25% Regel darf einmal verletzt werden.
Bemerkungen: Die Klausur wird am 14.2.2006 ab 12.00 Uhr stattfinden.
Zur Klausur wird eine weitere Anmeldung über eVE Informatik-Seite (unten links) nötig sein.
Studiengänge, bei denen es sich um eine Prüngsleistung handelt, müssen sich zur Klausur zusätzlich noch im Prüfungsamt anmelden!

Die Hörsaalaufteilung und Anfangszeiten

Diese Verteilung nach Studiengängen und Matrikel-Nummern (nur bei BWL) ist unbedingt zu beachten!
(Ausnahmen sind nur Sonderabsprachen mir (Dipl.-Inf. C. Giesemann)).
Bei den Wirtschaftsingenieuren muß zwischen alter und neuer DPO (Diplomprüfungsordnung) unterschieden werden. Bitte beachten Sie dieses, da hier unterschiedliche Klausuren geschrieben werden! Diejenigen Wirtschaftsingenieure, die im Prüfungsamt angemeldet sind, studieren nach neuer DPO! Nach alter DPO studieren nur die Studenten mit den unten angegebenen Matrikel-Nummern.

Die Klausur zur ganzen Veranstaltung (in den Hörsälen AM und HB) beginnt um 12:30.
Die Klausur zur halben Veranstaltung (in den Hörsälen TM, HA, PH und HL) beginnt um 13:00.
Es sind keine Hilfsmittel (auch keine Wörterbücher) erlaubt!
Beachten Sie bitte die unterschiedlichen Anfangszeiten der halben und ganzen Klausuren!
Finden Sie sich bitte 10 Minuten vor der jeweils angegebenen Anfangszeit im Hörsaal ein, damit die Klausur pünktlich zur genannten Zeit beginnen kann.

Die Aufteilung auf die Hörsäle ist wie folgt:

"Ganze Klausur" Beginn 12:30 in den folgenden 2 Hörsälen:
AM = Auditorium Maximum, TU Hauptgebäude, Adolph-Roemer-Str. 2A

Informatik
Wirtschaftsinformatik
Mathematik
Technomathematik
Wirtschaftsmathematik

HB = Hörsaal B, Institut für Mathematik, Erzstr. 1

Wirtschaftsingenieurwesen NEUE DPO (im Prüfungsamt angemeldet)
Materialwissenschaften und Werkstofftechnik

"Halbe Klausur" Beginn 13:00 in den folgenden 4 Hörsälen:
TM = Großer Hörsaal Technische Mechanik, TU Hauptgebäude, Adolph-Roemer-Str. 2A

Maschinenbau

HA = Hörsaal A

Umweltschutztechnik
Chemieingenieurwesen
Informationstechnik
Verfahrenstechnik
Energiesystemtechnik
Wirtschaftsingenieurwesen ALTE DPO (Mat.-Nr. 313779, 315678, 316349, 320687)
Ergänzungstudiengang Wirtschaftswissenschaften
Ergänzungstudiengang Chemieing./Verfahrenstechnik

PH = Großer Physik Hörsaal, Institut für Physik, Leibnizstr. 4

BWL nur Matrikel-Nr. 000000 bis 342999

HL = Großer Horst Lutter Hörsaal, Institut für Chemie, Leibnizstr. 8

BWL nur Matrikel-Nr. 343000 bis 999999
Metallurgie
Petroleum Engineering
Geotechnik, Bergbau, Erdöl-/Erdgastechnik

Alte Klausur
Achtung: Diese Alte Klausur dient nur als Muster für die Aufgabetypen -- inhaltlich könnte alles das (aber auch nur das) vorkommen, was in der Vorlesung und in der Übung behandelt wurde (also kein Python, etc.).

Literatur

C-Bücher: C++-Bücher gibt es wie Sand am Meer. Folgende sind recht brauchbar: Vorsicht vor deutschen Übersetzungen: sie enthalten oft eine gräßliche Terminologie!

Auch Unix-Bücher gibt es zuhauf. Als einführendes Buch ist eines der folgenden recht gut:

Bitte beachten sie auch die Online-Literatur, die weiter unten aufgeführt ist.

Übungsbetrieb

Die Übungen beginnen in der 2. Vorlesungswoche (ab 31.10.2005). Zu den Übungen ist eine Anmeldung über eVE Informatik-Seite (unten links) nötig. Weil die 1. Vorlesung wegen der Immatrikulationsfeier gekürzt war, muß in der ersten Übung noch kein Übungsblatt abgegeben werden. Diese erste übung soll dazu genutzt werden alle Fragen bezüglich der übungen zu klären (siehe auch neues Blatt0). Dazu zählen auch welches Linux, welcher Kompiler, Zugang zu den Rechnern und andere Fragen.
Damit die Aufgaben zum Stand der Vorlesung passen ist Blatt 1 nicht mehr gültig (kann nicht mehr angegeben werden!). Es ist durch Blatt I ersetzt worden, welches nun in der gleichen Zeit vom 7.11.-11.11.2005 abzugeben ist. Bis auf weiteres wird daher das Übungsblatt für die jeweils nächste Woche erst nach der Vorlesung (Freitag) auf dieser Seite zu finden sein.


Übungsgruppe Namen E-Mails Zeit Ort
W1161-U-01 Sebastian Magnus
Benjamin Warntjen
Sebastian.Magnus (at) tu-clausthal.de
Benjamin.Warntjen (at) tu-clausthal.de
Mo. 13.00-15.00 IfI-Pool 2 (Raum 302)
W1161-U-02 Marius Gibbels Marius.Gibbels (at) Online.de Mo. 15.00-17.00 IfI-Pool 2 (Raum 302)
W1161-U-03 Marius Gibbels
Michael Köster
Marius.Gibbels (at) Online.de
Michael.Koester (at) tu-clausthal.de
Mo. 17.00-19.00 IfI-Pool 2 (Raum 302)
W1161-U-04 Kristof Deddens
Milan Suklev
Kristof.Deddens (at) web.de
Milan.Suklev (at) tu-clausthal.de
Mo. 19.00-21.00 IfI-Pool 2 (Raum 302)
W1161-U-05 Randolf Ebelt
Daniel Porzig
Randolf.Ebelt (at) tu-clausthal.de
Daniel.Porzig (at) tu-clausthal.de
Di. 8.00-10.00 IfI-Pool 2 (Raum 302)
W1161-U-06 Slawomir Deren Slawomir.Deren (at) tu-clausthal.de Di. 10.00-12.00 IfI-Pool 2 (Raum 302)
W1161-U-07 Martin Gollub
Roland Jablonowski
LuckyLuciano (at) gmx.de
Roland.Jablonowski (at) tu-clausthal.de
Di. 15.00-17.00 IfI-Pool 2 (Raum 302)
W1161-U-08 Dominik Steinborn
Benjamin Warntjen
Dominik.Steinborn (at) tu-clausthal.de
Benjamin.Warntjen (at) tu-clausthal.de
Di. 17.00-19.00 IfI-Pool 2 (Raum 302)
W1161-U-09 Slawomir Deren
Michael Köster
Slawomir.Deren (at) tu-clausthal.de
Michael.Koester (at) tu-clausthal.de
Di. 19.00-21.00 IfI-Pool 2 (Raum 302)
W1161-U-10 Sebastian Magnus
Stephan Simmuteit
Sebastian.Magnus (at) tu-clausthal.de
Stephan.Simmuteit (at) tu-clausthal.de
Mi. 8.00-10.00 IfI-Pool 2 (Raum 302)
W1161-U-11 Dominik Steinborn
Hanna Wiater
Dominik.Steinborn (at) tu-clausthal.de
maryhann20 (at) web.de
Mi. 13.00-15.00 IfI-Pool 2 (Raum 302)
W1161-U-12 Sven Trenkel
Hanna Wiater
trenkel (at) semidefinite.de
maryhann20 (at) web.de
Mi. 15.00-17.00 IfI-Pool 2 (Raum 302)
W1161-U-13 Daniel Porzig
Lars Schittly
Daniel.Porzig (at) tu-clausthal.de
Lars.Schittly (at) tu-clausthal.de
Mi. 17.00-19.00 IfI-Pool 2 (Raum 302)
W1161-U-14 Kristof Deddens
Martin Gollub
Kristof.Deddens (at) web.de
LuckyLuciano (at) gmx.de
Mi. 19.00-21.00 IfI-Pool 2 (Raum 302)
W1161-U-15 Sebastian Magnus
Peter Schulz
Sebastian.Magnus (at) tu-clausthal.de
Peter.Schulz (at) tu-clausthal.de
Do. 8.00-10.00 IfI-Pool 2 (Raum 302)
W1161-U-16 Randolf Ebelt
Roland Jablonowski
Randolf.Ebelt (at) tu-clausthal.de
Roland.Jablonowski (at) tu-clausthal.de
Do. 10.00-12.00 IfI-Pool 2 (Raum 302)
W1161-U-17 Peter Schulz
Sven Trenkel
Peter.Schulz (at) tu-clausthal.de
trenkel (at) semidefinite.de
Do. 13.00-15.00 IfI-Pool 2 (Raum 302)
W1161-U-18 Rainer Drees
Sebastian Magnus
Rainer.Drees (at) heim2.tu-clausthal.de
Sebastian.Magnus (at) tu-clausthal.de
Do. 19.00-21.00 IfI-Pool 2 (Raum 302)
W1161-U-19 Henning Renartz
Stephan Simmuteit
hrenart (at) gmx.de
Stephan.Simmuteit (at) tu-clausthal.de
Fr. 8.00-10.00 IfI-Pool 2 (Raum 302)
W1161-U-20 Mathias Jödicke
Henning Renartz
Mathias.Joedicke (at) tu-clausthal.de
hrenart (at) gmx.de
Fr. 10.00-12.00 IfI-Pool 2 (Raum 302)
W1161-U-21 Rainer Drees
Lars Schittly
Rainer.Drees (at) heim2.tu-clausthal.de
Lars.Schittly (at) tu-clausthal.de
Fr. 13.00-15.00 IfI-Pool 2 (Raum 302)
W1161-U-22 Mathias Jödicke
Milan Suklev
Mathias.Joedicke (at) tu-clausthal.de
Milan.Suklev (at) tu-clausthal.de
Fr. 15.00-17.00 IfI-Pool 2 (Raum 302)

Abgabe
Die Übungen werden in 2er Gruppen bearbeitet (Ausnahmen bitte mit Tutor absprechen) und sind in der Woche (siehe auch Übungsblatt selbst) nach Ausgabe des Übungsblatts zum angemeldeten Termin beim zugewiesenen Tutor abzugeben. Verspätete Abgaben werden nicht berücksichtigt. Die Programme müssen auf den Linux-Rechnern im IFI-Pool lauffähig sein und sind dem Tutor vorzuführen.
Bewertungskriterien für Programmieraufgaben
Punktestände
Werden hier zum Nachsehen wöchentlich aktuallisiert veröffentlicht.

Endstand (vorläufig 8.2.2006) : Punkteliste
Lösungsvorschläge
Die Aufgaben sind zum Teil erst aufrufbar, wenn die Abgabefrist für BWL Studenten am 7. Februar 2006 abgelaufen ist!
  • Blatt I
  • Blatt II
  • Blatt III
  • Blatt IV
  • Blatt V
  • Blatt VI
  • Blatt VII
  • Blatt VIII
  • Blatt IX
  • Blatt X
  • Blatt XI
  • Newsgroup
    Beim Rechenzentrum gibt es die Newsgroup tuc.c-kurs , die von jedem mit RZ-Account abonniert werden kann. Solch eine Liste funktioniert natürlich nur, wenn es auch Kommilitonen gibt, die bereit sind, anderen zu helfen, d.h. Fragen zu beantworten, oder ein Problem gemeinsam zu durchdenken. Code-Sharing ist jedoch verboten! Die Tutoren lesen mit und beantworten auch die Fragen, die sich nicht unter den Teilnehmern klären lassen.
    Mailing-Liste
    Es wird auch ab Vorlesungsbeginn (Donnerstag) eine eigene Mailingliste ckurs@in.tu-clausthal.de . E-Mails an diese Adresse erhalten alle Tutoren und der Leiter des Übungsbetriebs (Dipl.-Inf. Carsten Giesemann). Diese ist als Ergänzung zur Newsgroup zu sehen und sollte nur für Fragen (z.B. Organisatorisches) benutzt werden, die vermutlich nicht von den Komilitonen, sondern nur von den Tutoren oder dem Leiter des Übungsbetriebs beantwortet werden können.

    Downloads zur Bearbeitung der Übungsblätter

    Reference Cards für verschiedene Editoren
    Die Klassen-Boilerplates:
    Wie in der Vorlesung besprochen, empfiehlt es sich, eine neue Klasse ausgehend von den folgenden Boilerplates zu schreiben.
    Header-File C-File

    Online Literatur und Doku

    FAQs (Frequently Asked Questions)

    Link-Sammlungen zu C++ und Unix

    Change Monitoring:

     by ChangeDetection (it's free and it's private).
     by ChangeDetect (it's free and private, too).
    If you enter your email adress in one of the boxes above and then press one of the "Monitor" buttons, then either ChangeDetection or ChangeDetect will send you an email whenever I make changes to this page.
    Gabriel Zachmann
    Last modified: Wed Aug 02 12:37:03 MDT 2006