Die Übungszettel werden ausschließlich online erscheinen und zwar hier auf dieser Seite.

  • Konzepte imperativer Programmierung
    • Zustand, Anweisungen, Kontrollfluss
    • Prozeduren, Funktionen, Aufrufkonventionen
  • grundlegende Datenstrukturen
    • Feld, Liste, Schlange, Stapel
    • Prioritätswarteschlange
  • fundamentale imperative Algorithmen
    • Suchen und Sortieren
    • Komplexitätsanalyse
    • O-Notation
  • Konzepte objektorientierter Programmierung
    • Kapselung, Vererbung, Polymorphie
    • Klassen und Exemplare, Modellierung mit Objekten
  • Wörterbücher
    • Hashtabellen
    • binäre Suchbäume und AVL-Bäume
  • Graphen
    • Grundbegriffe
    • Breitensuche, Tiefensuche
    • minimale aufspannende Bäume und kürzeste Wege
  • Algorithmenentwurf
    • Teile und Herrsche
    • dynamische Programmierung
    • gierige Algorithmen
  • Mittwoch, den 20.04.2016
    • Administrativa
    • Einleitung
      • Modellieren von Problemen mit Graphen
      • Breitensuche
  • Freitag, den 22.04.2016
    • Abschluss Breitensuche
    • Einführung in die imperative Programmierung:
      • Programmierparadigmen: deklarativ und imperativ
      • von-Neumann-Architektur als Grundlage von imperativen Programmiersprachen
      • Zustand und Anweisungen
      • Typen von Anweisungen: Zuweisungen, Kontrollstrukturen, Ein-/Ausgabe
  • Mittwoch, den 27.04.2016
    • Grundlagen der imperativen Programmierung in Python:
      • Zuweisungen
        • Referenzsemantik und Wertesemantik
      • Kontrollstrukturen
  • Freitag, den 29.04.2016
    • Grundlagen der imperativen Programmierung in Python:
      • Kontrollstrukturen
        • Schleifen: Bedingte Schleifen (Beispiel)
      • Ein-/Ausgabe
      • Ausnahmen (Beispiel)
    • Ausführlicheres Beispiel: Zahlenraten
  • Mittwoch, den 04.05.2016
    • Abschluss des Zahlenraten-Beispiels
    • Wurzelziehen
    • Datentypen in Python: einfache Datentypen: Wahrheitswerte (bool), ganze Zahlen (int), Gleitkommazahlen (float), komplexe Zahlen (complex)
  • Freitag, den 06.05.2016
    • Zusammengesetzte Datentypen in Python:
      • Folgentypen (sequences)
        • Listen (lists)
        • Tupel (tuples)
        • Bereiche (ranges)
        • Zeichenketten (strings)
      • Mengen (sets)
      • Assoziativspeicher/ Wörterbücher (dictionaries)
  • Mittwoch, den 11.05.2016
    • Funktionen und Rekursion in Python
      • Funktionen als Mittel zur Strukturierung von Programmen: Beispiel
      • Parameterübergabe: formale und tatsächliche Parameter, Gültigkeitsbereich: Beispiel
      • Rekursive Funktionen: Fakultät und größter gemeinsamer Teiler: Beispiel
  • Freitag, den 13.05.2016
    • Mehr zum euklidischen Algorithmus:
      • iterative Variante
      • Optimierung mit Modulo
      • erweiterter euklidischer Algorithmus
      • Quelltext
    • Rekursion als Mittel zum Entwurf von Algorithmen: das Speisekartenproblem (Rucksackproblem): Quelltext
  • Mittwoch, den 18.05.2016 (vertreten von Paul Seiferth)
    • Suchen und Sortieren in Python
  • Freitag, den 20.05.2016 (vertreten von Paul Seiferth)
    • Suchen und Sortieren in Python
      • binäre Suche
      • Insertion Sort
      • Merge Sort
      • Quicksort
    • Quelltext
  • Mittwoch, den 25.05.2016
    • binäre Heaps, bubbleUp und bubbleDown
    • Heap Sort
    • Quelltext
  • Freitag, den 27.05.2016
    • Analyse von imperativen Algorithmen:
      • Korrektheit, Spezifikation
      • Effizienz, abstrakte Maschinenmodelle, worst-case Laufzeit
    • O-Notation
  • Mittwoch, den 01.06.2016 (vertreten von Yannik Stein)
    • O-Notation
    • Laufzeit von Sortieralgorithmen
  • Freitag, den 03.06.2016 (vertreten von Yannik Stein)
  • Mittwoch, den 08.06.2016
    • ein längeres Beispiel in Java: Insertion Sort und binäre Suche
    • Java-Notizen von Klaus Kriegel: Link
    • Wege aus der Softwarekrise:
      • strukturierte und prozedurale Programmierung
      • modulare Programmierung
      • objektorientierte Programmierung
  • Freitag, den 10.06.2016
    • Objekte: Attribute, Methoden, Identität
    • Klassen: Vorlagen für Objekte
    • Klassenvariablen und statische Methoden
    • Kapselung, Zugriffsmodifizierer
    • OOP-Notizen von Klaus Kriegel: Link
  • Mittwoch, den 15.06.2016
  • Freitag, den 17.06.2016
    • Probeklausur
  • Mittwoch, den 22.06.2016
  • Freitag, den 24.06.2016
    • Der abstrakte Datentyp Wörterbuch
  • Mittwoch, den 29.06.2016
    • AVL-Bäume
    • Die Höhe eines AVL-Baums mit n Knoten ist O(log n): Beweis
    • Graphen: Motivation
  • Freitag, den 01.07.2016
    • Graphen: Definitionen und erste Beispiele
  • Mittwoch, den 06.07.2016
    • Graphen: Beispiele, Erreichbarkeit, Zusammenhang
    • bipartite Graphen
  • Freitag, den 08.07.2016
    • Charakterisierung von bipartiten Graphen
    • Bäume
  • Mittwoch, den 13.07.2016
    • Breitensuche und Tiefensuche
  • Freitag, den 15.07.2016 (großer Hörsaal der Mathematik, 08:20 Uhr)
    • Dijkstras Algorithmus
  • Mittwoch, den 20.07.2016
    • A*-Suche
  • Freitag, den 22.07.2016
    • Klausur
  • Donnerstag, den 04.08.2016, 11–12 Uhr, SR 055
    • Klausureinsicht
  • Freitag, den 14.10.2016, 14–16 Uhr
    • Nachklausur
  • Donerstag, den 20.10.2016, 11–12 Uhr
    • Nachklausureinsicht

