MINT üben

Kontrollstrukturen in C

Eine Bewässerungsanlage entscheidet mit if und while, wann sie gießt, und im Brettspiel sorgt ein fehlendes break für zu viele Goldpunkte.

Dein Fortschritt:
0 / 0 Aufgaben
1

Die automatische Pflanzenbewässerung

AFB I–II

Die Bio-AG möchte, dass die Tomatenpflanzen im Klassenzimmer auch in den Ferien Wasser bekommen. Ein Feuchtesensor im Topf misst die Bodenfeuchte in Prozent, eine Pumpe fördert pro Gießgang 250 ml aus einem Tank. Erfahrungsgemäß steigt die Bodenfeuchte pro Gießgang um 8 Prozentpunkte. Samira programmiert die Steuerung zunächst als Testprogramm am PC; der Sensorwert ist dazu fest eingetragen.

C · giessen.c
#include <stdio.h>

int main(void) {
    int feuchte = 22;           // Bodenfeuchte in Prozent (vom Sensor)
    int tank = 1000;            // Wasser im Tank in ml

    if (feuchte < 20) {
        printf("Sofort giessen!\n");
    } else if (feuchte < 40) {
        printf("Bald giessen.\n");
    } else {
        printf("Alles gut.\n");
    }

    while (feuchte < 40 && tank >= 250) {
        tank = tank - 250;      // ein Giessgang
        feuchte = feuchte + 8;
        printf("Giessgang: %d %%, Tank %d ml\n", feuchte, tank);
    }
    return 0;
}

Finn findet die else if-Kette zu lang und schlägt für die Meldung „Bald giessen.“ diese kürzere Bedingung vor:

C · Finns Vorschlag
if (20 <= feuchte < 40) {
    printf("Bald giessen.\n");
}
Die Bewässerungsanlage
Tank: 1000 ml P Pumpe 250 ml je Gießgang Feuchtesensor meldet 22 %
Pro Gießgang fördert die Pumpe 250 ml; die Bodenfeuchte steigt dabei um etwa 8 Prozentpunkte.
  1. Geben Sie an, welche Meldung der if-Teil ausgibt, wenn der Sensor 34 %, 20 %, 40 % bzw. 5 % meldet.
  2. Stellen Sie den Ablauf der while-Schleife für den Startwert 22 % in einer Tracetabelle mit den Spalten feuchte, tank, Wert der Bedingung und Ausgabe dar. Notieren Sie außerdem, welche Teilbedingung die Schleife beendet.
  3. Erläutern Sie, was Finns Bedingung in C tatsächlich prüft und warum sie für jeden Sensorwert wahr ist.

Hinweise

Hinweis zu Aufgabe a)
Prüfen Sie die Bedingungen von oben nach unten; sobald eine wahr ist, werden die übrigen übersprungen. Achten Sie genau auf < und die Grenzwerte.
Hinweis zu Aufgabe b)
Eine Zeile pro Prüfung der Bedingung, auch für die letzte Prüfung, die falsch ist. && ist nur wahr, wenn beide Teile wahr sind.„Darstellen“ heißt hier: den Ablauf in einer fachüblichen Form (Tracetabelle) vollständig wiedergeben.
Hinweis zu Aufgabe c)
C wertet 20 <= feuchte < 40 von links nach rechts aus, also wie (20 <= feuchte) < 40. Welchen Wert hat ein Vergleich in C?