Projekt mit
1 €
unterstützen?
So geht das *:


Step 09 - Programmsteuerung 1:

Bedingungabfrage mit "if"

Die If-Abfrage wird verwendet, um Programmcode nur dann auszuführen, wenn angegebene Bedingungen erfüllt sind.

if

  if [Bedingung(en) vom Typ Boolean] then
  begin
    // Ausführen, wenn Bedingung erfüllt ist!
    // Hier sind weitere Anweisungen durch begin und end getrennt.
  end; // Ende der IF-Abfrage

Wenn man nur eine Anweisung ausführen will, dann kann man auch begin und end weglassen:

if [Bedingung(en) vom Typ Boolean] then
  // Befehl, der ausgeführt werden soll.
Dann gibt es noch die Möglichkeit, Anweisungen ausführen zu lassen, wenn die Bedingung(en) des if-Teiles nicht erfüllt sind:

if ... else

  if [Bedingung(en) vom Typ Boolean] then
  begin
        // Ausführen, wenn Bedingung erfüllt ist!

        // Hier sind weitere Anweisungen durch begin und end getrennt.
  end   // Ende der IF-Abfrage - Wichtig: hier jetzt kein Semikolon!
  else  // ansonsten
  begin 
        // Ausführen, wenn Bedingung nicht erfllt ist!

  end;  // ende der gesammten if-else-Anweisung

// nur einzelne Anweisungen:

  if [Bedingung(en) vom Typ Boolean] then
    // Befehl, der ausgeführt werden soll, wenn Bedingung erfüllt ist (ohne Semikolon!)
  else
    // Befehl, der ausgeführt werden soll, wenn Bedingung nicht erfüllt ist.
genauso kann man diese Anweisungen verketten:

if ... else if ... else

  if [Bedingung(en) vom Typ Boolean] then
  begin
    ...
  end
  else if [Bedingung(en) vom Typ Boolean] then
  begin
    ...
  end
  else
  begin
    ...
  end;

Verschachtelung

  if [Bedingung(en) vom Typ Boolean] then         // 1. Ebene
  begin 
    if [Bedingung(en) vom Typ Boolean] then       // 2. Ebene
    begin
	  if [Bedingung(en) vom Typ Boolean] then // 3. Ebene
	    ... // auch einzeilige Bedingungs-Abfragen möglich
      ...
    end  // von 2. Ebene
    else // auch einzeilige else-Teile sind möglich
      ...;
  end;   // von 1. Ebene


Doch was sind diese Bedingungen?
Wir meinen hier mit Bedingungen Wahrheitsaussagen.
Der Variablentyp dafür ist Boolean.
Mögliche Werte hierfür sind: true und false

Wir können mittels Vergleichen eine solche Wahrheitsaussage erzeugen:

Vergleiche in Delphi sind folgende:
Operator Beschreibung Beispiel
= Vergleich auf Gleichheit i=10
>     >= Größer als bzw. Größer gleich i>9
<     <= Kleiner als bzw. Kleiner gleich i<9
<> Ungleich i<>5

Und hier eine Tabelle der Logik-Verknüpfungen:
Verknüpfung Beschreibung Beispiel
AND UND-Verknüpfung if (i >= 3) AND (i<10) then
OR ODER-Verknüpfung if (i = 3) OR (i=10) then
XOR Exclusiv-Oder-Verknüpfung if (a = 3) XOR (b = 10) then

Wichtig: Verknüpft man in Delphi Wahrheiten miteinander, müssen diese in Klammern gesetzt werden! Ansonsten sollte man keine Klammern benutzen -> Sprechender Quelltext :-)

Hier die Wahrheitstabellen:

Kurze Tabelle zur Erklärung:
verknüpft mit B B ist Richtig B ist Falsch
A ist Richtig (Ergebnis von A=Richtig und B=Richtig) (Ergebnis von A=Richtig und B=Falsch)
A ist Falsch (Ergebnis von A=Falsch und B=Richtig) (Ergebnis von A=Falsch und B=Falsch)

