Informatik I (252-0835-00L)


Vorlesung am D-ITET, HS 2017, Felix Friedrich

Datum Mitteilung
28.6.2018 Prüfung vom Februar und Lösung online

Termine

VorlesungMittwoch 08:15 - 10:00 ETF E1
ÜbungenMontag 10:15-12:00, 13:15-15:00, 15:00-17:00, 17:00-19:00 Verschiedene Räume (s.u.)

Lernziel und Überblick

Primäres Lernziel der Vorlesung ist die Befähigung zum Programmieren mit C++. Studenten beherrschen nach erfolgreichem Abschluss der Vorlesung die Mechanismen zum Erstellen eines Programms, sie kennen die fundamentalen Kontrollstrukturen, Datenstrukturen und verstehen, wie man ein algorithmisches Problem in ein Programm abbildet. Sie haben eine Vorstellung davon, was "hinter den Kulissen" passiert, wenn ein Programm übersetzt und ausgeführt wird. Sekundäre Lernziele der Vorlesung sind das Computer-basierte, algorithmische Denken, Verständnis der Möglichkeiten und der Grenzen der Programmierung und die Vermittlung der Denkart eines Computerwissenschaftlers.

Wir behandeln fundamentale Datentypen, Ausdrücke und Anweisungen, (Grenzen der) Computerarithmetik, Kontrollanweisungen, Funktionen, Felder, zusammengesetze Strukturen und Zeiger. Im Teil zur Objektorientierung werden Klassen, Vererbung und Polymorhpie behandelt, es werden exemplarisch einfache dynamische Datentypen eingeführt. Die Konzepte der Vorlesung werden jeweils durch Algorithmen und Anwendungen motiviert und illustriert.

Zeitplan, Folien und Übungen

Dies ist ein Plan und als solcher unterliegt er Änderungen -- auch und insbesondere nach Semesterbeginn.

Woche Datum Thema/Folien Übungen, Lösungsskizzen Folien und Handouts Programme
1 20.09. Einführung, Ausdrücke und Anweisungen
Berechnen mit dem Computer, Algorithmen, Turing Maschinen, Von Neumann Architektur, Programmiersprachen, Werkzeuge der Programmierung, Korrektheitsbegriffe, das erste C++ Programm
Organisatorisches
Exercise 1
Lösung 1
C++ Übersicht 1

Bearbeiten Sie das C++ Tutorial bis zur ersten Übungsstunde!
Organisatorisches (handout) (english)
Folien 1 (handout) (english)
[power8.cpp]
Illustration Erstes Programm -- Zusammengefasst
2 27.09. Ganzzahlarithmetik und deren Grenzen
Auswertung arithmetischer Ausdrücke, arithmetische Operatoren, Assoziativität und Präzedenz, Wertebereiche der Typen int und unsigned int; Ganzzahldarstellung
Exercise 2
Lösung 2
C++ Übersicht 2

Self Assessment I
Folien 2 (handout) (english)
Ausdruckswert
Zaubertrick
[fahrenheit.cpp]
[limits.cpp]
3 4.10. Boole'sche Funktionen, Sicheres Programmieren, Kontrollfluss I
Boole'sche Funktionen; der Typ bool; logische und relationale Operatoren; Kurzschlussauswertung; Sicheres Programmieren: Assertions, Auswahlanweisungen, Iterationsanweisungen, Terminierung, Blöcke
Exercise 3
Lösung 3
C++ Übersicht 3
Folien 3 (handout) (english)
Konversion
XOR
For-Loop
[divmod.cpp]
[prime.cpp]
[sum_n.cpp]
4 11.10. Kontrollfluss II, Fliesskommazahlen I
Sichtbarkeit, Lokale Variablen, While-Anweisung, Do-Anweisung, Sprunganweisungen; Typen float und double; Gemischte Ausdrücke und Konversionen; Löcher im Wertebereich
Exercise 4
Lösung 4
C++ Übersicht 4
Folien 4 (handout) (english)
Loops
FloatingPoint Loop
[collatz.cpp],
[euler.cpp],
[diff.cpp]
5 18.10. Fliesskommazahlen II, Funktionen I
Fliesskommazahlensysteme; IEEE Standard; Grenzen der Fliesskommaarithmetik; Fliesskomma-Richtlinien; Harmonische Zahlen; Funktionsdefinitionen- und Aufrufe, Auswertung von Funktionsaufrufen, Der Typ void, Vor- und Nachbedingungen
Exercise 5
Lösung 5
C++ Übersicht 5
Folien 5 (handout) (english)
Hundertzehn
Overhang
[harmonic.cpp],
[accuracy.cpp],
[callpow.cpp]
6 25.10. Funktionen II, Referenztypen
Stepwise Refinement, Gültigkeitsbereich, Bibliotheken, Standardfunktionen, Referenztypen
Exercise 6
Lösung 6
C++ Übersicht 6

