commit 77c86fe48a10ffe6407147b7d82e4823fd07eca5 Author: b0rbor4d Date: Wed Apr 15 00:10:35 2026 +0200 Initial commit: README diff --git a/README.md b/README.md new file mode 100644 index 0000000..74ed0e9 --- /dev/null +++ b/README.md @@ -0,0 +1,256 @@ +# 🎓 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.*