Sign in Join
Wiki copytemporary

Case/de: what changed

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

OldNewLine
1-\
21Zurück zu den [[Reserved words/de|reservierten Wörtern]].\
32Zurück zu den [[Branch/de|Verzweigungen / bedingten Anweisungen]].\
4-\
5-\
3+
64=Case= Das Schlüsselwort **Case** kann auf zwei Arten eingesetzt werden:\
75\# einmal in der Form einer Liste von Verzweigungen im Körper eines Unterprogramms\
86\# einmal in der Typdefinition um für einen speziellen Fall unterschiedliche Schreibweisen zu ermöglichen\
9-\
7+
108Im ersten Fall ersetzt es verschachtelte [[If/de|IF-Anweisungen]] und ermöglicht so eine bessere Lesbarkeit des Codes.\
119Im zweiten Fall ermöglicht es dem Programmierer auf unterschiedliche Weise auf einen bestimmten Speicherereich zu zugreifen.\
12-\
10+
1311Für die Case Anweisung können nur Ordinale (Ganzzahlige) Datentypen und String Datentypen verwendet werden.\
1412Der Wert vor dem **:** muss **'zwingend** eine **Konstante** sein.\
15-\
1613
1714# Fall 1 Verwendung in einem Unterprogramm
1815
19-\
2016Die Case Anweisung im Körper eines Unterprogramms ist eine Verzweigung im Unterprogramm. Hier wird die Entscheidung getroffen, welcher Zweig des Unterprogramms abgearbeitet wird.\
2117übersichtlichere Schreibweise für die Schreibweise 'else if' und erzeugt auch schnelleren Code als die Schreibweise 'else if'.\
2218==Case als Ersatz von If==\
2319Anweisungen wie diese:\
2420
2521``` pascal
2622if (b = 1) or (b = 7) then
2723 ...
2824else if (b = 2037) or (b = 5) then
2925 ...
3026else if (b = 390) then
3127 ...
3228else
3329 ...;
3430```
3531
36-\
3732können durch eine Case Anweisung ersetzt werden:
3833
3934``` pascal
4035case b of
4136 1,7:
4237 ...;
4338 2037,5:
4439 ...;
4540 390:
4641 ...;
4742 else
4843 ...;
4944end;
5045```
5146
52-\
5347==Die Abfrage von Wertebereichen==\
5448Es können auch Wertebereiche abgefragt werden:\
5549In diesem Beispiel wird der Wertebereich eines Chars abgefragt.\
5650
5751``` pascal
5852case c of
5953 '0' .. '9':
6054 ...;
6155 'a' .. 'z':
6256 ...;
6357 'A' .. 'Z':
6458 ...;
6559 '+' , '-' :
6660 ...;
6761 else
6862 ...;
6963end;
7064```
7165
72-\
7366==Die Schreibweisen else und otherwise==\
7467Für den Sonstfall, also für alle die Fälle, die in der Case Anweisung nicht abgefragt wurden gibt es zwei gültige Schreibweisen
7568
7669- else
7770- otherwise
7871
79-\
8072Beide Beispiele sind richtig und führen zum selben Ergebnis:
8173
8274``` pascal
8375// Beispiel 1
8476case i of
8577 1:
8678 ...;
8779 2:
8880 ...;
8981 otherwise
9082 ...;
9183end;
9284
9385//Beispiel 2
9486case i of
9587 1:
9688 ...;
9789 2:
9890 ...;
9991 else
10092 ...;
10193end;
10294```
10395
104-\
10596=Fall 2 Bestandteil einer Typdeklaration= Die Caseanweisung in der Typdeklaration erlaubt es den Inhalt des Speicherbereichs auf drei unterschiedliche Weisen auszulesen.\
106-\
97+
10798Die drei Möglichkeiten sind:\
10899* (r,g,b) belegt drei Byte\
109100* (ColorArray) belegt drei Byte\
110101* (Color) belegt vier Byte\
111-\
102+
112103Beispiel:\
113104
114105``` pascal
115106 ...
116107 // Tpydefinition
117108type
118109 TColorRec = record
119110 case integer of
120111 1: (r, g, b: byte); // belegt drei Byte
121112 2: (ColorArray: array[0..2] of byte); // belegt drei Byte
122113 3: (Color: TColor); // belegt vier Byte
123114 end;
124115 ...
125116var
126117 // Typzuweisung
127118 // erstellt eine Variable vom Typ TColorRec
128119 Farbe: TColorRec;
129120
130121begin
131122 // Typverwendung
132123 // belegt jede der drei Variablen mit einem gültigen Wert
133124 Farbe.r := 255;
134125 Farbe.g := 0;
135126 Farbe.b := 255;
136127
137128 // Auf diese drei Arten wird der Speicher ausgelesen und jeweils ein Panel gefärbt
138129 // Der Farbwert ist in allen drei Fällen gleich,
139130 // nur die Art wie auf den Speicherinhalt zugegriffen wird unterscheidet sich
140131 Panel1.Color := RGB(Farbe.r, Farbe.g, Farbe.b);
141132 Panel2.Color := RGB(Farbe.ColorArray[0], Farbe.ColorArray[1], Farbe.ColorArray[2]);
142133 Panel3.Color := Farbe.Color;
143134 ...
144135end;
145136```
146137
147-\
148-\
149138--Olaf 17:49, 19 October 2012 (UTC)
150139
151140---
152141*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).*
153142Category: FreePascal/de
154143Category: Reserved words/de

Back to history