Verzweigungen

Verzweigungen in der Programmierung dienen dazu, Entscheidungen zu treffen. Sie führen bestimmte Teile des Codes nur dann aus, wenn eine bestimmte Bedingung erfüllt ist, andernfalls überspringen sie diese Teile. In vielen Programmiersprachen werden Verzweigungen mit sogenannten "if-Anweisungen" realisiert. Hier ist ein einfaches Beispiel: In einem Programm kann eine Punktzahl eingegeben werden, und das Programm entscheidet, ob die Prüfung bestanden wurde oder nicht.

Das Diagramm zeigt, wie das Programm funktioniert. Jetzt können wir diesen Plan in ein C-Programm umwandeln.

#include <stdio.h>

int main(){
    int punkte;

    // Ausgabe von Text auf der Kommandozeile
    printf("Bitte geben Sie die erreichte Punktzahl ein: ");

    // Einlesen der Punkte
    scanf_s("%d", &punkte);

    // Überprüfung ob 60 oder mehr eingelesen wurde
    if (punkte >= 60) {
        printf("\nDie Pruefung wurde mit %d Punkten 	bestanden!\n", punkte);
    } else { // falls weniger als 60 eingelesen wurde, wird dieser Teil ausgeführt
    printf("\nDie Pruefung wurde NICHT bestanden!\n");
    }
    return 0;
}

In den folgenden Abschnitten gehen wir genauer auf die verschiedenen Teile dieses Programmcodes ein.

Operatoren

Operatoren werden unter anderem dazu verwendet in einer Verzweigung eine Bedingung zu überprüfen. Aus diesem Grund sind die Vergleichsoperationen für die Verzweigungen sehr wichtig.

Vergleichsoperatoren

In Verzweigungen verwenden wir Vergleichsoperatoren, um Dinge miteinander zu vergleichen. Beispiele für Vergleichsoperator sind < (kleiner als) oder > (grösser als).

Zum Beispiel: wenn wir a < b haben, vergleichen wir die Werte von a und b. Je nachdem, welche Werte sie haben, ist die Bedingung entweder wahr oder falsch.

Hier sind einige Vergleichsoperatoren:

Vergleichsoperatoren
>grösser als
<kleiner als
>=grösser gleich
<=kleiner gleich
==gleich
!=ungleich

Logische Operatoren

Logische Operatoren können dazu verwendet werden zwei oder mehrere Vergleichsoperatoren miteinander zu verknüpfen. Es gibt drei verschiedene logische Operatoren:

  • UND (&&): Der UND-Operator gibt nur wahr zurück, wenn beide Bedingungen wahr sind.
  • ODER (||): Der Oder-Operator gib wahr zurück, wenn eine der Bedingungen wahr ist.
  • NICHT (!): Verneint eine Bedingung. Zum Beispiel, !(x == 10) ist wahr, wenn x nicht gleich 10 ist.

if

In C und vielen anderen Programmiersprachen verwenden wir if für Verzweigungen. Die Bedingung in den Klammern nach dem if entscheidet, ob ein bestimmter Code ausgeführt wird oder nicht.

#include <stdio.h>

int main(){
    int zahl = 10;

    if (zahl == 10) {
        printf("Die Zahl ist:  %d\n", zahl);
    } 
    return 0;
}

Alles, was in den geschweiften Klammern nach dem if steht, wird nur dann ausgeführt, wenn die Variable zahl den Wert 10 hat. Andernfalls wird dieser Teil des Codes übersprungen.

Hinweis: Die Zeile mit dem if enthält kein ;.

else

Manchmal möchten wir auch etwas tun, wenn die Bedingung im if nicht erfüllt ist. Dafür verwenden wir else. Wenn die Bedingung im if nicht wahr ist, wird der Code im else-Teil ausgeführt.

#include <stdio.h>

int main(){
    int zahl = 11;

    if (zahl == 10) {
        printf("Die Zahl ist:  %d\n", zahl);
    } else {
        printf("Die Zahl ist nicht 10");
    }
    return 0;
}

Da zahl hier den Wert 11 hat, wird der if Teil übersprungen und der else Teil wird ausgeführt.

Schachtelung

Es ist möglich ein if in einem anderen if zu verschachteln. So können mehrere Bedingungen überprüft werden und verschiedene "Unterkategorien" erstellt werden.

#include <stdio.h>

int main(){
    int zahl = 11;

    if (zahl > 10) {
        printf("Die Zahl ist:  %d\n", zahl);
    } else {
        if (zahl > 0){
            printf("Die Zahl ist zwischen 1 und 10");
        } else {
            printf("Die Zahl ist 0 oder kleiner");
        }
    }
    return 0;
}

switch

In der Programmierung benötigen wir manchmal die Möglichkeit, zwischen verschiedenen Zweigen zu wählen. Dies kann mit der Hilfe einer switch-Anweisung erreicht werden. Im Gegensatz zu if, bei dem nur zwischen zwei Zweigen gewählt werden kann, ermöglicht switch die Verzweigung in mehrere verschiedene Zweige.

Um switch zu verwenden, benötigen wir eine ganzzahlige Variable oder einen Ausdruck, der als Entscheidungskriterium dient. Im folgenden Beispiel verwenden wir monat als unsere Entscheidungsvariable, um abhängig von der Monatszahl den Monatsnamen auszugeben:

#include <stdio.h>

int main(){
    int monat;

    // Ausgabe von Text auf der Kommandozeile
    printf("Bitte geben Sie eine Monatszahl ein: \n");

    // Einlesen der Monatszahl
    scanf_s("%d", &monat);

    // Die switch-Anweisung ermöglicht die Auswahl des entsprechenden Zweigs basierend auf dem Wert von 'monat'.
    switch(monat) {
        case 1:
            printf("Januar\n");
            break;
        case 2:
            printf("Februar\n");
            break;
        case 3:
            printf("März\n");
            break;
        case 4:
            printf("April\n");
            break;
        // Wenn 'monat' keinen der oben definierten Werte hat, wird der 'default'-Zweig ausgeführt.
        default:
            printf("Dieser Monat wurde noch nicht definiert oder ist ungültig.\n");
    }
    return 0;
}

In diesem Beispiel fragen wir den Benutzer nach einer Monatszahl und verwenden dann switch, um den entsprechenden Monat basierend auf der eingegebenen Zahl auszuwählen. Beachte, dass am Ende jedes case-Blocks ein break-Statement steht, das sicherstellt, dass nach Ausführung eines Zweigs der Rest des switch-Statements übersprungen wird.

switch ist besonders nützlich, wenn du eine grosse Anzahl von möglichen Optionen oder Zuständen in deinem Programm hast und eine klare Struktur für die Auswahl benötigst.

Zusammenfassung

Verzweigungen in der Programmierung ermöglichen es Code nur unter bestimmten Bedingungen auszuführen. Dies wird häufig mithilfe von if-Anweisungen erreicht. Ein Beispiel verdeutlicht dies: In einem Programm kann der Benutzer eine Punktzahl eingeben, und das Programm entscheidet daraufhin, ob eine Prüfung bestanden wurde oder nicht. Vergleichsoperatoren wie <, >, == und logische Operatoren wie && und || spielen dabei eine wichtige Rolle. Mit if kann festgelegt werden, welcher Code ausgeführt wird, wenn eine Bedingung erfüllt ist. Falls nicht, kann ein else-Teil definiert werden, der ausgeführt wird. Verschachtelte Verzweigungen erlauben es, mehrere Bedingungen zu überprüfen und unterschiedliche Aktionen basierend auf diesen Bedingungen auszuführen. Verzweigungen sind eine grundlegende Kontrollstruktur in der Programmierung und ermöglichen es, Programme flexibel auf verschiedene Situationen reagieren zu lassen.

Quiz

Aufgaben

Die Aufgaben zu Verzweigungen sind auf GitHub zu finden. Die fortgeschrittenen Aufgaben sind in diesem GitHub Repository zu finden.