Delphi / Object-Pascal : Seite 04
Einfache IF-Abfragen
Wir werden uns nun damit beschäftigen, unseren Taschenrechner aus der letzten Lektion etwas zu optimieren, insbesondere zur Vorbeugung vor Fehlern. So wird der Benutzer z.B. am Ende dieser Lektion gewarnt, dass, sofern er es versucht hat, eine Division durch Null nicht erlaubt ist. Diese Meldung soll in einem kleinen Dialogfenster ausgegeben werden, welches wir auch in dieser Lektion kennen lernen werden.
Kurzer Überblick über informationstechnische Logik
In der Informatik gibt es drei so genannte logische Operatoren, mit deren Hilfe man Bedingungen, die erfüllt sein
sollen, damit etwas gemacht wird, verknüpfen kann. Diese Operatoren sind AND, OR und
NOT, also UND, ODER und NICHT.
Schon aus dem Sprachgebrauch erkennen wir, dass auch keine anderen Operatoren notwendig sind. Jeden Wenn-Dann-Satz mit
mehreren Bedingungen kann man mit diesen drei Operatoren bilden. Ein Beispiel:
WENN Wochenende ist ODER heute NICHT gearbeitet werden muss UND das Wetter gut ist, DANN
gehe ich heute im Freibad schwimmen.
Von entscheidender Bedeutung ist beim Programmieren der "Satzaufbau", also die Reihenfolge der Bedingungen. Damit
Delphi versteht, was es tun soll, setzt man Klammern:
WENN (Benutzername = abc UND Passwort = 123) ODER (Benutzername = def UND Passwort = 321),
DANN lasse den Benutzer herein, SONST nicht.
Würde man ganz auf Klammern verzichten, so würde Delphi selbst Klammern setzen, und zwar so:
WENN ((Benutzername = abc UND Passwort = 123) ODER Benutzername = def) UND Passwort = 321,
DANN lasse den Benutzer herein, SONST nicht.
Gehen wir jetzt mal davon aus, dass sich der Benutzer abc mit seinem Passwort 123 anmeldet. Ein Computer kennt
grundsätzlich nur zwei Zustände: an und aus, also WAHR (true) oder FALSCH (false).
Oben stünde dann:
WENN ((WAHR) ODER FALSCH) UND FALSCH, DANN lasse den Benutzer herein, SONST
nicht.
Das bedeutet:
WENN (WAHR) UND FALSCH, DANN lasse den Benutzer herein, SONST
nicht.
Und das bedeutet dann:
WENN FALSCH, DANN lasse den Benutzer herein, SONST
nicht.
FALSCH bedeutet hier, dass die Bedingung nicht erfüllt ist, obwohl der Benutzer den Benutzernamen und das Kennwort
richtig eingegeben hat. Das würde nach einer Zeit für sehr böse Post seitens der Benutzer sorgen, die sich
nicht anmelden konnten. Wir stellen also fest: die Logik einer Abfrage muss immer genau geprüft werden, bevor man sie
endgültig aufnimmt in das Programm.
Wenn, dann und sonst: IF - THEN - ELSE
An dieser Stelle werden wir uns nochmals unseren Quelltext ansehen, der die Division in unserem Taschenrechner realisiert. Die Variable z1 wird durch z2 dividiert. Wenn nun aber z2 gleich Null ist, gibt Delphi von sich aus sofort eine Fehlermeldung aus, deren innerer Sinn zwar für Programmierer erkennbar ist, aber für den Benutzer weder von Relevanz noch von Verständnis.
Einsatz logischer Operatoren
Wir wollen uns nun anhand einiger Beispiele vergegenwärtigen, wie wir Bedingungen mit den uns bekannten logischen Operatoren
AND, OR und NOT verknüpfen können. Wir werden aber hier nicht ein
Alltagsbeispiel verwenden, sondern einfach herumexperimentieren. Wir beginnen mit der
AND-Verknüpfung.
Sie können dieses Beispiel mitverfolgen. Schließen Sie Delphi, wenn nicht schon geschehen, und öffnen Sie
es erneut, um ein leeres Formular zu bekommen. Legen Sie sich auf dieses Formular ein Editfeld und einen Button, welchen
Sie jetzt bitte doppelklicken, um seine OnClick-Routine zu ändern.
Das Programmierbeispiel wird sein, zu prüfen, ob die vom Benutzer eingegebene Zahl zwischen 5 und 100 liegt oder nicht.
Man kann dieses Beispiel mit zwei IF-Abfragen realisieren, es geht aber auch mit einer, und in der Informatik gilt i.d.R. das
Prinzip der Faulheit, d.h. eine Abfrage muss reichen.
Wir legen uns zunächst eine Variable an, die den eingegebenen Wert speichern soll. Wir nehmen für unser Beispiel
aber nur ganze Zahlen, um nicht so viel Speicherplatz zu verschwenden. Ganze Zahlen heißen in Delphi Integer.
Und das müssen wir auch bei der Variablendeklaration so schreiben:
Nun legen wir fest, wie die Grenzen des zu prüfenden Bereiches aussehen. Wie gesagt wollen wir schauen, ob die Zahl zwischen 5 und 100 liegt. Wir legen uns dazu Konstanten an. Das geschieht mit dem Schlüsselwort const:
Kümmern wir uns nun um die Zuweisung des Feldinhalts in die Variable zahl. Wie gewohnt wird dies folgendermaßen realisiert:
{Variable vom Typen 2} := {1}To{2}({Variable vom Typen 1});
Nachdem wir nun die Variable initialisiert, d.h. belegt haben, können wir damit auch arbeiten. Wir wollen, dass eine Nachricht ausgegeben wird, wenn die Zahl größer als fünf und kleiner als 100 ist, sonst soll eine negative Nachricht ausgegeben werden. Und das realisieren wir so:
Wenn wir das Programm nun starten und z.B. 6 eingeben, kommt als Meldung (bei Klick auf den Button), dass die Zahl zwischen 5 und 100 liegt. Geben wir 2 oder 107 ein, kommt die Meldung, dass es nicht der Fall ist. Was wäre nun aber passiert, wenn wir statt AND ein OR eingegeben hätten, der Quelltext also dieser wäre:
Versuchen Sie nun, zu erraten, was die folgende Änderung auswirken würde: