Einführung in die Programmierung für Studierende der Naturwissenschaften

Semester:Sommersemester 2020
Zeit/Ort:Online-Kurs
Dozent:Christian Palus
E-Mail Dozent:christian.palus@mathematik.uni-freiburg.de
Sprechstunde des Dozenten:n.V., Zi. 204, Hermann-Herder-Str. 10
Assistent:Ludwig Striet
E-Mail Assistent:ludwig.striet@mathematik.uni-freiburg.de
Sprechstunde des Assistenten:n.V., Zi. 228, Hermann-Herder-Str. 10

Aktuelles

  • Für die Tutorate am Pfingstmontag gibt es einen Ersatztermin. Sie erhalten dazu eine E-Mail von Ihrem Tutor.
  • Die Einteilung der Übungsgruppen ist abgeschlossen. Nach Absprache mit den Tutoren kann die Abgabe der Lösungen auch tutoratsübergreifend erfolgen.
  • Bitte denken Sie daran, sich in HISinOne sowohl für den Kurs selbst als auch für die Tutorate anzumelden. Ohne Anmeldung zum Kurs kann keine Erfassung der Studienleistung erfolgen. Verspätete Anmeldungen für den BOK-Kurs bitte per E-Mail an Frau Fimmen vom ZfS: Katja.Fimmen@zfs.uni-freiburg.de
  • Die Anmeldung für die Übungsgruppen erfolgt über HISinOne im Zeitraum vom 5. bis 10. Mai.
  • Informationen zu den Projekten sind jetzt unten auf der Webseite verlinkt
  • Wenn Sie Ihr Projekt nicht in dem in der pdf-Datei aufgeführten Zeitslot präsentieren können, schicken Sie bitte ein E-Mail mit kurzer Begründung und alternativem Terminwunsch an ludwig.striet@mathematik.uni-freiburg.de
  • Es wird insgesamt 10 reguläre Übungsblätter mit jeweils 15 regulär zu erreichenden Punkten und ein zusätzliches Übungsblatt mit Bonuspunkten geben.
  • Der Vorläufige Zeitplan für die Projektvorstellung ist jetzt online. Bitte Schreiben Sie eine Mail an ludwig.striet@mathematik.uni-freiburg.de, falls es damit Probleme gibt, Sie sich auf dem Plan nicht finden o.Ä. Die schriftlichen Ausarbeitungen sollen bis zum Tag der Präsentation abgegeben werden.
  • Von allen Vortragenden wird Anwesenheit während der Präsentationen der Gruppe erwartet (d.h. jeweils ein gesamter Vor/Nachmmitag). Die Präsentationen finden online über BigBlueButton statt.
  • Eine aktuelle Version (Stand 30.7.) des Zeitplans findet sich unter Zeitplan
  • Die Vorträge finden über BigBlueButton (wie die Tutorate) im virtuellen Raum Topalov statt

Inhalte

Die Veranstaltung bietet eine Einführung in die Programmierung mit theoretischen und praktischen Einheiten. Schwerpunkte der Veranstaltung sind:

  • Logische Grundlagen der Programmierung
  • Elementares Programmieren in C++
  • Funktionsweise eines Prozessors
  • Felder, Zeiger, abgeleitete Datentypen, (Datei-)Ein- und -ausgabe
  • Algorithmik
  • Programmieren und Visualisieren in MATLAB
  • Funktionsweise eines Compilers
  • Paralleles und objektorientiertes Programmieren
  • Aspekte der IT-Kommunikation

Die praktischen Inhalte werden in der Programmiersprache C++ sowie in MATLAB erarbeitet. Die erworbene Kenntnisse werden anhand von Übungen und Hausaufgaben erprobt und vertieft.

Struktur des Kurses

Der Kurs setzt sich in diesem Semester aus drei Teilen zusammen:

  • Selbststudium auf Basis des bereitgestellten Skripts mit begleitenden Beispielen und Erklärvideos
  • Bearbeitung von wöchentlichen Hausaufgaben und deren Besprechung
  • Projektarbeit mit Kurzpräsentation am Ende des Semesters

Hausaufgaben

Die Übungsblätter werden immer montags auf dieser Seite veröffentlicht. Genauere Infos zur Abgabe folgen. Einmal wöchentlich finden Online-Tutorate statt, in denen die Übungsaufgaben besprochen und Fragen gestellt werden können.

