Kapitel 2 Unit 4 von 5 Theorie + Übungen Dauer: ~45 Min.
Ömer
Ömer sagt:

Manchmal reicht ein einfaches if-else nicht. Wenn Bedingungen voneinander abhängen – z.B. erst prüfen ob jemand angemeldet ist, und dann ob er Admin ist – dann brauchen wir verschachtelte Bedingungen. Aber Vorsicht: zu viel Verschachtelung macht Code unleserlich! 🎭

if in if schreiben Einrückung beherrschen Tiefe Verschachtelung vermeiden Komplexe Logik vereinfachen

🪆 Verschachtelte if-Anweisungen

Ein if kann eine weitere if-Anweisung im Inneren haben. Das nennt man Verschachtelung (englisch: nesting):

verschachtelt.cC
#include <stdio.h>
int main() {
    int alter, fuehrerschein;
    printf("Alter: "); scanf("%d", &alter);

    if (alter >= 18) {
        printf("Hast du einen Führerschein? (1=Ja, 0=Nein): ");
        scanf("%d", &fuehrerschein);

        if (fuehrerschein == 1) {
            printf("Du darfst Auto fahren!
");
        } else {
            printf("Kein Führerschein – kein Auto.
");
        }
    } else {
        printf("Zu jung für einen Führerschein.
");
    }
    return 0;
}

📐 Wann verschachteln – wann vereinfachen?

❌ Schlecht – zu tief verschachtelt

if (a) {
  if (b) {
    if (c) {
      if (d) {
        // Pyramid of doom!

✅ Besser – mit && kombinieren

if (a && b && c && d) {
  // Klar und lesbar!
}

💻 Praxisbeispiel: Login-System

login.cC
#include <stdio.h>
int main() {
    int pin, ist_admin;
    printf("PIN: "); scanf("%d", &pin);

    if (pin == 1234) {
        printf("Login OK. Admin? (1=Ja): ");
        scanf("%d", &ist_admin);

        if (ist_admin == 1) {
            printf("Willkommen, Admin!
");
        } else {
            printf("Willkommen, Benutzer!
");
        }
    } else {
        printf("Falsche PIN!
");
    }
    return 0;
}

✏️ Übungen

Übung 1

Ausgabe nachverfolgen

Was gibt das Programm aus für x = 10, y = 3?

C
int x = 10, y = 3;
if (x > 5) {
    if (y > 5) {
        printf("A
");
    } else {
        printf("B
");
    }
} else {
    printf("C
");
}

Ausgabe:

Übung 2

Vereinfachen

Vereinfache diese verschachtelten if-Anweisungen zu einer einzigen Bedingung mit &&:

C
if (punkte >= 50) {
    if (anwesenheit >= 80) {
        printf("Bestanden!
");
    }
}

Vereinfachte Version:

if (___________) { printf("Bestanden! "); }
Übung 3 – Programm

Notenkalkulator

Schreibe ein Programm: Erst prüfen ob Punkte ≥ 50 (bestanden). Falls ja, prüfen ob Punkte ≥ 87 für „Auszeichnung". Falls nicht bestanden, ob Punkte ≥ 40 für „Wiederholungsprüfung möglich".

#include <stdio.h> int main() { int punkte; printf("Punkte (0-100): "); scanf("%d", &punkte); if (punkte >= 50) { if (punkte >= 87) printf("Bestanden mit Auszeichnung! (%d Punkte)\n", punkte); else printf("Bestanden! (%d Punkte)\n", punkte); } else { if (punkte >= 40) printf("Nicht bestanden - Wiederholungspruefung moeglich (%d Punkte)\n", punkte); else printf("Nicht bestanden - Keine Wiederholung (%d Punkte)\n", punkte); } return 0; }
💡 Teste mit stdin: 95, 65, 45, 30 – alle vier Fälle solltest du auslösen können!
Übung 4 – Bonus

Dreieck klassifizieren

Lese drei Seitenlängen ein. Prüfe zuerst ob ein Dreieck überhaupt möglich ist (jede Seite muss kürzer als die Summe der anderen beiden). Falls ja: ist es gleichseitig, gleichschenklig oder ungleichseitig?

#include <stdio.h> int main() { float a, b, c; printf("Seite a: "); scanf("%f", &a); printf("Seite b: "); scanf("%f", &b); printf("Seite c: "); scanf("%f", &c); /* Schritt 1: Ist es ein gueltiges Dreieck? */ if (a + b > c && a + c > b && b + c > a) { /* Schritt 2: Welche Art? */ if (/* alle gleich */) printf("Gleichseitiges Dreieck\n"); else if (/* zwei gleich */) printf("Gleichschenkliges Dreieck\n"); else printf("Ungleichseitiges Dreieck\n"); } else { printf("Kein gueltiges Dreieck!\n"); } return 0; }
Für float-Vergleiche: a == b kann bei Kommazahlen unzuverlässig sein. Für dieses Beispiel reicht es trotzdem!