Self Assessment II
Folien 6 (handout) (english)
Intervalle
[callpow2.cpp],
[prime2.cpp]
7 01.11. Referenztypen, Homogene Datenstrukturen: Felder und Strings I
Referenztypen: Definition und Initialisierung, Call By Value , Call by Reference, Temporäre Objekte, Konstanten und Const-Referenzen Feldtypen, Sieb des Eratosthenes, Speicherlayout, Iteration, Vektoren, Zeichen, Texte, Caesar-Code,
Exercise 7
Lösung 7
C++ Übersicht 7
Folien 7 (handout) (english)
Funktion/Effekte
Referenzen
[eratosthenes.cpp],
[eratosthenes2.cpp],
[caesar_encrypt.cpp],
[caesar_decrypt.cpp]
8 08.11. Felder und Strings II, Zeiger, Algorithmen, Iteratoren und Container I
Mehrdimensionale Felder, Vektoren von Vektoren, Kürzeste Wege, Felder und Vektoren als Funktionsargumente, Zeiger, Address- und Dereferenzoperator, Zeiger-Arithmetik, Feld-Zeiger Konversion
Exercise 8
Lösung 8
C++ Übersicht 8 Lindenmayer: DEMO
Lindenmayer: C++ files
Folien 8 (handout) (english)
Kürzeste Wege
[lindenmayer.cpp],
[bush.cpp]
[snowflake.cpp]
[rainbowflake.cpp]
[dragon.cpp]
[shortest_path.cpp]
Turtle graphics sources (zipped)
9 15.11. Zeiger, Algorithmen, Iteratoren und Container II
Felder als Funktionsargumente, Iteratoren auf Vektoren, Container
Rekursion I Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel
Exercise 9
Lösung 9
C++ Übersicht 9
Folien 9 (handout) (english)
Pointers
[filling arrays],
[filling arrays with templates],
[vector iteration],
[fibonacci.cpp],
[fibonacci2.cpp]
10 22.11. Rekursion
Bau eines Taschenrechners, EBNF, Parsen von Ausdrücken
Exercise 10
Lösung 10
C++ Übersicht 10

Self Assessment III
Folien 10 (handout) (english)
[checksum.cpp],
[expression_parser],
[calculator.cpp],
[simple_calculator_l.cpp],
[simple_calculator_r.cpp],
[calculator_r.cpp],
[calculator_l.cpp]
11 29.11. Structs und Klassen (I)
Rationale Zahlen, Struct-Definition, Operator-Überladung, Datenkapselung
Exercise 11
Lösung 11
C++ Übersicht 11
Folien 11 (handout) (english)
Rekursion
[rationals_initial.cpp],
[rationals_with_operators.cpp]
12 06.12. Klassen (II)
Klassen-Typen, Memberfunktionen, Konstruktoren, verkettete Liste, Stapel, dynamischer Speicher, Kopierkonstruktor, Zuweisungsoperator, Destruktor, Konzept Dynamischer Datentyp
Exercise 12
Lösung 12
C++ Übersicht 12
Folien 12 (handout) (english)
Eisenbahn
Konstruktoren
[rationals_with_classes.cpp],
[stack.cpp]
13 13.12. Klassen-Typen, Kopierkonstruktor, Zuweisungsoperator, Destruktor, Konzept Dynamischer Datentyp
Vererbung und Polymorphie Vererbung, Code-Wiederverwendung, virtuelle Funktionen, Polymorphie
Exercise 13
Lösung 13
Keine C++ Übersicht 13

Self Assessment IV (11./12.12.)
Self Assessment IV Addendum
Folien 13 (handout) (english)
Konstruktoren (2)
[CatsAndDogs.cpp]
[Figures.cpp]

[texpression_test.cpp],
[double_calculator.cpp],
[texpression_calculator.cpp], [xexpression_test.cpp]
14 20.12. Ausdrucksbäume, Wdh. Vererbung und Polymorphie, Konzepte des objektorientierten Programmierens Folien 14 (handout) (english)

Alle Folien (handout) (english)

Zusammenfassung der Vorlesungen auf 19 Seiten

Lindenmayer Bilder

Übungen

Einschreibung für die Übungen