Die Und-Verknüpfung:
(a = 3) AND (b = 10) Richtig Falsch
Richtig Richtig Falsch
Falsch Falsch Falsch

Die Oder-Verknüpfung:
(a = 3) OR (b = 10) Richtig Falsch
Richtig Richtig Richtig
Falsch Richtig Falsch

Zu XOR:

der code nach der als Beispiel genannte if-Anweisung wird dann ausgeführt, wenn entweder a=3 oder b=10 ist, aber nicht, wenn beides Richtig oder beides falsch ist:

(a = 3) XOR (b = 10) Richtig Falsch
Richtig Falsch Richtig
Falsch Richtig Falsch

Manchmal kommt es vor, dass man einen größeren Ausdruck hat, von dem man jetzt aber genau das Gegenteil möchte. Klar, wir wissen im Grunde jetzt schon, dass wir hierfür "else" benutzen können, aber wenn wir nur eine Bedingungsabfrage brauchen, dann können wir die Negation mit NOT erstellen:
if not s='ping' then
// ist das selbe wie
if s<>'ping' then

Hier mehrere Beispiele:

// Sehr Wichtig für dieses Beispiel bei Lazarus ist, dass wir die Unit LCLType in die Uses eintragen:
uses
  Classes, ..., LCLType;
...
Bei Delphi würde es gleich ohne Änderung der Uses los gehen:

procedure TForm1.Button1Click(Sender: TObject);
var
  b     : Boolean;
  i,k,m : Integer;
begin
  // Benutzerabfrage:

  if Application.MessageBox('Wollen Sie wirklich weitermachen?',
                            'Frage',
                            MB_YESNO+MB_ICONQUESTION)=ID_YES then
    ShowMessage('Gute Wahl!')
  else if Application.MessageBox('Finden Sie es etwa zu schwer?',
                                'Frage',
                                MB_YESNO+MB_ICONQUESTION)=ID_YES then
    ShowMessage('...dann mailen Sie mir doch wenn Sie Fragen haben ;-)')
  else
    ShowMessage('Wo liegt denn das Problem?');
	
// Mehr zu MessageBox findet man in der Hilfe von Delphi oder hier

  // ein einfaches Beispiel:
  i:=15;
  k:=10;
  b:=(i=15) XOR (k=15);
  if b then
    k:=i div 3;
  b:=((i+k)=20) AND ((i-k)<k);
  if not b then
    ShowMessage('Tach auch!');


  // ein bisschen trickreicher! -> kleine Aufgabe:
  // "rechen" den Script in Gedanken durch!
  // kommen wir an die Meldung "Ziel"?
  i:=5;
  k:=18;
  m:=k mod i;
  if m=3 then
  begin
    i:=k*m-i;
    if i=49 then
    begin
      k:=i div m;
      m:=(i mod 10) * 3-k;
      if (k=16) XOR (m=k div 2) then
        ShowMessage('Ziel')
      else
        ShowMessage('Error x03');
    end
    else
      ShowMessage('Error x02');
  end
  else
    ShowMessage('Error x01');
end;

Da das Kommentarmodul dieser Seite zur Zeit neu überarbeitet werden muss, sendet bitte alle Fragen, Anregungen oder Probleme mit Betreff zu welchem Thema es sich handelt an folgende Mailadresse:


Hinweis:

Dieses Kommentar-Modul teilt seinen Inhalt mit dem gleichnamigen Kapitel im Delphi-Anfängerkurs. Daher kann es vorkommen, dass Fragen zu Lazarus im Anfängerkurs im Delphi-Anfängerkurs und umgekehrt stehen. Wenn ihr euch registriert, werdet ihr aber immer an die richtige Stelle weitergeleitet.
Zu dieser gemeinsamen Nutzung der Datenbank habe ich mich entschlossen, weil die Sprachelemente in Lazarus genauso wie in Delphi genutzt werden können.

www.marco-hetzel.de
www.delphi-lernen.de
www.lazarus-lernen.de

© 2006-2019 by Marco Hetzel , last modified 01.11.2018, 11:28

(* Unterstützung dient der Aufrechthaltung laufender Kosten für dieses Projekt.)