Difference between revisions of "Case/de"

From Free Pascal wiki
Jump to navigationJump to search
m
(Use pascal highlighter)
(6 intermediate revisions by 2 users not shown)
Line 2: Line 2:
 
<br>
 
<br>
 
Zurück zu den [[Reserved words/de|reservierten Wörtern]].<br>
 
Zurück zu den [[Reserved words/de|reservierten Wörtern]].<br>
 +
Zurück zu den [[Branch/de|Verzweigungen / bedingten Anweisungen]].<br>
 
<br>
 
<br>
 
__TOC__
 
__TOC__
Line 14: Line 15:
 
<br>
 
<br>
 
Für die Case Anweisung können nur Ordinale (Ganzzahlige) Datentypen und String Datentypen verwendet werden.<br>
 
Für die Case Anweisung können nur Ordinale (Ganzzahlige) Datentypen und String Datentypen verwendet werden.<br>
 +
Der wer vor dem ''':''' muss ''''zwingend''' eine '''Konstante''' sein.<br>
 
<br>
 
<br>
  
Line 23: 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 35: 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 52: 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 74: 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 98: Line 100:
 
=Fall 2 Bestandteil einer Typdeklaration=
 
=Fall 2 Bestandteil einer Typdeklaration=
 
Die Caseanweisung in der Typdeklaration erlaubt es den Inhalt des Speicherbereichs auf drei unterschiedliche Weisen auszulesen.<br>
 
Die Caseanweisung in der Typdeklaration erlaubt es den Inhalt des Speicherbereichs auf drei unterschiedliche Weisen auszulesen.<br>
Wichtig ist, das alle drei Zugriffsarten denselben Datentyp und die selbe Grösse haben.<br>
 
 
<br>
 
<br>
 
Die drei Möglichkeiten sind:<br>
 
Die drei Möglichkeiten sind:<br>
Fall 1: (r,g,b)      belegt drei Byte<br>
+
* (r,g,b)      belegt drei Byte<br>
Fall 2: (ColorArray) belegt drei Byte<br>
+
* (ColorArray) belegt drei Byte<br>
Fall 3: (Color)      belegt drei Byte<br>
+
* (Color)      belegt vier Byte<br>
 
<br>
 
<br>
 
Beispiel:<br>
 
Beispiel:<br>
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
   ...
 
   ...
 
   // Tpydefinition
 
   // Tpydefinition
Line 114: Line 115:
 
       1: (r, g, b: byte);                  // belegt drei Byte
 
       1: (r, g, b: byte);                  // belegt drei Byte
 
       2: (ColorArray: array[0..2] of byte); // belegt drei Byte
 
       2: (ColorArray: array[0..2] of byte); // belegt drei Byte
       3: (Color: TColor);                  // belegt drei Byte
+
       3: (Color: TColor);                  // belegt vier Byte
 
   end;
 
   end;
 
   ...
 
   ...
Line 141: Line 142:
 
<br>
 
<br>
 
--[[User:Olaf|Olaf]] 17:49, 19 October 2012 (UTC)
 
--[[User:Olaf|Olaf]] 17:49, 19 October 2012 (UTC)
{{AutoCategory}}[[Category:Reserved words/de]]
+
[[Category:Reserved words/de]][[Category:FreePascal/de]]

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)