Projektarbeit

Bis zum Semesterende ist ein selbst gewähltes Thema im Rahmen eines (Programmier-)Projekts zu bearbeiten. Eine Liste mit Themenvorschlägen wird demnächst hier verfügbar sein, gerne können Sie auch eigene Vorschläge machen. Das Thema Ihres Projekts muss bis zum 28.06.2020 feststehen. Am Ende des Semesters - voraussichtlich in der ersten Augustwoche - wird es pro Übungsgruppe eine Blockveranstaltung geben, in welcher die bearbeiteten Projekte in Kurzvorträgen (ca. 15 Minuten) vorgestellt werden.

Studienleistung

Es gelten die Bedingungen des ZfS. Bei den Übungen ist eine Anwesenheit von mindestens 80% notwendig. Eine aktive Teilnahme an den Übungsgruppen wird erwartet. Bei den Übungsblättern müssen mindestens 65% der zu vergebenden Punkte erreicht werden. Jeder Aufforderung zur genaueren Erläuterung einer eingereichten Lösung seitens der Tutoren ist nachzukommen. Bis zum Ende der Vorlesungszeit ist eine Projektarbeit anzufertigen und in einem Vortrag vorzustellen.

Kursmaterial

Das Kursmaterial wird laufend ergänzt. Sie sollten sich die Kursinhalte durch Selbststudium des Kursskripts aneignen. Ergänzend dazu finden Sie im Folgenden Videotutorials und Beispiele.

Skript

Kursskript (21.07.2020)

Videotutorials

Intro (11.05.2020)
Kapitel 1 (20.05.2020)
Kapitel 2 (02.06.2020)
Kapitel 3 (Teil A) (08.06.2020)
Kapitel 3 (Teil B) (16.06.2020)
Kapitel 4 (23.06.2020)
Kapitel 5 (30.06.2020)
Kapitel 6 (16.07.2020)
Kapitel 7 (21.07.2020)

Beispieldateien

Kapitel 1:
hallo.cc, wurzel.cc, einaus.cc, if_else.cc, switch.cc, while.cc, for.cc, goto.cc, funktion.cc, funktion2.cc.

Kapitel 2:
Bauteile eines Computers, Hauptplatine, NPN-Transistor, Logisches ODER auf einer Steckplatine, Interne Kontaktreihen der Steckplatine.

Kapitel 3:
pointer.cc, call-by-reference.cc, array-pointer.cc, dyn-array.cc, function-pointer.cc, char-feld.cc, strings.cc, vector.cc, datei-schreiben.cc, datei-lesen.cc, koordinaten.txt, main-param.cc, namevector.cc, namevector.hh.

Kapitel 4:
bank-accout.cc, template.cc.

Kapitel 6:
hello.m, quot.m, if_abfrage.m, switch_verzweigung.m, for_schleife.m, while_schleife.m. veknorm.m, vectorize.m.

Kapitel 7:
omp-hello.cc, omp-ex.cc, omp-lin-alg.cc.

Übungen:
timer_example.cc, timer.h.

Sonstiges

Erste Schritte in Code::Blocks
Kurzanleitung C++ (20.05.2020)

Projekte

Eine Liste mit Projektvorschlägen sowie Informationen zum Ablauf finden Sie jetzt unter Projekte.
Die Bearbeitung der Projekte sollte in Zweiergruppen erfolgen. Bei Einzelbearbeitung verkürzen sich Vortrag und Ausarbeitung nicht!

Übungsblätter

Die Bearbeitung und Abgabe der Lösungen sollte in Zweiergruppen erfolgen. Für die Abgabe von Programmen gilt:

  • Es sind lediglich die Quelldateien abzugeben.
  • Alle Teile des Quellcodes, die nicht absolut selbsterklärend sind, müssen kommentiert werden.
  • Beginnend mit Blatt 4 gilt: Abgaben, die sich nicht kompilieren lassen, werden nicht bewertet.

Hinweis: Mit jeder Abgabe einer Lösung versichern Sie, dass Sie diese selbstständig erarbeitet haben. Kopierte Lösungen werden mit 0 Punkten bewertet und können zum Ausschluss aus dem Kurs führen. Bei Zweifeln an einer selbstständigen Arbeitsweise haben die Tutoren das Recht, jederzeit weitere Erklärungen zu einer abgegebenen Lösung einzufordern.

