Programmieren I

Summary

Term
Winter 2016
ECTS
5 (course catalog: lecture, exercise)
Level
Bachelor
Instructors
Michael Rohs, Beren Kaul
Lecture Time
Fr. 11:30-13:00
Lecture Room
Raum -220 MZ1 (UG), Appelstr. 9A (Gebäude 3408)
Exercise Time
Fr. 13:00-13:45
Exercise Room
Raum -220 MZ1 (UG), Appelstr. 9A (Gebäude 3408)

Course Description

Diese Vorlesung führt in das strukturierte Programmieren in C und Java ein. Programmieren bedeutet, ein Problem so präzise zu beschreiben, dass ein Computer es lösen kann. Im ersten Teil werden wir eine Vorgehensweise verwenden, welche die Schritte Problembeschreibung, Datendefinition, Zweck und Funktionskopf, Beispiele, Implementierung, Test und Überarbeitung umfasst. Ausgehend von der Problembeschreibung überlegen wir, wie sich die für das Problem relevante Information der realen Welt als Daten im Programm repräsentieren lassen. Die Lösung des Problems erfolgt dann als Funktion. Die Zweckbeschreibung (z.B. "Wandelt Grad Celsius in Grad Fahrenheit um.") sagt aus, was die Funktion macht. Der Funktionskopf beschreibt die erforderlichen Eingabewerte und die Art des Ergebnisses. Beispiele helfen, das Verhalten der Funktion zu verstehen (z.B. "gegeben Eingabe 10, wird Ausgabe 50 erwartet"). Die Beispiele dienen auch als Testfälle, um die Implementierung der Funktion zu überprüfen.

Neben dieser Vorgehensweise lernen Sie fundamentale Konzepte von Programmiersprachen kennen (z.B. Iteration, Rekursion, Abstraktion, einfache Datenstrukturen, Vererbung) sowie Methoden, um über die Korrektheit und Effizienz eines Programms systematisch nachzudenken (z.B. Zusicherungen/Assertions). Das Lösen von Programmierproblemen erfordert das Verständis von Konzepten, aber auch Kreativität und Erfahrung. In den Übungen werden praktische Programmierfertigkeiten erarbeitet und algorithmisches Denken geschult. Dazu gehört z.B., wie man für eine gegebene Aufgabe einen Algorithmus formuliert und geeignete Datenstrukturen auswählt. Als Basis für die Anschlussvorlesung Programmieren II werden die Grundzüge der Objektorientierung behandelt.

Course Objectives

  • grundlegende Programmierkonzepte und Methoden kennen und verstanden haben
  • algorithmisches Denken, Abstraktionsvermögen
  • Programmierkompetenz und -fertigkeiten
  • Fähigkeit des systematischen Entwurfs von einfachen Programmen
  • Fähigkeit des Strukturierens von einfachen Programmierproblemen

Lecture Calendar

Date
Topic
21.10.
Organization, computers, programming, algorithms
28.10.
Recipe for atomic data, Programming I library, C language (typedef, function declaration/definition, if)
4.11.
Recipe for enumerations, recipe for intervals, data types, expressions, C language (enum, switch, variable declarations)
11.11.
Recipes for compound and variant data, C language (floating point data, formatted output, loops, struct, union)
18.11.
Recipe for loops, C (program structure), recursion, repetition through recursion
25.11.
Arrays: fixed-size collections, option types
2.12.
C language (arrays, pointers)
9.12.
C language (dynamic memory, function pointers)
16.12.
Lists: variable-size collections
23.12.
Java program structure, control structures, methods, arrays, characters, strings
13.1.
String differences, object orientation
20.1.
Graphics, interaction, lambda expressions
27.1.
Dynamic data structures
3.2.
Inheritance

Materials

  • Script on Design Recipes in C
  • Hanspeter Mössenböck: Sprechen Sie Java?: Eine Einführung in das systematische Programmieren. dpunkt.verlag, 5. Auflage, 2014.
  • Brian Kernighan and Dennis Ritchie: The C Programming Language. Prentice Hall, second edition, 1988.

Slides, assignments and other materials are available via Stud.IP