A Simple C Program

Einführung in die Praktische Informatik
Wintersemester 2019/20


Organisation

Verantwortlicher Dozent: Ralf Salomon

VL/ÜB: Montag: 15:00-16:30 EX04 (Südstadt), Albert-Einstein-Str. 2
PC Pool R 201, Albert-Einstein-Str. 22
PC Pool R 310, Albert-Einstein-Str. 22
VL/ÜB: Mittwoch: 13:30-15:00 EX04 (Südstadt), Albert-Einstein-Str. 2
PC Pool R 201, Albert-Einstein-Str. 22
PC Pool R 310, Albert-Einstein-Str. 22
VL/ÜB: Mittwoch: 15:00-16:30 PC Pool R 201, Albert-Einstein-Str. 22
PC Pool R 310, Albert-Einstein-Str. 22
ÜB: Donnerstag: 15:15-16:45 PC Pool R 201, Albert-Einstein-Str. 22

Klausur/Wiederholungsklausur: voraussichtlich am 13. Februar 2020 von 9:00 bis 10:00 in Hörsaal 3, Gebäude Parkstr. 6 (maßgeblich sind die Angaben des Studienbüros)


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.


Lehrkräfte

Name E-Mail Telefon
Dozent Ralf Salomon 72 51
Assistent Thomas Wegner 72 67
Assistent Tim Brockmann 72 69

Skripte und weitere Unterlagen


Übungsmaterialien

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

Literatur


Zeitplan

Montag 15-17
(Vorlesung/Übung)
Mittwoch 13-15
(Vorlesung/Übung)
Mittwoch 15-17
Übung
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 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 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 6. 11. 2019: Übung Bearbeiten der Übungspakete 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 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 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 27. 11. 2019: Übung Bearbeiten der Übungspakete 19 und 22
Dezember 2. 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
4. 12. 2019: Übung Bearbeiten von Übungspaket 20 4. 12. 2019: Übung Bearbeiten von Übungspaket 20
9. 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 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 18. 12. 2019: Übung Bearbeiten der Übungspakete bis 28
Januar 6. 1. 2020: Vorlesung Dynamischer Speicher sowie Ein- und Ausgabe
  • Speicherallokation mittels malloc()
  • Beispiel: Verknüpfen von Zeichenketten
  • Einführung: Ein-Ausgabe
Arbeitsblatt
8. 1. 2020: Übung Bearbeiten der Übungspakete 29 und 30 8. 1. 2020: Übung Bearbeiten der Übungspakete 29 und 30
13. 1. 2020: Vorlesung Dynamische Datenstrukturen I
  • einfach verkettete Listen
  • der Stack und seine Operationen: pop(), push(), isEmpty()
  • einfach und doppelt verkettete Listen
Arbeitsblatt
15. 1. 2020: Übung Bearbeiten der Übungspakete 30 und 31 15. 1. 2020: Übung Bearbeiten der Übungspakete 31
20. 1. 2020: Vorlesung Dynamische Datenstrukturen II
  • Wiederholung: Einfach verkettete Listen
  • binäre Bäume
Arbeitsblatt
22. 1. 2020: Übung Bearbeiten der Übungspakete 31-33 22. 1. 2020: Übung Bearbeiten der Übungspakete 31-33
27. 1. 2020: Vorlesung Abschluss
  • Probeklausur
  • Hash-Tabellen
Arbeitsblatt
29. 1. 2020: Übung Bearbeiten der Übungspakete 32 und 33 29. 1. 2020: Übung Bearbeiten der Übungspakete 32 und 33

Donnerstags 15-17 zusätzliche Übungen unter Anleitung