Åñëè îäèí îïåðàòîð IF ìîæåò îáåñïå÷èòü âûáîð èç äâóõ àëüòåðíàòèâ, òî îïåðàòîð âûáîðà CASE ïîçâîëÿåò ñäåëàòü âûáîð èç ïðîèçâîëüíîãî ÷èñëà èìåþùèõñÿ âàðèàíòîâ. Îí ñîñòîèò èç âûðàæåíèÿ, íàçûâàåìîãî ñåëåêòîðîì (selection – âûáîð àëüòåðíàòèâû), è ñïèñêà ïàðàìåòðîâ, êàæäîìó èç êîòîðûõ ïðåäøåñòâóåò ñïèñîê êîíñòàíò âûáîðà:
case <âûðàæåíèå-ñåëåêòîð> of
<ñïèñîê1>: <îïåðàòîð1>;
<ñïèñîê2>: <îïåðàòîð2>;
:
else
<îïåðàòîð>
end;
Îïåðàòîð CASE ðàáîòàåò ñëåäóþùèì îáðàçîì.
Ñíà÷àëà âû÷èñëÿåòñÿ çíà÷åíèå âûðàæåíèÿ-ñåëåêòîðà, çàòåì îáåñïå÷èâàåòñÿ ðåàëèçàöèÿ òîãî îïåðàòîðà, êîíñòàíòà âûáîðà êîòîðîãî ðàâíà òåêóùåìó çíà÷åíèþ ñåëåêòîðà. Åñëè íè îäíà èç êîíñòàíò íå ðàâíà òåêóùåìó çíà÷åíèþ ñåëåêòîðà, âûïîëíÿåòñÿ îïåðàòîð, ñòîÿùèé çà ñëîâîì ELSE. Åñëè ñëîâî ELSE îòñóòñòâóåò, òî àêòèâèçèðóåòñÿ îïåðàòîð, íàõîäÿùèéñÿ çà ñëîâîì END, ò.å. ïåðâûé îïåðàòîð çà ãðàíèöåé CASE.
Ñåëåêòîð äîëæåí îòíîñèòüñÿ ê îäíîìó èç öåëî÷èñëåííûõ òèïîâ (ñî çíà÷åíèÿìè â äèàïàçîíå -32768..32767): áóëåâñêîìó, ëèòåðíîìó èëè ïîëüçîâàòåëüñêîìó.
Ñïèñîê êîíñòàíò âûáîðà ñîñòîèò èç ïðîèçâîëüíîãî êîëè÷åñòâà çíà÷åíèé, èëè äèàïàçîíîâ, îòäåëåííûõ äðóã îò äðóãà çàïÿòûìè. Ãðàíèöû äèàïàçîíà çàïèñûâàþòñÿ äâóìÿ êîíñòàíòàìè ÷åðåç ðàçãðàíè÷èòåëü «..». Òèï êîíñòàíò â ëþáîì ñëó÷àå äîëæåí ñîâïàäàòü ñ òèïîì ñåëåêòîðà.
Ïðè èñïîëüçîâàíèè îïåðàòîðà âûáîðà CASE äîëæíû âûïîëíÿòüñÿ ñëåäóþùèå ïðàâèëà:
1. Çíà÷åíèÿ âûðàæåíèÿ «ïåðåêëþ÷àòåëÿ», çàïèñàííîãî ïîñëå ñëóæåáíîãî ñëîâà CASE, äîëæíû ïðèíàäëåæàòü äèñêðåòíîìó òèïó; äëÿ öåëîãî òèïà îíè äîëæíû ëåæàòü â äèàïàçîíå integer.
2. Âñå êîíñòàíòû, ïðåäøåñòâóþùèå îïåðàòîðàì àëüòåðíàòèâ, äîëæíû èìåòü òèï, ñîâìåñòèìûé ñ òèïîì âûðàæåíèÿ.
3. Âñå êîíñòàíòû â àëüòåðíàòèâàõ äîëæíû áûòü óíèêàëüíû â ïðåäåëàõ îïåðàòîðà âàðèàíòà (ò. å. ïîâòîðåíèå êîíñòàíò â àëüòåðíàòèâàõ íå äîïóñêàåòñÿ); äèàïàçîíû íå äîëæíû ïåðåñåêàòüñÿ è íå äîëæíû ñîäåðæàòü êîíñòàíò, óêàçàííûõ â äàííîé èëè äðóãèõ àëüòåðíàòèâàõ.
ÏÐÈÌÅÐÛ:
Ñåëåêòîð èíòåðâàëüíîãî òèïà:
case I of
1..10 : Writeln ('÷èñëî '.1:4. â äèàïàçîíå 1-10 );
11..20 : Writeln ('÷èñëî '. 1:4. ' â äèàïàçîíå 11 - 20'):
21..30 : Writeln ('÷èñëî '. 1:4. ' â äèàïàçîíå 21 - 30')
else
Writeln ('÷èñëî '. 1:4, ' âíå ïðåäåëîâ êîíòðîëÿ')
end;
Ñåëåêòîð öåëî÷èñëåííîãî òèïà:
case I of
1: Z :- I + Þ:
2: Z := I + 100;
3: Z := I + 1000
end;
Ñåëåêòîð ïåðå÷èñëÿåìîãî ïîëüçîâàòåëüñêîãî òèïà:
var Season: (Winter. Spring, Summer. Autumn);
begin
case Season of
Winter ; Writeln('Winter');
Spring : Writeln('Spring'):
Summer : Writeln('Summer');
Autumn : Writeln('Autumn')
end;
end;
|