Einführung in die Praktische Informatik Wintersemester 2020/21
Verantwortlicher Dozent: 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

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
Klausur/Wiederholungsklausur: 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:
- Das Beherrschen der Systematischen Softwareentwicklung
- Das Erlernen der wichtigsten Konstrukte der Programmiersprache C
- Das selbstständige Lösen von Aufgaben mit kleinem und mittlerem Schwierigkeitsgrad
- 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
Skripte und weitere Unterlagen
- Skript
- Lehrveranstaltungstarif
- Das Spiel der Handsimulation
- Katastrophen: Motivation für gutes Programmieren
- Speicherbildchen zum Ausfüllen
- Framework für Windows
- Hinweise für Windows-Benutzer
- Berechnung der Standardabweichung
- Sortierte Listen (standard)
- Sortierte Listen Wirth: standard, leicht modifiziert.
- Sortierte (L-K-R) Bäume: standard, leicht modifiziert.
- Prioritäten der Operatoren
- Probeklausur
Übungsmaterialien
Anleitungen
- Anleitung zum richtigen Gebrauch der Übungsaufgaben
- Das Spiel der Handsimulation
- Arbeiten in einer virtuellen Linux Box
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
1. Vorstellung
3. Aufbau der CPU
5. Der Software Life Cycle
7. Syntaxdiagramme
9. Schleifen (while, for, do)
11. Felder (Arrays)
13. Typanpassung
Vorlesungen als Video
- Vorstellung
- Aufbau eines Rechners
- Aufbau der CPU
- Laden und Ausführen von Programmen
- Der Software Life Cycle
- Handsimulation eines C Programms
- Syntaxdiagramme
- Die Fallunterscheidung (if)
- Schleifen (while, for, do)
- Datentypen int, char und double
- Felder (Arrays)
- Wie wird eine C-Anweisung im Detail abgearbeitet
- Typanpassung
- Die Aufgaben und Arbeitsweise des Compilers
- Ausdrücke in C
- Funktionen in C
- Rekursion
- Zeiger in C
- Zeiger, Arrays und Funktionen
- Zeichenketten und die Funktion main()
- Datentyp void
- typedef: selbst definierte Datentypen
- structs: gemischte Datentypen
- Module: getrenntes Übersetzen
- malloc()/free(): Beispiel Aneinanderhängen von Zeichenketten
- Einfach verkettete Listen: Stack
- Einfach verkettete, sortierte Listen
- Binäre Bäume
- Probeklausur
2. Aufbau eines Rechners
4. Laden und Ausführen von Programmen
6. Handsimulation eines C Programms
8. Die Fallunterscheidung (if)
10. Datentypen int, char und double
12. Abarbeitung einer C-Anweisung im Detail
14. Die Aufgaben und Arbeitsweise des Compilers
Zeitplan
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
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
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
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
- Probeklausur
- Hash-Tabellen, Arbeitsblatt
29. 01. 2020: Übung Bearbeiten der Übungspakete 32 und 33