Die Einschreibung erfolgt online gemeinsam mit der Einschreibung für Analysis I. Sie bekommen, sobald Sie sich für die Vorlesung eingeschrieben haben, einen Link zugesendet, mit dem Sie sich entsprechend registrieren können.

Orte und Zeiten

Die Übungsgruppen sind derzeit wie folgt zugeteilt:

Zeit Ort Assistent
Mo, 10:15 - 12:00 CAB G 57 * Francois Serre
Mo, 10:15 - 12:00 CHN G 46 Marc Bitterli
Mo, 13:15 - 15:00 CHN F 42 Christoph Amevor
Mo, 13:15 - 15:00 ETZ F 91 Sean Bone
Mo, 13:15 - 15:00 ETZ G 91 Robin Worreby
Mo, 13:15 - 15:00 ETZ H 91 Christelle Gloor
Mo, 15:15 - 17:00 CHN D 48 Hossein Shafagh
Mo, 15:15 - 17:00 ETZ F 91 Yvan Bosshard
Mo, 15:15 - 17:00 ETZ G 91 Alessio Bähler
Mo, 15:15 - 17:00 ETZ H 91 Alexander Hedges
Mo, 17:15 - 19:00 ETZ F 91 Temmy Bounedjar
Di, 13:15 - 15:00 ETZ J 91 Patrik Hadorn
Di, 13:15 - 15:00 RZ F 21 Michael Prasthofer
Di, 15:15 - 17:00 ETZ F 91 Nathaneal Köhler
Di, 17:15 - 19:00 CHN D 42 * Ivana Unkovic

*: Engl. Übungsgruppe

Kontakt

Chefassistent: Martin Bättig, martin.baettig (at) inf.ethz.ch

Bonuspunkte

  • Ab HS 2013 für Prüfungszulassung kein Testat mehr erforderlich. Bearbeitung der wöchentlichen Uebungsserien ist freiwillig, wird aber dringend empfohlen!
  • Als zusätzliche Motivation, können Sie Bonuspunkte mittels regelmässigem Bearbeiten der wöchentlichen Übungsserien während des Semesters erhalten.
  • Sie erhalten Punkte für jede rechtzeitig eingereichte, korrekt gelöste Übungsserie. Die Punkte werden über das Semester hinweg aufsummiert.
  • Der Notenbonus wird proportional zu den erreichten Bonuspunkten errechnet. Alle Bonuspunkte zusammen ergeben einen Notenbonus von 0.25.

Prüfung

Prüfungsstoff für die Endprüfung, welche in der Prüfungssession FS 2015 (ebenso wie Informatik II) stattfinden wird, schliesst Vorlesungsinhalt und Übungsinhalte ein. Zusätzliche Informationen aus dem Skript werden nicht an der Prüfung verlangt.

Die Prüfung ist schriftlich und es sind keine Hilfsmittel zugelassen (ausser Wörterbücher für gesprochene Sprachen).

Vergangene Prüfungen

Unterrichtsmaterialien

Folien, Übungen und Skript

Die Vorlesungsunterlagen bestehen aus Vorlesungsfolien und Übungsunterlagen. Die Vorlesungsfolien sind auf Deutsch verfasst und stellen zusammen mit den Übungsblättern den Prüfungsstoff dar. Die erste Übungsserie und die Folien zur Vorlesung werden in der ersten Vorlesungswoche aufgeschaltet.

Zusätzlich gibt es ein Skript, welches in Englisch verfasst ist und in einer freien elektronischen Form zum Download bereit steht. Dieses Skript wurde freundlicherweise von Prof. Bernd Gärtner zur Verfügung gestellt und deckt grosse Teile des C++ Teils der Vorlesung ab.

Tutorial

Zum erleichterten Einstieg in die Vorlesung, insbesondere für Anfänger im Programmieren, stellen wir dieses Jahr wieder ein Einstiegstutorial zur Verfügung, welches im Eigenstudium durchlaufen werden kann. Wir empfehlen die frühzeitige Bearbeitung.

C++ Tutorial Öffnen

Hinweis: Das Tutorial ist in deutscher und englischer Sprache verfügbar. Sie können innerhalb des Tutorials jederzeit die Sprache wechseln.

Literatur

Der Kurs sollte selbsterklärend sein. Dort wo die Folien und Skript nicht genügen, kann Recherche im Internet helfen. Folgendes Buch gibt eine sehr ausführliche Einführung in die Programmierung mit C++.

Darüber hinaus sind folgende Bücher interessant, eher aber für fortgeschrittene Programmierer.

Links