Step 10 - Case

Spendenaufruf des DRK Ortsvereins Spielberg e.V.

16. April 2023

 

Hallo liebe Besucherin, hallo lieber Besucher!

In einem ganz anderen Kontext möchte ich hier nun bewerben:
Der Verein, für den ich auch einstehe, benötigt Spenden.
Ich habe vergangenes Jahr über fünf Monate versucht für delphi-lernen.de Spenden zu sammeln - es blieb leider bei 20 Euro von zwei Spendewilligen.
Nun hoffe ich, da es nicht um mich geht, dass sich mehr entschließen und für eine gute Sache zu spenden:

Alle Informationen - auch für die Überweisung den Verwendungszweck beachten!

Der neuste Stand, mindestens einmal im Monat hier zu sehen!

Wenn du denkst, du bist zu klein, um etwas zu bewirken, dann versuche, in einem Bett zu schlafen. (Dalai Lama)

 

 

Programmsteuerung 2: Bedingungsabfrage mit "case"

Die Case-Anweisung funktioniert im Prinzip gleich wie eine if-Anweisung, nur mit dem Unterschied, dass bestimmte "Fälle" abgearbeitet werden. Es können allerdings nur Integer-werte, Buchstaben (Char) sowie Sets abgefragt werden
Der grundsätzliche Aufbau soll kurz durch folgendes Beispiel gezeigt werden:
var
  i:Integer;
begin
  
  //...
  
  case i of
   1:     //wenn i=1, dann ...
    begin
          //mach was
    end;
   2,3,4: //wenn i=2 oder i=3 oder i=4, dann ...
    begin
          //mach was
    end;
   5..10: //wenn i zwischen 5 und 10
    begin //           oder gleich 5 oder gleich 10 ist, dann...
          //mach was
    end;
    else  // ansonsten
    begin
          // mach was anderes
    end;
  end;    // Sehr wichtig: Das End von Case!

end;
 
Die case-Anweisung kann nur auf "abzählbare Mengen" angewandt werden. Das heißt, wir können nicht nur Integer nehmen, aber z.B. keinen String, da dieser nicht abzählbar ist.
Das folgende Beispiel zeigt, wie wir schon jetzt - ohne weiteres Wissen, wie ein "Datum" verarbeitet wird, mit einem Datum als Integer arbeiten, in dem wir nur die einzelnen Elemente, Tag, Monat und Jahr, dafür verwenden.
var
  tag, monat, jahr, datum : Integer;
  datumAlsString, msg : String;
begin
  tag := StrToInt( edTag.Text);
  monat := StrToInt( edMonat.Text);
  jahr := StrToInt( edJahr.Text);

  datum := tag * 1000000 + monat * 10000 + jahr;
  datumAlsString := IntToStr( tag) + '.'
                    + IntToStr( monat) + '.'
                    + IntToStr( jahr);

  case datum of
    31122021, 31122022, 31122023 :
    begin
      msg := 'Heute ist Silvester!';
      msg := msg + ' Frohes Neues Jahr 2022!';
    end;
    1012022, 1012023, 1012024 :
    begin
      msg := 'Heute ist Neujahr!';
      msg := msg + ' Frohes Neues Jahr 2022!';
    end;
    else
    begin
      msg := 'Heute ist der ';
      msg := msg + datumAlsString;
      msg := '! Mach was draus ;)';
    end;
  end;

  ShowMessage( msg);
end;
Kleine Quizfrage:
Was können wir in oberem Beispiel ändern, um den Code für Silvester und Neujahr für alle zukünftigen Jahre funktionsfähig zu halten? Versuche es selbst zu ändern, sobald dir etwas einfällt :)
 
Im folgenden Beispiel wird zudem noch die "Kurzform" gezeigt. Wie bei der if-Anweisung kann hier auch das begin und end weggelassen werden, wenn man nur eine einzige Methode hat.
type
  TImportantColors = (Red, Green, Blue);  
var
  cl : TImportantColors;
begin
  // ...
  cl := Blue;
  // ...  
  // Auch Kurzschreibform ist möglich:
  case cl of
    Red : showMessage('Red');
    Green : showMessage('Green');
    Blue : showMessage('Blue');
    else showMessage('???');
  end;
  // ...  
  // Oder mehrere Werte auflisten und auf eine Anweisung legen:
  case cl of
    Red, Green : showMessage('Not Blue');
    Blue : showMessage('Blue');
    else showMessage('???');
  end;
  // ...  
end;
 
Auch wenn es recht wenig Beispiele sind - du findest diese alle unter GitHub im Beispielprojekt ;)
Viel Spaß :)