Einführung in die Praktische Informatik Wintersemester 2020/21

Verantwortlicher Dozent: Ralf Salomon

Foto Ralf Salomon

Prof. Dr.-Ing. habil.
Ralf Salomon

E-Mail
Tel.: +49 381 498 7260
Raum: 201

Assistenten im Seminar und Praktikum

Dipl.-Ing.
Tim Brockmann
E-Mail
Tel.: +49 381 498 7279
Raum: 111

Foto Thomas Wegner

Dipl.-Ing.
Thomas Wegner

E-Mail
Tel.: +49 381 498 7267
Raum: 108

Organisation

Vorlesung: Montag: 7:00-9:00 Uhr, Audimax, Ulmenstr. 69

Übung: Mittwoch: 13:30-15:00 Uhr und 15:00-16:30 Uhr in den PC Pools R 201 und R 310 im ITMZ, Albert-Einstein-Str. 22

Übung: Donnerstag: 15:15-16:45 Uhr, PC Pool R 201, ITMZ, Albert-Einstein-Str. 22

voraussichtlich am 22. Februar 2021 von 9:00 bis 10:00 im Audimax (maßgeblich sind die Angaben des Studienbüros)

Donnerstags 15-17 zusätzliche Übungen unter Anleitung

Beschreibung

Inhalt

Am Ende der Vorlesung Einführung in die Praktische Informatik sollen die Studenten in der Lage sein, Programme mit einfacher bis mittlerer Komplexität eigenständig zu entwickeln. Hierfür werden Kompetenzen aus den drei folgenden Bereichen vermittelt: Systematische Softwareentwicklung, die Programmiersprache C und die Funktionsweise eines Rechners. Aus dem Bereich der Systematischen Softwareentwicklung werden wir die wesentlichen Schritte des Software Life Cycles behandeln und Arbeitstechniken wie Struktogramme und die Methode der Schrittweisen Verfeinerung kennen lernen.

Der Hauptteil der Lehrveranstaltung besteht in der Vermittlung der Sprachkonzepte der Programmiersprache C. Dazu gehören die von C angebotenen Datentypen, Kontrollstrukturen, Funktionen, die Möglichkeit der getrennten Übersetzung sowie dynamische Datenstrukturen. Zu allen Sprachkonstrukten wird auch erklärt, wie diese von CPU und Arbeitsspeicher abgearbeitet werden.

Durchführung

Da das Programmieren eine inhärent praktische Tätigkeit ist, sind die Übungen integraler Bestandteil der gesamten Lehrveranstaltung und dienen der Vertiefung des behandelten Stoffs. Um dafür genügend Zeit zu haben, werden einige Vorlesungen durch betreute Übungen ersetzt. Der entsprechende Zeitplan ist am Ende dieser Webseite zu finden.

Der wesentliche Zweck der Übungen ist das selbstständige Einüben des Stoffs. Daher beinhalten die betreuten Übungen keinen Frontalunterricht sowie keine Wiederholungen des Vorlesungsstoffs. Vielmehr wird den Studenten die Gelegenheit gegeben, selbst zu programmieren und sich dabei die Voraussetzungen für spätere Aufgaben anzueignen. Während dieser betreuten Übungen haben die Studenten die Möglichkeit, die Assistenten um Rat zu fragen oder kleinere Hilfen zu erbitten. Die Übungen werden weder eingesammelt noch benotet. Während der Übungen besteht Gelegenheit, die eigenen Ergebnisse durch die die Kommilitonen und Assistenten beurteilen und ggf. verbessern zu lassen.

Für eine möglichst effiziente Nutzung der betreuten Übungen, sollte jeder Student folgenden Ratschlag im eigenen Interesse befolgen: Die betreuten Übungszeiten sind einfach zu kurz, um alle Aufgaben in dieser Zeit zu lösen. Um mit dem Stoff schritthalten zu können, sollten sie daher soweit wie möglich zu Hause vorbereitet und gelöst werden. Dies beinhaltet insbesondere die Bearbeitung der Übungsteile Stoffwiederholung, Quiz und Fehlersuche. Ebenso sollten die in den Anwendungen selbst zu entwickelnden Programme möglichst weit vorbereitet werden, wozu die Auseinandersetztung mit der Aufgabenstellung und die Entwicklung der Struktogramme bzw. Schrittweisen Verfeinerungen gehört. Ferner sei jeder daran erinnert, dass das Abschreiben und/oder Kopieren von Lösungen anderer weder einen Lerneffekt noch eine Verbesserung der Note bringt.

Voraussetzungen

Abiturwissen, gesunder Menschenverstand und die Bereitschaft zum Lernen.

