In diesem Kurs wird besprochen, wie man an algorithmische Probleme herangeht. Wir werden verschiedene Techniken kennenlernen sowie typische Fallen - und das alles anhand von Rätseln. Denn das Lösen von Rätseln macht nicht nur Spaß, sondern es zeigt auch allgemeine Herangehensweisen auf und lehrt dadurch auf spielerische Weise praktisch relevante Probleme zu bewältigen.
Die Lehrveranstaltung bietet eine Einführung in die Informatik und vermittelt Theorie und Praxis der Programmierung von Software am Beispiel der Sprache C. Die Vorlesung diskutiert Konzepte von Informationsdarstellung, Rechnerarchitektur und der strukturierten Programmierung auf Grundlage der Programmiersprache C. Außerdem werden Einführungen in Betriebssysteme und Programmierwerkzeuge gegeben.
In der theoretischen Informatik befassen wir uns mit grundlegenden Fragen, die den Computer betreffen:
Gibt es Probleme, die kein Computer jemals lösen kann? Wenn man einem Computer mehr Zeit (oder Platz) gibt, kann er dann mehr Probleme lösen als vorher? Sind alle Computer(-modelle) mehr oder weniger gleich? Oder gibt es wesentliche Unterschiede? Gibt es Probleme, die man mit sehr viel Zeit lösen kann, aber niemals effizient mit wenig Zeit?
In diesem praktischen Kurs werden zwei der jüngsten Evolutionsstufen interaktiver Technologien unterrichtet: (1) Interaktion im 3D-Raum, die mit Tiefenkameras verfolgt wird, und (2) Interaktion mit physischer Materie mit Hilfe von 3D-Druckern, Laserschneidern und Robotern. Der Kurs findet vor Ort in H2.57/58, 2. Stock des Hauptgebäudes, statt.
Datenbanken und Data Engineering bilden die Basis fast aller großen Anwendungen. In dieser Vorlesung lernen wir Datenbanksysteme vornehmlich aus interner Sicht kennen, d.h. wir diskutieren, wie Datenbanksysteme intern aufgebaut sind. Zu den grundlegenden Themen zählen die physische Speicherung von Daten auf Disk, Indexstrukturen für den effizienten Zugriff auf die Daten (z.B. B-Bäume), verschiedene Algorithmen für die Operatoren der relationalen Algebra (insbesondere diverse Joinalgorithmen), Anfrageoptimierung (insbesondere die Optimierung der Joinreihenfolge mittels dynamischer Programmierung), und die Fehlererholung eines DBMS nach einem Systemfehler (z.B. Stromausfall).