Literatur

Python und Java

Es wird eine Klausur am Ende des Semesters geben, sowie eine Ersatzklausur vor Beginn des nächsten Semesters. Dabei gilt die Freiversuchsregel. Das heißt, man kann die Ersatzklausur nutzen, um das Ergebnis aus der Hauptklausur zu verbessern (nur bei erstmaligem Absolvieren des Moduls).

Die Klausur findet statt am Freitag, den 22.07.2016 von 08–10 Uhr im HS Informatik und im Seminarräum 005. Die Nachklausur findet statt am Donnerstag, den 14.10.2016, von 14–16 Uhr in den Hörsaal Informatik.

Für den Scheinerhalt muss man

Die erfolgreiche Teilnahme am Übungsbetrieb und Teilnahme an der Klausur sind unabhängige Leistungen.

Die Scheine sind benotet. Die Note beruht nur auf den Klausurergebnissen.

Die Vorlesung findet statt Mittwoch und Freitag, 08:30–10:00 Uhr, im großen Hörsaal in der Takustraße 9. Es gibt vier Tutor_innen (Kahtarina Klost, Justus Pfannschmidt, Thimo Wellner und Max Willert).

Dienstag
12:00–14:00 Takustr. 9, Seminarraum 005 Thimo Wellner/Justus Pfannschmidt
14:00–16:00 Takustr. 9, Seminarraum 006 Thimo Wellner/Katharina Klost
Mittwoch
10:00–12:00 Takustr. 9, Seminarraum 053 Max Willert
10:00–12:00 Takustr. 9, Seminarraum 055 Thimo Wellner
Donnerstag
10:00–12:00 Takustr. 9, Seminarraum 049 Max Willert
12:00–14:00 Takustr. 9, Seminarraum 051 Max Willert

Sprechzeit des Dozenten: Dienstag 14–15 Uhr in Zimmer 114 und nach Vereinbarung.

Die Übungszettel werden jede Woche hier verlinkt. Sie werden ausschließlich online erscheinen. Die normale Bearbeitungszeit ist von Freitag bis zum Dienstag 11 Tage später. Die Zettel sind vor 12 Uhr in die entsprechenden Tutorenfächer einzuwerfen. Die Bearbeitung erfolgt in Zweiergruppen.

Übungszettel, die nach dem angegebenen Termin abgegeben werden, zählen als nicht bearbeitet.

Nr.AusgabeAbgabe pdftexBemerkungen
1 01.04.2016 03.05.2016 mystery.py
Aufgabe 1b wurde aktualisiert.
2 29.04.2016 10.05.2016  
3 06.05.2016 17.05.2016  
4 13.05.2016 24.05.2016  
5 20.05.2016 31.05.2016  
6 27.05.2016 07.06.2016  
7 03.06.2016 14.06.2016  
8 10.06.2016 21.06.2016  
9 17.06.2016 28.06.2016 Stack.java
LinkedListStack.java
sbaum.hs
Probeklausur 17.06.2016 keine  
10 24.06.2016 05.07.2016  
11 01.07.2016 12.07.2016 letztes reguläres Aufgabenblatt
12 08.07.2016 19.07.2016 freiwillige Zusatzaufgaben
Impressum