Sign in Join
Wiki copytemporary

Case/de: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Case/de

OldNewLine
1+\
2+Zurück zu den [[Reserved words/de|reservierten Wörtern]].\
3+Zurück zu den [[Branch/de|Verzweigungen / bedingten Anweisungen]].\
4+\
5+\
6+=Case= Das Schlüsselwort **Case** kann auf zwei Arten eingesetzt werden:\
7+\# einmal in der Form einer Liste von Verzweigungen im Körper eines Unterprogramms\
8+\# einmal in der Typdefinition um für einen speziellen Fall unterschiedliche Schreibweisen zu ermöglichen\
9+\
10+Im ersten Fall ersetzt es verschachtelte [[If/de|IF-Anweisungen]] und ermöglicht so eine bessere Lesbarkeit des Codes.\
11+Im zweiten Fall ermöglicht es dem Programmierer auf unterschiedliche Weise auf einen bestimmten Speicherereich zu zugreifen.\
12+\
13+Für die Case Anweisung können nur Ordinale (Ganzzahlige) Datentypen und String Datentypen verwendet werden.\
14+Der Wert vor dem **:** muss **'zwingend** eine **Konstante** sein.\
15+\
16+
17+# Fall 1 Verwendung in einem Unterprogramm
18+
19+\
20+Die Case Anweisung im Körper eines Unterprogramms ist eine Verzweigung im Unterprogramm. Hier wird die Entscheidung getroffen, welcher Zweig des Unterprogramms abgearbeitet wird.\
21+übersichtlichere Schreibweise für die Schreibweise 'else if' und erzeugt auch schnelleren Code als die Schreibweise 'else if'.\
22+==Case als Ersatz von If==\
23+Anweisungen wie diese:\
24+
25+``` pascal
26+if (b = 1) or (b = 7) then
27+ ...
28+else if (b = 2037) or (b = 5) then
29+ ...
30+else if (b = 390) then
31+ ...
32+else
33+ ...;
34+```
35+
36+\
37+können durch eine Case Anweisung ersetzt werden:
38+
39+``` pascal
40+case b of
41+ 1,7:
42+ ...;
43+ 2037,5:
44+ ...;
45+ 390:
46+ ...;
47+ else
48+ ...;
49+end;
50+```
51+
52+\
53+==Die Abfrage von Wertebereichen==\
54+Es können auch Wertebereiche abgefragt werden:\
55+In diesem Beispiel wird der Wertebereich eines Chars abgefragt.\
56+
57+``` pascal
58+case c of
59+ '0' .. '9':
60+ ...;
61+ 'a' .. 'z':
62+ ...;
63+ 'A' .. 'Z':
64+ ...;
65+ '+' , '-' :
66+ ...;
67+ else
68+ ...;
69+end;
70+```
71+
72+\
73+==Die Schreibweisen else und otherwise==\
74+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
75+
76+- else
77+- otherwise
78+
79+\
80+Beide Beispiele sind richtig und führen zum selben Ergebnis:
81+
82+``` pascal
83+// Beispiel 1
84+case i of
85+ 1:
86+ ...;
87+ 2:
88+ ...;
89+ otherwise
90+ ...;
91+end;
92+
93+//Beispiel 2
94+case i of
95+ 1:
96+ ...;
97+ 2:
98+ ...;
99+ else
100+ ...;
101+end;
102+```
103+
104+\
105+=Fall 2 Bestandteil einer Typdeklaration= Die Caseanweisung in der Typdeklaration erlaubt es den Inhalt des Speicherbereichs auf drei unterschiedliche Weisen auszulesen.\
106+\
107+Die drei Möglichkeiten sind:\
108+* (r,g,b) belegt drei Byte\
109+* (ColorArray) belegt drei Byte\
110+* (Color) belegt vier Byte\
111+\
112+Beispiel:\
113+
114+``` pascal
115+ ...
116+ // Tpydefinition
117+type
118+ TColorRec = record
119+ case integer of
120+ 1: (r, g, b: byte); // belegt drei Byte
121+ 2: (ColorArray: array[0..2] of byte); // belegt drei Byte
122+ 3: (Color: TColor); // belegt vier Byte
123+ end;
124+ ...
125+var
126+ // Typzuweisung
127+ // erstellt eine Variable vom Typ TColorRec
128+ Farbe: TColorRec;
129+
130+begin
131+ // Typverwendung
132+ // belegt jede der drei Variablen mit einem gültigen Wert
133+ Farbe.r := 255;
134+ Farbe.g := 0;
135+ Farbe.b := 255;
136+
137+ // Auf diese drei Arten wird der Speicher ausgelesen und jeweils ein Panel gefärbt
138+ // Der Farbwert ist in allen drei Fällen gleich,
139+ // nur die Art wie auf den Speicherinhalt zugegriffen wird unterscheidet sich
140+ Panel1.Color := RGB(Farbe.r, Farbe.g, Farbe.b);
141+ Panel2.Color := RGB(Farbe.ColorArray[0], Farbe.ColorArray[1], Farbe.ColorArray[2]);
142+ Panel3.Color := Farbe.Color;
143+ ...
144+end;
145+```
146+
147+\
148+\
149+--Olaf 17:49, 19 October 2012 (UTC)
150+
151+---
152+*From the Free Pascal wiki, page "Case/de", as it stood on 2023-05-10 after a change by Joh, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
153+Category: FreePascal/de
154+Category: Reserved words/de

Back to history