Turbo Pascal- instrukcja warunkowa "case"

Instrukcja warunkowa „Case”

Instrukcja wyboru jest strukturą sterowania, którą zdefiniował C. Hoare w latach sześćdziesiątych jako rozwinięcie pojęcia przełącznika w Algolu 60. Realizacja instrukcji tej jednak wymusza pewne ograniczenia ilościowe. Istnienie tego problemu sprawiło, że w Turbo Pascalu instrukcja wyboru jest udogodnieniem czysto notacyjnym, a nie strukturą sterowania o szczególnie atrakcyjnych właściwościach operacyjnych. W przypadku tym procesor wykonuje ten sam ciąg rozkazów, a kolejność elementów listy wyboru ma wpływ na sprawność programu.
Przypadkiem w programowaniu jest konieczność podjÄ™cia kilku decyzji. W takich sytuacjach pomocna jest instrukcja „Case”, jak również „if”, ale wówczas cierpi na tym czytelność programu. Instrukcja „ Case” jest instrukcjÄ… warunkowÄ…, w której podstawÄ… podjÄ™cia decyzji nie musi być wyrażenie logiczne (jak w instrukcji „if”), lecz może być dowolne wyrażenie typu porzÄ…dkowego. Odpowiednio wiÄ™cej jest też możliwoÅ›ci wyboru.

Instrukcja ta posiada następującą składnię:
CASE wyrażenie OF
wartość1 : Instrukcja1;
wartość2 : Instrukcja2;
...
END;
lub
CASE wyrażenie OF
wartość1 : Intrsukcja1;
wartość2 : Instrukcja2;
...
ELSE Instrukcja3
End;

Działanie jej jest następujące: zostanie obliczone [wyrażenie] i jeśli jest ono równe [wartość1] zostanie wykonana [Instrukcja1], Jeśli wartość wyrażenia jest równe [wartość2], zostanie wykonana [instrukcja2] itd. Jeśli wynikiem wyrażenia nie jest żaden z podanych poniżej wartości zostanie wykonana instrukcja znajdująca się po opcjonalnym parametrze ELSE.

Instrukcja wyboru:
Element listy wyboru:





Po sÅ‚owie kluczowym „Case” wystÄ™puje wyrażenie typu porzÄ…dkowego np.
- znakowego
- całkowitego
- logicznego
W zależności od tego jaką wartość przyjmuje wyrażenie zostanie wykonana ta instrukcja, która jest poprzedzona wartością równą temu wyrażeniu. Jeśli dla kilku różnych wartości wyrażenia ma zostać wykonana ta sama instrukcja to przed dwukropkiem należy umieścić te wartości oddzielając je przecinkami.
CASE z OF { z- jest typu Char}
`w`, `W`: Writeln (`wysoki`);
`n`, `N`: Writeln (`niski`);
ELSE Writeln (`nijaki`);
END;
Zad:
Problem: Zbadać, czy wczytany znak jest samogłoską, spółgłoską polską lub jedną z liter obcych: q, x, v.
Algorytm: Do badania znaku przy tylu możliwościach wyboru doskonale nadaje się mechanizm oferowany przez instrukcję wyboru. Aby zabezpieczyć się przed nieokreślonym działaniem tej instrukcji, należy wcześniej zbadać, czy czytany znak jest w ogóle literą.
Program: W programie dodatkowo drukujemy dla kontroli wczytanÄ… danÄ….

PROGRAM litery (input, output);
VAR
Znak: char;
BEGIN
writeln(’Program rozpoznawania liter’);
writeln(’Podaj znak’);
read(znak);
writeln(znak);
IF (’a’ <=znak) AND (znak <=’z’) THEN {litera}
CASE znak OF
’a’, ’e’, ’i’, ’o’,
’u’, ’y’ : writeln(’samogÅ‚oska’);
’q’, ’v’, ’x’ : writeln(’spółgÅ‚oska obca’);
’b’, ’c’, ’d’, ’f’,
’g’, ’h’, ’j’, ’k’,
’l’, ’m’, ’n’, ’p’,
’r’, ’s’, ’t’, ’w’,
’z’ : writeln(’spółgÅ‚oska polska’);
END
ELSE writeln(‘to nie byÅ‚a litera’)
END.

Porównanie instrukcji „Case” i „if”:
Instrukcja „Case” jest ograniczona typem danych, jakie można porównywać- dozwolone sÄ… tylko typy porzÄ…dkowe- odmiennie do instrukcji „if”. W wielu jednak przypadkach te dwie instrukcje można stosować zamiennie.
Przykład:

If a=1 then Case a of
Writeln(’PoczÄ…tek’) else 1: writeln(’PoczÄ…tek’);
If a=255 then 2: writeln(’Koniec’);
Writeln(’Koniec’) else else
Writeln(’Element nr’, a); writeln(’Element nr’, a);
a-jest zmiennÄ… typu Byte
...te dwa fragmenty programu dadzÄ… w efekcie ten sam wynik wykonania

if CmdStr= ’HELP’ then CmdStr- zmienna typu String
Pomoc else Pomoc, Koniec, Komenda-
if CmdStr= ’QUIT’ then - procedury zdefiniowane przez
Koniec else programistÄ™
Komenda (CmdStr);


Powyższego fragmentu programu nie można zastÄ…pić fragmentem wykorzystujÄ…cym instrukcjÄ™ „Case”, gdyż zmienna, której wartość jest porównywana, nie jest typu porzÄ…dkowego- CmdStr, a jest typu String, który nie jest typem porzÄ…dkowym.
Dodatkowym ograniczeniem instrukcji „Case” jest fakt, że zmiennÄ… można porównywać jedynie do wartoÅ›ci jednobajtowych ( Byte, Char, ShortInt, Boolean, Word, Integer, LongInt, Set...).



Opracowano na podstawie:
„Programowanie w jÄ™zyku Pascal” Ryszard K. Kott
„Podstawy programowania w jÄ™zyku Pascal” Maciej Borowiecki, Krzysztof ChechÅ‚acz
„Turbo Pascal 4.0 z dodatkiem o wersji 5.0” Jerzy Szczepkowicz
Internet- http://www.binboy.w.pl