Hasso-Plattner-Institut Potsdam Operating Systems and Middleware Group at HPI University of Potsdam, Germany
Operating Systems and Middleware Group at HPI

Programmiertechnik I

Prof. Dr. Andreas Polze

Tutoren: Sven Köhler

Wintersemester 2017/18

Überblick

Die Lehrveranstaltung bietet eine Einführung in die Informatik und vermittelt Theorie und Praxis der Programmierung von Software am Beispiel der Sprachen C und Prolog. Die Vorlesung diskutiert Konzepte der strukturierten Programmierung auf Grundlage der Programmiersprache C sowie Konzepte der logischen Programmierung mit Prolog.

Objekte und Ansätze der objektorientierten Programmierung werden kurz gestreift, sollen aber erst in der nachfolgenden Veranstaltung "Programmiertechnik II" im Mittelpunkt stehen.

Termine:

Vorlesung:

  • Di 13:30-15:00, HS1
  • Do 09:15-10:45, HS1

Die 2. Übung findet am 16.11.2017 in den Poolräumen (Haus ABC) statt.

Übungen finden alle 2 Wochen zum Vorlesungstermin am Donnerstag statt. Zu den Übungen werden Übungsaufgaben ausgegeben (insgesamt 6 Serien). Diese sollen in Zweier-Gruppen bearbeitet und den Tutoren präsentiert werden. Für eine Zulassung zur Klausur ist der Erwerb von mindestens 50% aller Punkte der jeweiligen Übungsaufgaben erforderlich.

Lösungen zu den Übungsaufgaben müssen über das Abgabesystem unter https://www.dcl.hpi.uni-potsdam.de/submit/ eingereicht werden. Sie können sich dort unter Auswahl der HPI-OpenID-Providers mit Ihrem HPI-Benutzerkonto anmelden. Anleitung OpenID

Literatur

  • Heinz Peter Gumm, Manfred Sommer; "Einführung in die Informatik"; 9. Auflage, Oldenburg Verlag, 2011
  • Brian W. Kernighan, Dennis M. Ritchie; "The C Programming Language"; Prentice Hall, 1988 (2000)
  • Axel T. Schreiner; "System Programmierung in UNIX"; B.G. Teubner, 1984
  • Helmut Balzert; "Lehrbuch Grundlagen der Informatik"; Elsevier 2005

Hausaufgaben

Serie 1: (Abgabe: 09.11.2017, 21:00 Uhr, 20 Punkte)

  1. Wir möchten Sie gerne kennenlernen. Was interessiert Sie an der Informatik? Schreiben Sie ein Essay zum Thema "Der/die wichtigste Computerpionier(in)" (auf deutsch).
    Stellen Sie Ihre eigene, subjektive Meinung dar und erläutern Sie auf einer Seite Ihren Standpunkt. Geben Sie die von Ihnen verwendeten Quellen an.
  2. Machen Sie sich mit dem Aufgaben-Abgabesystem vertraut. Reichen Sie Ihr Essay im pdf-Format ein.

Serie 2: In den Poolräumen am 16.11.2017 (Abgabe: 23.11.2017, 21:00 Uhr, 20 Punkte)

  1. Stellen Sie die folgenden Zahlen binär, oktal, dezimal und hexadezimal dar:
    • 68 zur Basis 9
    • 118 zur Basis 11
    • 550 zur Basis 6
  2. Geben Sie die im Dezimalsystem dargestellten Zahlen -1, 1, 28, -35, -256, 257 im Zweierkomplement in Binär- und Hexadezimaldarstellung an.
    Verwenden Sie in der Darstellung jeweils 16 Bit.
  3. Interpretieren Sie die folgenden beiden Ziffernvokabeln als Gleitkommazahlen im IEEE-754-Single-Format (d.h. geben Sie den Wert jeweils als Dezimalzahl an).
    • 0|10000000|00000000000000000000000
    • 1|01111110|10000000000000000000000
  4. Stellen Sie die Zahl π ~ 3,14159265 10 ~ 11,00100100001111110110102 als IEEE-754 Single Precision dar.
  5. Ermitteln Sie mit Hilfe der Unicode-Zeichendefinitionen oder Code-Charts die Unicode-Zeichenpositionen für
    • den Buchstaben Æ
    • das Pfund-Zeichen (£)
    • den griechischen Buchstaben rho (ρ)
    • das Kleiner-oder-gleich-Zeichen (≤)
  6. Welche Codepoints und welche Zeichen werden von den Bytesequenzen
    • 0x64 0x75 0x63 0x6B
    • 0xF0 0x9D 0x95 0xBD
    repräsentiert, wenn sie als
    • ISO8859-1
    • UTF-8
    • UTF-16 LE
    interpretiert werden?
  7. Laden Sie Ihre Lösungen als PDF-Datei ins Abgabesystem hoch. Machen Sie Lösungswege erkenntlich.
    Wenn Sie als Gruppe einreichen wollen, genügt eine Abgabe. Suchen und markieren Sie die zweite Person im dafür vorgesehen Feld (Screenshot).


