A Simple C Program

Einführung in die Praktische Informatik
Wintersemester 2022/23


Organisation

Verantwortlicher Dozent: Ralf Salomon

Vorlesung: Montag: 15:00-16:30 EX04 (Südstadt), Albert-Einstein-Str. 2
Übung: Mittwoch: 13:30-15:00 PC Pool R 124, Albert-Einstein-Str. 26
PC Pool R 221, Albert-Einstein-Str. 26
Übung: Mittwoch: 15:00-16:30 PC Pool R 124, Albert-Einstein-Str. 26
PC Pool R 221, Albert-Einstein-Str. 26

Vorlesung Mittwoch, den 12.10. im Ex04


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 kennenlernen.

Der Hauptteil der Lehrveranstaltung besteht in der Vermittlung der Sprachkonzepte der Programmiersprache C. Dazu gehören die von C angebotenen Datentypen, Kontrollstrukturen, Funktionen, das getrennte Übersetzen sowie das Bilden dynamischer 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 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 Auseinandersetzung 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 Benjamin Rother 72 91

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 Kellerspeichers (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

Montags 15-17: (Vorlesung) Mittwochs 13-17: (Übung)
Oktober 10. 10. 2022: Vorlesung Organisation und Einführung
  • Vorstellung der Dozenten
  • Semesterablauf
  • was bedeutet Lernen auf universitärem Niveau
  • Aufbau eines PCs
  • Funktionsweise von CPU und RAM
Arbeitsblatt


Übung: Bearbeiten von Übungspaket 1
12. 10. 2022: Vorlesung 13-15: Software Life Cycle: ein erster Überblick
  • Entwicklung eines ersten Beispielprogramms
  • Flächenberechnung eines Rechtecks
  • Kodierung in C
  • Compiler
  • Ausblick
Arbeitsblatt


15-17 Übung: Bearbeiten der Übungspakete 2 und 3
17. 10. 2022: Vorlesung Grundlagen und erste Schritte in C
  • Syntaxdiagramme, Identifier
  • Datentyp int
  • Fallunterscheidungen und Schleifen
Arbeitsblatt
19. 10. 2022: Übung Bearbeiten der Übungspakete 4-11
24. 10. 2022: Übung Bearbeiten der Übungspakete 4-11 26. 10. 2022: Übung Bearbeiten der Übungspakete 4-15
31. 10. 2022: Feiertag Reformationstag
November 2. 11. 2022: Vorlesung Zeichen, reelwertige Zahlen und Arrays
  • ASCII-Tabelle
  • Datentyp char
  • Datentyp double
  • Arrays
Arbeitsblatt
7. 11. 2022: 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
9. 11. 2022: Übung Bearbeiten von Übungspaket 16
14. 11. 2022: Vorlesung Der gcc-Compiler im Detail
  • Die einzelnen Phasen des Compilers
  • Einzelheiten zum C-Präprozessor
  • Speichersegmente
  • Ein-/Ausgabe im Überblick
  • Ausdrücke
Arbeitsblatt
16. 11. 2022: Übung Bearbeiten der Übungspakete 17 und 18
21. 11. 2022: Vorlesung Eigene Funktionen in C und Rekursion
  • Programmieren eigener Funktionen
  • Abarbeitung von Funktionen
  • Realisierung mittels Stack-Frames
  • Rekursion
Arbeitsblatt
23. 11. 2022: Übung Bearbeiten der Übungspakete 19 und 22
28. 11. 2022: 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
30. 11. 2022: Übung Bearbeiten von Übungspaket 20
Dezember 5. 12. 2022: Vorlesung Funktionen und Arrays, Zeichenketten
  • Funktionen mit Zeigern und Arrays
  • Mehrdimensionale Arrays
  • Zeichenketten als Arrays
  • der argc/argv-Mechanismus
Arbeitsblatt
7. 12. 2022: Übung Bearbeiten der Übungspakete 21 und 23-25
12. 12. 2022: Vorlesung Zusammengesetzte Datentypen und Module
  • Strukturen mittels structs
  • eigene Datentypen mittels typedef
  • getrenntes Übersetzen: Module
  • der Datentyp void
Arbeitsblatt
14. 12. 2022: Übung Bearbeiten der Übungspakete bis 28
19. 12. 2022: Vorlesung Dynamischer Speicher sowie Ein- und Ausgabe
  • Speicherallokation mittels malloc()
  • Beispiel: Verknüpfen von Zeichenketten
  • Einführung: Ein-Ausgabe
Arbeitsblatt
21. 12. 2022: Übung Bearbeiten der Übungspakete 29 und 30
Januar 9. 1. 2023: Vorlesung Dynamische Datenstrukturen I
  • einfach verkettete Listen
  • der Stack und seine Operationen: pop(), push(), isEmpty()
  • einfach und doppelt verkettete Listen
Arbeitsblatt
11. 1. 2023: Übung Bearbeiten der Übungspakete 30 und 31
16. 1. 2023: Vorlesung Dynamische Datenstrukturen II
  • Wiederholung: Einfach verkettete Listen
  • binäre Bäume
Arbeitsblatt
18. 1. 2023: Übung Bearbeiten der Übungspakete 31-33
23. 1. 2023: Vorlesung Abschluss
  • Probeklausur
  • Hash-Tabellen
Arbeitsblatt
25. 1. 2023: Übung Bearbeiten der Übungspakete 32 und 33