Blatt Ausgabe Abgabe
Blatt 011.05.2020keine Abgabe
Blatt 114.05.202021.05.2020, 12 Uhr
Blatt 221.05.202028.05.2020, 12 Uhr
Blatt 328.05.202004.06.2020, 12 Uhr
Blatt 404.06.202011.06.2020, 12 Uhr
Blatt 511.06.202018.06.2020, 12 Uhr
Blatt 618.06.202025.06.2020, 12 Uhr
Blatt 725.06.202002.07.2020, 12 Uhr
Blatt 802.07.202009.07.2020, 12 Uhr
Blatt 909.07.202016.07.2020, 12 Uhr
Blatt 1016.07.202023.07.2020, 12 Uhr
Blatt 1123.07.202030.07.2020, 12 Uhr

Korrekturen

  • Blatt 10: Notwendiges Vorwissen: Kursskript bis einschließlich Kapitel 6.

Dateien

Übungsgruppen

Die Übungsgruppen finden zunächst online statt.

Gruppe Tutor Zeit/Ort
1 Robin Burchard Mi 14-16 Uhr, Virtueller Raum Topalov
2 Sebastian Friedrich Mi 16-18 Uhr, Virtueller Raum Topalov
3 Felix Schmieder Di 14-16 Uhr, Virtueller Raum Topalov
4 Johannes Klüppel Di 16-18 Uhr, Virtueller Raum Topalov
5 Ludwig Striet Mo 14-16 Uhr, Virtueller Raum Topalov
6 Tobias Engler Mo 16-18 Uhr, Virtueller Raum Topalov

E-Mail-Adressen der Tutoren:

Robin Burchard: robin.burchard@uranus.uni-freiburg.de
Sebastian Friedrich: sebastian.friedrich@merkur.uni-freiburg.de
Felix Schmieder: einprog19@gmail.com
Johannes Klüppel: johannes.klueppel@mars.uni-freiburg.de
Ludwig Striet: ludwig.striet@mathematik.uni-freiburg.de
Tobias Engler: tobias.engler@neptun.uni-freiburg.de

Software

  • Unter Linux bietet es sich an, mit dem C/C++-Compiler der GNU Compiler Collection zu arbeiten. Die Installation kann in der Regel über das Paketmanagement der Linux-Distribution erfolgen. Verbreitete und anfängerfreundliche Linux-Distributionen sind beispielsweise Ubuntu, Linux Mint oder Pop!_OS. Diese können einfach parallel zu einem bereits vorhanden Betriebssystem auf der Festplatte installiert werden.
  • Die einfachste Variante unter Windows ist vermutlich die Verwendung einer Entwicklungsumgebung (IDE) mit integriertem Compiler, z.B. Code::Blocks. Unter Windows 10 kann man alternativ das Windows-Subsystem für Linux verwenden, um direkt in Windows eine Linux-Umgebung zu installieren.
  • Unter macOS kann man ebenfalls die GNU Compiler Collection verwenden. Dazu einfach im Terminal g++ eingeben. Falls GCC noch nicht vorhanden ist, erscheint eine Fehlermeldung und ein Fenster, in welchem "install" ausgewählt werden muss (funktioniert ab OS X 10.9 Maverick, getestet mit macOS 10.14 Mojave). Anschließend kann der Compiler im Terminal aufgerufen werden. Alternativ kann man die Entwicklungsumgebung Xcode installieren und verwenden.
  • Kurze C++-Programme können Sie auch in der Online-Shell http://cpp.sh entwickeln und testen. Alternativen sind der etwas umfangreichere Online Compiler and Debugger https://www.onlinegdb.com, der sich allerdings noch im Betastadium befindet, sowie die Seite rextester.com, wo man sogar kollaborativ arbeiten kann. Diese Online-Tools ermöglichen einen schnellen Einstieg, sind jedoch im Umfang sehr eingeschränkt.
  • Eine freie, weitestgehend kompatible Alternative zu MATLAB ist GNU Octave. Diese Software ist für die Inhalte des Kurses vollkommen ausreichend.
  • Bei Bedarf können Sie sich auch eine kostenlose MATLAB-Studentenlizenz besorgen (siehe Informationen des RZ zur MATLAB-Lizenz) und damit MATLAB auf Ihrem Rechner installieren oder die Online-Version im Browser benutzen.

Literatur

Online Tutorials