Difference between revisions of "Case/de"
m |
(→Case) |
||
(8 intermediate revisions by 3 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 Wert 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> | ||
− | |||
<br> | <br> | ||
Die drei Möglichkeiten sind:<br> | Die drei Möglichkeiten sind:<br> | ||
− | + | * (r,g,b) belegt drei Byte<br> | |
− | + | * (ColorArray) 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 | + | 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) | ||
− | [[Category: | + | [[Category:Reserved words/de]][[Category:FreePascal/de]] |
Latest revision as of 12:40, 10 May 2023
│
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:
- einmal in der Form einer Liste von Verzweigungen im Körper eines Unterprogramms
- 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 Wert 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)