Datum | Mitteilung |
---|---|
28.6.2018 | Prüfung vom Februar und Lösung online |
Vorlesung | Mittwoch 08:15 - 10:00 | ETF E1 |
---|---|---|
Übungen | Montag 10:15-12:00, 13:15-15:00, 15:00-17:00, 17:00-19:00 | Verschiedene Räume (s.u.) |
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.
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 |
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.
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
Chefassistent: Martin Bättig, martin.baettig (at) inf.ethz.ch
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).
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.
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.
Hinweis: Das Tutorial ist in deutscher und englischer Sprache verfügbar. Sie können innerhalb des Tutorials jederzeit die Sprache wechseln.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.