A Simple C Program

Einführung in die Praktische Informatik
Wintersemester 2024/25


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 201, Albert-Einstein-Str. 22
PC Pool R 310, Albert-Einstein-Str. 22
Übung: Mittwoch: 15:00-16:30 PC Pool R 201, Albert-Einstein-Str. 22
PC Pool R 310, Albert-Einstein-Str. 22

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