Ziele

Diese Lehrveranstaltung hat folgende Ziele:

  1. Das Beherrschen der Systematischen Softwareentwicklung
  2. Das Erlernen der wichtigsten Konstrukte der Programmiersprache C
  3. Das selbstständige Lösen von Aufgaben mit kleinem und mittlerem Schwierigkeitsgrad
  4. Eine relativ klare Vorstellung von der Art und Weise, wie ein Programm in einem Rechner abgearbeitet wird

Prüfung

Diese Lehrveranstaltung wird mit einer 60minütigen Klausur abgeschlossen. Der Termin wird vom Studienbüro bekanntgegeben.

Survival Guide

Erfolgreiche Überlebensstrategien älterer Semester.

Übungsmaterialien

Anleitungen

    Aufgaben und Musterlösungen

    1. Grundlagen: von der Hardware zum Programmieren
    Musterlösung 1
    2. Erste Kontakte mit dem PC
    Musterlösung 2
    3. Mein erstes Programm: Fläche eines Rechtecks
    Musterlösung 3

    4. Klassifikation von Dreiecken
    Musterlösung 4
    5. Abstrakte Programmierung
    Musterlösung 5
    6. Arbeiten mit Syntaxdiagrammen
    Musterlösung 6
    7. Angemessenes Formatieren von C-Programmen
    Musterlösung 7
    8. Datentyp int
    Musterlösung 8
    9. Logische Ausdrücke
    Musterlösung 9
    10. Fallunterscheidungen
    Musterlösung 10
    11. Schleifen
    Musterlösung 11
    12. Der Datentyp char
    Musterlösung 12
    13. Der Datentyp double
    Musterlösung 13
    14. Eindimensionale Arrays
    Musterlösung 14
    15. Einfaches Sortieren, Suchen und Finden
    Musterlösung 15
    16. Gemischte Datentypen
    Musterlösung 16
    17. Der gcc Compiler
    Musterlösung 17
    18. Ausdrücke
    Musterlösung 18
    19. Programmieren eigener Funktionen
    Musterlösung 19
    20. Zeiger und Zeigervariablen
    Musterlösung 20
    21. Funktionen mit Zeigern und Arrays als Parameter
    Musterlösung 21
    22. Rekursive Funktionsaufrufe
    Musterlösung 22
    23. Mehrdimensionale Arrays
    Musterlösung 23
    24. Zeichenketten
    Musterlösung 24
    25. Kommandozeilenargumente
    Musterlösung 25
    26. Der Datentyp struct
    Musterlösung 26
    27. Definition eigener Datentypen
    Musterlösung 27
    28. Module und getrenntes Übersetzen
    Musterlösung 28
    29. Dynamische Speicherverwaltung: malloc() und free()
    Musterlösung 29
    30. Kopieren von Dateien
    Musterlösung 30
    31. Entwicklung eines einfachen Kellerspeiches (Stacks)
    Musterlösung 31
    32. Einfach verkettete, sortierte Liste
    Musterlösung 32
    33. Binäre Bäume
    Musterlösung 33
    Alle Aufgaben mit Lösungen
     

    Literatur

    • Das vorlesungsbegleitende Skript, ISBN 978-3-00-042684-1; auch in der Bibliothek erhältlich.
    • Programmieren in C. ANSI C (2. A.) Brian W. Kernighan und Dennis M. Ritchie, Hanser Fachbuch ISBN: 3446154973. Dieses Buch beschreibt anhand vieler Beispiele die Programmiersprache C. Die präsentierten Beispiele sind aus dem "täglichen" Leben und leicht nachvollziehbar.
    • Algorithmen und Datenstrukturen, Niklaus Wirth, ISBN: 3519022508. Niklaus Wirth gibt einen sehr guten Überblick über wichtige Algorithmen und Datenstrukturen. Diese Darstellung schließt vor allem dynamische Datenstrukturen (z.B. Listen) ein.
    • Go To C-Programmierung, Guido Krüger, ISBN-13: 978-3827326119. Dieses Buch bietet eine leicht verständliche Einführung in die Programmiersprache C und deren wichtigsten Konzepte. Empfehlenswert und über online-Buchdienste erhältlich.

    Vorlesungen als Video

    Zeitplan

    Oktober

    14. 10. 2019: Vorlesung Organisation und Einführung

    • Vorstellung der Dozenten
    • Semesterablauf
    • was bedeutet Lernen auf universitärem Niveau
    • Aufbau eines PCs
    • Funktionsweise von CPU und RAM
    • Bearbeiten von Übungspaket 1, Arbeitsblatt

    16. 10. 2019: Vorlesung Software Life Cycle: ein erster Überblick

    • Entwicklung eines ersten Beispielprogramms
    • Flächenberechnung eines Rechtecks
    • Kodierung in C
    • Compiler
    • Ausblick, Arbeitsblatt

    16. 10. 2019: Übung Bearbeiten der Übungspakete 2 und 3

    21. 10. 2019: Vorlesung Grundlagen und erste Schritte in C

    • Syntaxdiagramme, Identifier
    • Datentyp int
    • Fallunterscheidungen und Schleifen, Arbeitsblatt

    23. 10. 2019: Übung Bearbeiten der Übungspakete 4-11

    28. 10. 2019: Übung Bearbeiten der Übungspakete 4-11

    30. 10. 2019: Übung Bearbeiten der Übungspakete 4-11

    November

    4. 11. 2019: Vorlesung Zeichen, reelwertige Zahlen und Arrays

    • ASCII-Tabelle
    • Datentyp char
    • Datentyp double
    • Arrays, Arbeitsblatt

    6. 11. 2019: Übung Bearbeiten der Übungspakete 12 und 13, 14 und 15


    11. 11. 2019: Vorlesung Ergänzungen, Lösungsansätze und Details zur Hardware-Ebene

    • Ergänzungen zu Fallunterscheidungen
    • Lösungsansätze für die ersten Übungspakete
    • Compiler und Hardware im Detail
    • Die Funktionsweise von CPU und Arbeitsspeicher
    • Die Rolle des Compilers als Bindeglied zwischen C-Programm und CPU
    • Die Arbeitsschritte des Compilers und die durch ihn bewirkte Speicherorganisation, Arbeitsblatt

    13. 11. 2019: Übung Bearbeiten von Übungspaket 16

    18. 11. 2019: Vorlesung Der gcc-Compiler im Detail

    • Die einzelnen Phasen des Compilers
    • Einzelheiten zum C-Präprozessor
    • Speichersegmente
    • Ein-/Ausgabe im Überblick
    • Ausdrücke, Arbeitsblatt

    20. 11. 2019: Übung Bearbeiten der Übungspakete 17 und 18

    25. 11. 2019: Vorlesung Eigene Funktionen in C und Rekursion

    • Programmieren eigener Funktionen
    • Abarbeitung von Funktionen
    • Realisierung mittels Stack-Frames
    • Rekursion, Arbeitsblatt

    27. 11. 2019: Übung Bearbeiten der Übungspakete 19 und 22

    Dezember

    02. 12. 2019: Vorlesung Adressen, Zeiger und Arrays

    • Adressen und der &-Operator
    • Zeiger und Zeigervariablen
    • Zusammenhang zwischen Arrays und Zeigern
    • Adressberechnungen
    • Arrays als Parameter für Funktionen, Arbeitsblatt

    04. 12. 2019: Übung Bearbeiten von Übungspaket 20

    09. 12. 2019: Vorlesung Funktionen und Arrays, Zeichenketten

    • Funktionen mit Zeigern und Arrays
    • Mehrdimensionale Arrays
    • Zeichenketten als Arrays
    • der argc/argv-Mechanismus, Arbeitsblatt

    11. 12. 2019: Übung Bearbeiten der Übungspakete 21 und 23-25

    16. 12. 2019: Vorlesung Zusammengesetzte Datentypen und Module

    • Strukturen mittels structs
    • eigene Datentypen mittels typedef
    • getrenntes Übersetzen: Module
    • der Datentyp void, Arbeitsblatt

    18. 12. 2019: Übung Bearbeiten der Übungspakete bis 28

    Januar

    06.01. 2020: Vorlesung Dynamischer Speicher sowie Ein- und Ausgabe

    • Speicherallokation mittels malloc()
    • Beispiel: Verknüpfen von Zeichenketten
    • Einführung: Ein-Ausgabe, Arbeitsblat

    08.01.2020 Übung Bearbeiten der Übungspakete 29 und 30

    13. 01. 2020: Vorlesung Dynamische Datenstrukturen I

    • einfach verkettete Listen
    • der Stack und seine Operationen: pop(), push(), isEmpty()
    • einfach und doppelt verkettete Listen, Arbeitsblatt

    15. 01. 2020: Übung Bearbeiten der Übungspakete 30 und 31

    20. 01. 2020: Vorlesung Dynamische Datenstrukturen II

    • Wiederholung: Einfach verkettete Listen
    • binäre Bäume, Arbeitsblatt

    22. 01. 2020: Übung Bearbeiten der Übungspakete 31 - 33

    27. 01. 2020: Vorlesung Abschluss

    29. 01. 2020: Übung Bearbeiten der Übungspakete 32 und 33