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

Dodaj swoją odpowiedź