Dein Fortschritt:
0 / 0 Aufgaben
1
Die automatische Pflanzenbewässerung
AFB I–IIDie 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
- Geben Sie an, welche Meldung der
if-Teil ausgibt, wenn der Sensor 34 %, 20 %, 40 % bzw. 5 % meldet. - Stellen Sie den Ablauf der
while-Schleife für den Startwert 22 % in einer Tracetabelle mit den Spaltenfeuchte,tank, Wert der Bedingung und Ausgabe dar. Notieren Sie außerdem, welche Teilbedingung die Schleife beendet. - 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?