# 🎓 programming-concepts-universal *Interaktiver Programmierkurs: Von C zu universellen Konzepten* ## 📋 Übersicht Dieses Repository enthält einen kompletten Kurs für Programmieranfänger mit C-Grundlagen, der sich auf **sprachunabhängige Konzepte** konzentriert. **Zielgruppe:** Student mit C-Erfahrung, geplantem C++-Umstieg **Kursdauer:** 8 Wochen **Lernziel:** Konzepte verstehen, die auf jede Programmiersprache übertragbar sind --- ## 📁 Repository-Struktur ``` . ├── README.md # Diese Datei ├── docs/ │ ├── programming-concepts-universal.md # Hauptkurs-Dokument │ └── quiz-fragen.md # Interaktive Quizfragen ├── src/ │ └── c_examples/ # C Code-Beispiele │ ├── module1_memory.c │ ├── module2_datatypes.c │ ├── module3_controlflow.c │ ├── module4_functions.c │ ├── module5_datastructures.c │ ├── module6_pointers.c │ ├── module7_oop_in_c.c │ ├── module8_modularization.c │ ├── Makefile │ └── README.md └── exercises/ ├── checkpoint_a.c # Memory & Typen ├── checkpoint_b.c # Taschenrechner ├── checkpoint_c.c # Dynamische Liste └── final_project/ # Todo-App ├── todo_c/ └── todo_cpp/ ``` --- ## 🗺️ Kurs-Module | Modul | Thema | C-Beispiel | C++-Gegenstück | |-------|-------|------------|----------------| | 1 | **Memory-Modell** | `malloc/free` | `new/delete`, Smart Pointer | | 2 | **Datentypen** | `int32_t`, Overflow | `auto`, `constexpr` | | 3 | **Flusskontrolle** | `if/for/while` | Gleich | | 4 | **Funktionen** | Call-by-Value | References, `&` | | 5 | **Datenstrukturen** | LinkedList, Stack | STL: `vector`, `stack` | | 6 | **Pointer** | `*`, `&`, Arithmetik | References, Smart Ptr | | 7 | **OOP** | Structs + Fct Ptrs | `class`, `virtual` | | 8 | **Modularisierung** | MVC-Pattern | Namespaces, Templates | --- ## 🚀 Schnellstart ### Voraussetzungen ```bash # C-Compiler (gcc oder clang) gcc --version # C++-Compiler (optional für Vergleich) g++ --version # Make (optional) make --version ``` ### Kompilieren ```bash # Alle C-Beispiele kompilieren cd src/c_examples make all # Einzelnes Modul make module1 ./module1 # Mit Debugging make CFLAGS="-g -O0" module1 gdb ./module1 ``` --- ## 📖 Kursverwendung ### Empfohlener Lernpfad **Woche 1-2:** 1. Lese `docs/programming-concepts-universal.md` Modul 1-2 2. Bearbeite `docs/quiz-fragen.md` Fragen 1.1-2.3 3. Kompiliere und teste `module1_memory.c` & `module2_datatypes.c` 4. ✅ Checkpoint A bestehen **Woche 3-4:** 1. Modul 3-4 lesen 2. Quizfragen 3.1-4.3 3. Code-Beispiele: `module3_controlflow.c`, `module4_functions.c` 4. 📝 Checkpoint B: Taschenrechner implementieren **Woche 5-6:** 1. Modul 5-6 lesen 2. Quizfragen 5.1-6.3 3. Code: `module5_datastructures.c`, `module6_pointers.c` 4. 🔧 Checkpoint C: Eigene LinkedList implementieren **Woche 7-8:** 1. Modul 7-8 lesen 2. Quizfragen 7.1-8.3 + Final 3. Code: `module7_oop_in_c.c` + C++ Vergleich 4. 🎓 Final-Projekt: Todo-App in C, dann C++ --- ## 🧪 Quiz-System Das Kursmaterial enthält **28 Quizfragen** mit: - ✅ Multiple Choice - 📝 Code-Analyse - 🔍 Konzept-Fragen - 🎯 Score-Tabelle (0-28 Punkte) **Bewertung:** | Punkte | Bewertung | |--------|-----------| | 26-28 | 🏆 Meister | | 22-25 | ⭐ Experte | | 18-21 | ✅ Gut | | < 18 | 📚 Nacharbeiten | --- ## 💡 Kernkonzepte ### 1. Memory-Modell (Universell) ``` ┌─────────────────┐ │ Stack │ ← Automatisch, schnell, begrenzt │ (short-term) │ ├─────────────────┤ │ Heap │ ← Manuell/verwaltet, flexibel │ (long-term) │ └─────────────────┘ ``` **In jeder Sprache:** Stack/Heap existieren, Management variiert ### 2. Typen als Konzepte ```c // Nicht lernen: "int ist 4 Bytes" // Lernen: "int ist ein ganzzahliger Typ mit begrenztem Bereich" ``` ### 3. OOP-Prinzipien (Sprachunabhängig) - **Kapselung:** Daten schützen - **Abstraktion:** Wie ist egal - **Vererbung:** "IS-A" Beziehung - **Polymorphie:** Gleiche Schnittstelle --- ## 🔧 C vs C++ Vergleich | Feature | C | C++ | |---------|---|-----| | Memory | `malloc/free` | `new/delete`, RAII | | Strings | `char[]` | `std::string` | | Arrays | Fixed/dynamisch | `std::vector` | | OOP | Simuliert | Nativ (`class`) | | Generics | `void*` | `template` | | Module | Header | Namespaces | --- ## 📝 Checkpoints ### Checkpoint A (nach Modul 2) ```c // Frage: Was ist der Output? void test() { int x = 42; int *p = &x; // Was ist p nach Ende von test()? } ``` ### Checkpoint B (nach Modul 4) Erstelle einen Taschenrechner mit: - Menü-System (if/switch) - Mathematische Funktionen - Rekursive Fakultät - Fehlerbehandlung ### Checkpoint C (nach Modul 6) Implementiere eine dynamische Liste: ```c typedef struct { int* data; int size; int capacity; } Vector; void vector_push(Vector* v, int value); int vector_get(Vector* v, int index); ``` ### Final-Projekt **Todo-App** mit: 1. CRUD-Operationen 2. File-Speicherung 3. CLI-Interface 4. Modularer Architektur --- ## 📚 Ressourcen ### Bücher - **"The C Programming Language"** (K&R) - Klassiker - **"C++ Primer"** (Lippman) - Umfassend - **"Clean Code"** (Robert C. Martin) - Sprachunabhängig! - **"Design Patterns"** (Gang of Four) - Das Original ### Online - [exercism.org](https://exercism.org) - Sprachübergreifende Übungen - [leetcode.com](https://leetcode.com) - Algorithmen - [codewars.com](https://codewars.com) - Katas ### Dokumentation - [C Reference](https://en.cppreference.com/w/c) - [C++ Reference](https://en.cppreference.com/w/cpp) --- ## 🤝 Mitwirken Dieser Kurs ist für Bildungszwecke gedacht. Verbesserungsvorschläge willkommen! --- ## 📄 Lizenz MIT License - Für Bildungszwecke frei nutzbar. --- **Viel Erfolg beim Lernen! 🚀** *Remember: Programmieren ist nicht Syntax lernen – es sind Konzepte, die in jeder Sprache wiederkehren, nur mit anderem Akzent.*