Difference between revisions of "Case/de"

From Free Pascal wiki
Jump to navigationJump to search
(Use pascal highlighter)
Line 25: Line 25:
 
<br>
 
<br>
 
Anweisungen wie diese:<br>
 
Anweisungen wie diese:<br>
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
if (b = 1) or (b = 7) then
 
if (b = 1) or (b = 7) then
 
   ...
 
   ...
Line 37: Line 37:
 
<br>
 
<br>
 
können durch eine Case Anweisung ersetzt werden:
 
können durch eine Case Anweisung ersetzt werden:
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
case b of
 
case b of
 
   1,7:
 
   1,7:
Line 54: Line 54:
 
Es können auch Wertebereiche abgefragt werden:<br>
 
Es können auch Wertebereiche abgefragt werden:<br>
 
In diesem Beispiel wird der Wertebereich eines Chars abgefragt.<br>
 
In diesem Beispiel wird der Wertebereich eines Chars abgefragt.<br>
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
case c of
 
case c of
 
   '0' .. '9':
 
   '0' .. '9':
Line 76: Line 76:
 
<br>
 
<br>
 
Beide Beispiele sind richtig und führen zum selben Ergebnis:
 
Beide Beispiele sind richtig und führen zum selben Ergebnis:
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
// Beispiel 1
 
// Beispiel 1
 
case i of
 
case i of
Line 107: Line 107:
 
<br>
 
<br>
 
Beispiel:<br>
 
Beispiel:<br>
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
   ...
 
   ...
 
   // Tpydefinition
 
   // Tpydefinition

Revision as of 23:21, 24 January 2020

Deutsch (de) English (en) español (es) suomi (fi) français (fr) русский (ru)

Zurück zu den reservierten Wörtern.
Zurück zu den Verzweigungen / bedingten Anweisungen.


Case

Das Schlüsselwort Case kann auf zwei Arten eingesetzt werden:

  1. einmal in der Form einer Liste von Verzweigungen im Körper eines Unterprogramms
  2. einmal in der Typdefinition um für einen speziellen Fall unterschiedliche Schreibweisen zu ermöglichen


Im ersten Fall ersetzt es verschachtelte IF-Anweisungen und ermöglicht so eine bessere Lesbarkeit des Codes.
Im zweiten Fall ermöglicht es dem Programmierer auf unterschiedliche Weise auf einen bestimmten Speicherereich zu zugreifen.

Für die Case Anweisung können nur Ordinale (Ganzzahlige) Datentypen und String Datentypen verwendet werden.
Der wer vor dem : muss 'zwingend eine Konstante sein.

Fall 1 Verwendung in einem Unterprogramm


Die Case Anweisung im Körper eines Unterprogramms ist eine Verzweigung im Unterprogramm. Hier wird die Entscheidung getroffen, welcher Zweig des Unterprogramms abgearbeitet wird.
übersichtlichere Schreibweise für die Schreibweise 'else if' und erzeugt auch schnelleren Code als die Schreibweise 'else if'.

Case als Ersatz von If


Anweisungen wie diese:

if (b = 1) or (b = 7) then
  ...
else if (b = 2037) or (b = 5) then
  ...
else if (b = 390) then
  ...
else
  ...;


können durch eine Case Anweisung ersetzt werden:

case b of
  1,7:
    ...;
  2037,5:
    ...;
  390:
    ...;
  else
    ...;
end;


Die Abfrage von Wertebereichen


Es können auch Wertebereiche abgefragt werden:
In diesem Beispiel wird der Wertebereich eines Chars abgefragt.

case c of
  '0' .. '9':
    ...;
  'a' .. 'z':
    ...;
  'A' .. 'Z':
    ...;
  '+' , '-' :
    ...;
  else
    ...;
end;


Die Schreibweisen else und otherwise


Für den Sonstfall, also für alle die Fälle, die in der Case Anweisung nicht abgefragt wurden gibt es zwei gültige Schreibweisen

  • else
  • otherwise


Beide Beispiele sind richtig und führen zum selben Ergebnis:

// Beispiel 1
case i of
  1:
    ...;
  2:
    ...;
  otherwise
    ...;
end;

//Beispiel 2
case i of
   1:
     ...;
   2:
     ...;
   else
     ...;
end;


Fall 2 Bestandteil einer Typdeklaration

Die Caseanweisung in der Typdeklaration erlaubt es den Inhalt des Speicherbereichs auf drei unterschiedliche Weisen auszulesen.

Die drei Möglichkeiten sind:

  • (r,g,b) belegt drei Byte
  • (ColorArray) belegt drei Byte
  • (Color) belegt vier Byte


Beispiel:

  ...
  // Tpydefinition
type
  TColorRec = record
    case integer of
      1: (r, g, b: byte);                   // belegt drei Byte
      2: (ColorArray: array[0..2] of byte); // belegt drei Byte
      3: (Color: TColor);                   // belegt vier Byte
  end;
  ...
var
  // Typzuweisung
  // erstellt eine Variable vom Typ TColorRec
  Farbe: TColorRec;

begin
  // Typverwendung
  // belegt jede der drei Variablen mit einem gültigen Wert
  Farbe.r := 255;
  Farbe.g := 0;
  Farbe.b := 255;

  // Auf diese drei Arten wird der Speicher ausgelesen und jeweils ein Panel gefärbt
  // Der Farbwert ist in allen drei Fällen gleich,
  // nur die Art wie auf den Speicherinhalt zugegriffen wird unterscheidet sich
  Panel1.Color := RGB(Farbe.r, Farbe.g, Farbe.b);
  Panel2.Color := RGB(Farbe.ColorArray[0], Farbe.ColorArray[1], Farbe.ColorArray[2]);
  Panel3.Color := Farbe.Color;
  ...
end;



--Olaf 17:49, 19 October 2012 (UTC)