Sie finden Aufzeichnungen der Lehrveranstaltung auf tele-TASK unter http://tele-task.de/archive/series/overview/1176/.

Ablauf

Unit 1: Informatik als Fachgebiet

  • Was ist Informatik?
  • Algorithmenbegriff
  • Technische Informatik
  • Theoretische Informatik
  • Praktische Informatik
  • Angewandte Informatik
  • Geschichte - 100 Jahre IBM
  • Studium am HPI - Einordnung der LV
  • Bits, Bytes, Worte, Dateien – Information vs. Daten
  • top down vs. bottom up

Unit 2: Rechnerarchitektur

  • Aussagenlogik
  • Schaltnetze, Schaltwerke
  • Register
  • von Neumann Rechner
  • CPU, ALU, CU
  • Instruktionsverarbeitung
  • OpCode Formate, RTL
  • Instruktionsarten
  • Ein- und Ausgabe

Unterlagen zur 1. Übung

Unit 3: Informationsdarstellung

  • Universalität binärer Daten
  • Abtasttheorem
  • ganze Zahlen
  • 1er Komplement
  • 2er Komplement
  • Gleitkommaformate
  • ASCII, EBCDIC
  • Unicode

Unit 4: Programmiersprachen

  • Spezifikation, Algorithmen, Programme
  • Imperative Programmierung: Modula, C
  • Objektorientierte Programmierung: Smalltalk, C++, Objective-C, Java
  • Logische Programmierung: Prolog
  • Funktionale Programmierung: Lisp
  • Formale Beschreibung von Programmiersprachen: EBNF
  • Ein erstes Beispiel in C

Unit 5: Werkzeuge und Technologien

  • Interpreter
  • Compiler
  • Technologieprogramme: make
  • Quellcodeverwaltung: sccs, cvs, subversion, git
  • Debugger: gdb
  • Test: Check, CUnit
  • Betriebssysteme

Unit 6: Programmiersprache C - Integrale Datentypen

  • Integrale Datentypen
  • Operatoren
  • Ausdrücke
  • Typkonvertierungen
  • Vorrangregeln

Unit 7: Programmiersprache C - Kontrollfluss

  • Anweisungen und Blöcke
  • if-else
  • else-if
  • switch
  • Schleifen: while and for, do-while
  • break and continue
  • goto and labels

Unit 8: Programmiersprache C - Funktionen und Programmstruktur

  • Grundlagen, Prinzip Funktionsaufruf, Stack
  • call-by-value, call-by-ref, call-by-copy
  • Rückgabewerte
  • externe Variablen, Scope
  • header files und Übersetzungseinheiten
  • Initialisierung
  • Rekursion
  • C Präprozessor

Unit 9: Programmiersprache C - Zeiger und Felder

  • Heap und Stack
  • Zeiger und Adressen
  • Zeiger und Funktionen (-argumente)
  • Zeiger und Arrays
  • Adreßarithmetik
  • Beispiel: malloc und Algorithmen zur Speicherallokation
  • Mehrdimensionale Felder
  • Initialisierung von Feldern
  • Kommandzeilenbearbeitung
  • Funktionszeiger
  • Komplizierte Deklarationen

Unit 10: Programmiersprache C - Strukturen

  • Grundlagen
  • Strukturen und Funktionen
  • Felder von Strukturen
  • Zeiger auf Strukturen
  • Selbstreferentielle Strukturen
  • Unions, typedefs, bit-fields
  • Objekte in C

Unit 11: Programmiersprache C - Ein- und Ausgabe (libc)

  • Standard Ein- und Ausgabe – stdio
  • Formatierte Ausgabe – printf
  • Argumentlisten variabler Länge – varargs
  • Formatierte Eingabe – scanf
  • Dateizugriff
  • Fehlerbehandlung – stderr und exit
  • Zeilenweise Ein- und Ausgabe
  • Weitere Funktionen

Unit 12: Programmiersprache C - Betriebssystemschnittstellen

  • file descriptors
  • low-level i/O - read and write
  • open, creat, close, unlink
  • lseek
  • Standard library