Îïåðàòîðû îïèñûâàþò òå àëãîðèòìè÷åñêèå äåéñòâèÿ, êîòîðûå
äîëæíû âûïîëíÿòüñÿ. Îïåðàòîðàì ìîãóò ïðåäøåñòâîâàòü ìåòêè, êîòî-
ðûå ìîæíî èñïîëüçîâàòü äëÿ ññûëîê â îïåðàòîðàõ ïåðåõîäà goto.
îïåðàòîð ÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ>
³ ÚÄÄÄÄÄ¿ ÚÄÄÄ¿ ^ ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ^
ÀÄ>³ìåòêàÃÄÄ>³ : ÃÄÙ ÃÄÄ>³ïðîñòîé îïåðàòîðÃÄÄ´
ÀÄÄÄÄÄÙ ÀÄÄÄÙ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
ÀÄÄ>³ ñòðóêòóðíûé ÃÄÄÙ
³ îïåðàòîð ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Ìåòêà - ýòî ïîñëåäîâàòåëüíîñòü öèôð â äèàïàçîíå îò 0 äî 9999
èëè èäåíòèôèêàòîð.
Ñóùåñòâóåò äâà îñíîâíûõ âèäà îïåðàòîðîâ: ïðîñòûå îïåðàòîðû è
ñòðóêòóðíûå îïåðàòîðû.
Ïðîñòûì îïåðàòîðîì ÿâëÿåòñÿ òàêîé îïåðàòîð, êîòîðûé íå ñî-
äåðæèò â ñåáå äðóãèõ îïåðàòîðîâ.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
ïðîñòîé îïåðàòîð ÄÄÄÄÂÄÄÄ>³îïåðàòîð ïðèñâàèâàíèÿÃÄÄÄÄÄÄÄ>
³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ^
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
ÃÄÄÄ>³ îïåðàòîð ïðîöåäóðû ÃÄÄÄ´
³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
ÀÄÄÄ>³ îïåðàòîð ïåðåõîäà ÃÄÄÄÙ
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Îïåðàòîð ïðèñâàèâàíèÿ çàìåíÿåò òåêóùåå çíà÷åíèå ïåðåìåííîé
íîâûì çíà÷åíèåì, êîòîðîå îïðåäåëÿåòñÿ âûðàæåíèåì, èëè îïðåäåëÿåò
âûðàæåíèå, çíà÷åíèå êîòîðîãî äîëæíî âîçâðàùàòüñÿ ôóíêöèåé.
ÚÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄ¿ ÚÄÄÄÄÄÄÄÄÄ¿
îïåðàòîð ÄÄÄÄÄÂÄÄ>³ññûëêà íà ÃÄÄÄÄÄÄ>³:=ÃÄÄ>³âûðàæåíèåÃÄÄ>
ïðèñâàèâàíèÿ ³ ³ïåðåìåííóþ ³ ^ ÀÄÄÙ ÀÄÄÄÄÄÄÄÄÄÙ
³ ÀÄÄÄÄÄÄÄÄÄÄÄÙ ³
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
ÀÄÄ>³èäåíòèôèêàòîðÃÄÙ
³ ôóíêöèè ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Âûðàæåíèå äîëæíî áûòü ñîâìåñòèìî ïî ïðèñâàèâàíèþ ñ òèïîì ïå-
ðåìåííîé èëè òèïîì çíà÷åíèÿ, âîçâðàùàåìîãî ôóíêöèåé â êà÷åñòâå
ðåçóëüòàòà (ñì. ðàçäåë "Ñîâìåñòèìîñòü òèïîâ" â Ãëàâå 4).
Ïðèâåäåì íåêîòîðûå ïðèìåðû îïåðàòîðîâ ïðèñâàèâàíèÿ:
X := Y + Z
Done := (I >= 1) and (I < 100);
Huel
:= [blue, Succ(C)];
I
:= Sqr(J) - I * K;
Ïðèñâàèâàíèÿ îáúåêòíîãî òèïà
Ïðàâèëà ñîâìåñòèìîñòè ïî
ïðèñâàèâàíèþ îáúåêòíûõ òèïîâ ïîçâî-
ëÿþò ïðèñâàèâàòü ýêçåìïëÿðó
îáúåêòà ýêçåìïëÿð ëþáîãî èç åãî äî-
÷åðíèõ òèïîâ. Òàêîå
ïðèñâàèâàíèå ïðåäñòàâëÿåò ñîáîé
ïðîåêöèþ
ïîòîìêà íà ïðîñòðàíñòâî åãî
ïðåäêà. Â ïðèìåðå èñõîäíîãî êîäà â
Ãëàâå 4 ñ ó÷åòîì ýêçåìïëÿðà F òèïà
TField è ýêçåìïëÿðà Z òèïà
TZipField ïðèñâàèâàíèå F := Z êîïèðóåò òîëüêî ïîëÿ X, Y,
Len è
Name.
Ïðèñâàèâàíèå ýêçåìïëÿðó
îáúåêòíîãî òèïà íå
èíèöèàëèçèðóåò
ýêçåìïëÿð. Íàïðèìåð, â ïðåäûäóùåì
ïðèìåðå ïðèñâàèâàíèå F := Z îç-
íà÷àåò, ÷òî âûçîâ êîíñòðóêòîðà äëÿ F ìîæíî
îïóñòèòü.
Îïåðàòîð ïðîöåäóðû îïðåäåëÿåò àêòèâèçàöèþ
ïðîöåäóðû, îáîçíà-
÷åííóþ ñ ïîìîùüþ èäåíòèôèêàòîðà ïðîöåäóðû. Åñëè ñîîòâåòñòâóþùåå
îïèñàíèå ïðîöåäóðû ñîäåðæèò ñïèñîê
ôîðìàëüíûõ ïàðàìåòðîâ, òî îïå-
ðàòîð
ïðîöåäóðû äîëæåí ñîäåðæàòü â ñåáå ñîîòâåòñòâóþùèé åìó ñïè-
ñîê ôàêòè÷åñêèõ ïàðàìåòðîâ (ïàðàìåòðû, ñïèñîê êîòîðûõ ïðèâîäèòñÿ
â
îïðåäåëåíèè, ÿâëÿþòñÿ
ôîðìàëüíûìè ïàðàìåòðàìè, à â îïåðàòîðå
âûçîâà ïðîöåäóðû îíè ÿâëÿþòñÿ
ôàêòè÷åñêèìè ïàðàìåòðàìè). Ïðè âû-
çîâå
ïðîèñõîäèò ïåðåäà÷à ôàêòè÷åñêèõ ïàðàìåòðîâ ôîðìàëüíûì ïàðà-
ìåòðàì.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
îïåðàòîð ÄÄÂÄ>³èäåíòèôèêàòîðÃÄÂÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ>
ïðîöåäóðû ³ ³ ïðîöåäóðû
³ ³³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ^
³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ÀÄ>³ñïèñîê
ôàêòè÷åñêèõÃÄÙ
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ïàðàìåòðîâ ³
ÃÄ>³ äåñèãíàòîð ÃÄ´
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
³ ³
ìåòîäà ³ ³
³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
ÃÄ>³ óòî÷íåííûé ÃÄ´
³ ³
äåñèãíàòîð ³ ³
³ ³
ìåòîäà ³ ³
³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
ÀÄ>³
ññûëêà íà ÃÄÙ
³ ïåðåìåííóþ ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Ïðèâåäåì íåêîòîðûå ïðèìåðû
îïåðàòîðîâ ïðîöåäóð:
Transpose(A,N,M);
Fin(Name,Address);
Îïåðàòîð ïåðåõîäà goto âûçûâàåò
ïåðåäà÷ó óïðàâëåíèÿ îïåðàòî-
ðó, êîòîðîìó ïðåäøåñòâóåò ìåòêà,
óêàçàííàÿ â äàííîì îïåðàòîðå ïå-
ðåõîäà. Ñèíòàêñè÷åñêàÿ ñõåìà îïåðàòîðà ïåðåõîäà èìååò ñëåäóþùèé
âèä:
ÚÄÄÄÄ¿ ÚÄÄÄÄÄ¿
îïåðàòîð ïåðåõîäà
ÄÄÄ>³gotoÃÄÄÄ>³ìåòêàÃÄÄÄ>
ÀÄÄÄÄÙ ÀÄÄÄÄÄÙ
Ïðè èñïîëüçîâàíèè îïåðàòîðà
ïåðåõîäà äîëæíû ñîáëþäàòüñÿ ñëå-
äóþùèå ïðàâèëà:
1. Ìåòêà, êîòîðàÿ
óêàçûâàåòñÿ â îïåðàòîðå ïåðåõîäà, äîëæíà
íàõîäèòüñÿ â òîì æå áëîêå èëè
ìîäóëå, ÷òî è ñàì îïåðàòîð
ïåðåõîäà. Äðóãèìè ñëîâàìè, íå äîïóñêàþòñÿ ïåðåõîäû
èç
ïðîöåäóðû èëè ôóíêöèè èëè
âíóòðü íåå.
2. Ïåðåõîä èçâíå âíóòðü ñòðóêòóðíîãî îïåðàòîðà (òî åñòü ïå-
ðåõîä íà áîëåå ãëóáîêèé óðîâåíü âëîæåííîñòè) ìîæåò
âûç-
âàòü íåïðåäñêàçóåìûå
ýôôåêòû, õîòÿ êîìïèëÿòîð íå âûäàåò
ñîîáùåíèÿ îá îøèáêå.
Íàïðèìåð, âû íå äîëæíû ïåðåõîäèòü â
òåëî öèêëà for.
Ïðèìå÷àíèå: Õîðîøàÿ
ïðàêòèêà ïðîãðàììèðîâàíèÿ òðåáóåò
ìèíèìàëüíîãî èñïîëüçîâàíèÿ
ïåðåõîäîâ.
Ñòðóêòóðíûå îïåðàòîðû ñòðîÿòñÿ èç
äðóãèõ îïåðàòîðîâ, ïîðÿäîê
âûïîëíåíèÿ êîòîðûõ äîëæåí áûòü
ïîñëåäîâàòåëüíûì (ñîñòàâíûå îïåðà-
òîðû
è îïåðàòîðû íàä çàïèñÿìè),
îïðåäåëÿåìûì óñëîâíîé ïåðåäà÷åé
óïðàâëåíèÿ (óñëîâíûå îïåðàòîðû) èëè
ïîâòîðÿþùèìñÿ (îïåðàòîðû öèê-
ëà).
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
ñòðóêòóðíûé ÄÄÄÄÂÄÄÄÄ>³ ñîñòàâíîé îïåðàòîð ÃÄÄÄÄÄÄÄ>
îïåðàòîð ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ^
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
ÃÄÄÄÄ>³ óñëîâíûé îïåðàòîð ÃÄÄÄ´
³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³
³
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
ÃÄÄÄÄ>³ îïåðàòîð öèêëà ÃÄÄÄ´
³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
ÀÄÄÄÄ>³
îïåðàòîð íàä çàïèñÿìè ÃÄÄÄÙ
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Ñîñòàâíûå îïåðàòîðû çàäàþò
ïîðÿäîê âûïîëíåíèÿ îïåðàòîðîâ,
ÿâëÿþùèõñÿ èõ ýëåìåíòàìè. Îíè äîëæíû
âûïîëíÿòüñÿ â òîì ïîðÿäêå, â
êîòîðîì îíè çàïèñàíû. Ñîñòàâíûå îïåðàòîðû îáðàáàòûâàþòñÿ, êàê
îäèí îïåðàòîð, ÷òî èìååò ðåøàþùåå çíà÷åíèå òàì,
ãäå ñèíòàêñèñ
Ïàñêàëÿ äîïóñêàåò èñïîëüçîâàíèå òîëüêî
îäíîãî îïåðàòîðà. Îïåðàòî-
ðû çàêëþ÷àþòñÿ â îãðàíè÷èòåëè begin è
end, è îòäåëÿþòñÿ äðóã îò
äðóãà òî÷êîé ñ çàïÿòîé.
ÚÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄ¿ ÚÄÄÄ¿
ñîñòàâíîé
ÄÄÄÄ>³beginÃÄÄÄÄÄÄ>³îïåðàòîðÃÄÄÄÄÂÄÄ>³endÃÄÄ>
îïåðàòîð ÀÄÄÄÄÄÙ ^ ÀÄÄÄÄÄÄÄÄÙ ³
ÀÄÄÄÙ
³
ÚÄÄÄ¿ ³
ÀÄÄÄÄÄ´
; ³<ÄÄÄÄÄÄÙ
ÀÄÄÄÙ
Ïðèâåäåì ïðèìåð ñîñòàâíîãî
îïåðàòîðà:
begin
Z := X;
X := Y;
Y := Z;
end;
Óñëîâíûå îïåðàòîðû ïîçâîëÿþò âûáðàòü äëÿ âûïîëíåíèÿ îäèí èç
ñîñòàâíûõ îïåðàòîðîâ (èëè íå âûáðàòü íè îäíîãî).
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
óñëîâíûé îïåðàòîð ÄÄÂÄÄ>³ îïåðàòîð if ÃÄÄÄÄÄÄÄ>
³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ^
³
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
ÀÄÄ>³
îïåðàòîð case ÃÄÄÄÙ
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Ñèíòàêñèñ îïåðàòîðà if ìîæíî
ïðåäñòàâèòü ñëåäóþùèì îáðàçîì:
ÚÄÄ¿ ÚÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄ¿
îïåðàòîð if Ä>³ifÃÄÄ>³âûðàæåíèåÃÄÄ>³thenÃÄÄ>³îïåðàòîðÃÄÄÂÄÄ¿
ÀÄÄÙ ÀÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÙ ³ ³
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³
³ ÚÄÄÄÄ¿
ÚÄÄÄÄÄÄÄÄ¿ v
ÀÄÄ>³elseÃÄÄ>³îïåðàòîðÃÄÄÄÄÄÄÄÄÄ>
ÀÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÙ
 âûðàæåíèè äîëæåí ïîëó÷àòüñÿ
ðåçóëüòàò, èìåþùèé ñòàíäàðòíûé
áóëåâñêèé òèï. Åñëè ðåçóëüòàòîì âûðàæåíèÿ ÿâëÿåòñÿ èñòèííîå
çíà-
÷åíèå (True), òî âûïîëíÿåòñÿ îïåðàòîð,
ñëåäóþùèé çà êëþ÷åâûì ñëî-
âîì then.
Åñëè ðåçóëüòàòîì âûðàæåíèÿ
ÿâëÿåòñÿ çíà÷åíèå False è ïðè-
ñóòñòâóåò êëþ÷åâîå ñëîâî else, òî âûïîëíÿòñÿ îïåðàòîð, ñëåäóþùèé
çà êëþ÷åâûì ñëîâîì else. Åñëè êëþ÷åâîå
ñëîâî else îòñóòñòâóåò, òî
íèêàêîé îïåðàòîð íå âûïîëíÿåòñÿ.
Ñèíòàêñè÷åñêàÿ íåîäíîçíà÷íîñòü,
âîçíèêàþùàÿ â êîíñòðóêöèè:
if e1 then e2 else e3
ðàçðåøàåòñÿ ïóòåì ñëåäóþùåé
èíòåðïðåòàöèè ýòîé êîíñòðóêöèè:
if e1 then
begin
if e2 then
s1
else
s2
end
Ïðèìå÷àíèå:  ïðåäøåñòâóþùåì îïåðàòîðå else äâîåòî÷èå
íå óêàçûâàåòñÿ.
 îáùåì ñëó÷àå êëþ÷åâîå ñëîâî
else ñâÿçûâàåòñÿ ñ áëèæàéøèì
êëþ÷åâûì ñëîâîì if, êîòîðîå
åùå íå ñâÿçàíî ñ êëþ÷åâûì ñëîâîì
else.
Ïðèâåäåì äâà ïðèìåðà îïåðàòîðà
if:
if X < 1.5 then
Z := X+Y
else
Z := 1.5;
if P1 <> nil then
P1 := P1^.father;
Îïåðàòîð âàðèàíòà (caså) ñîñòîèò èç âûðàæåíèÿ (ïåðåêëþ÷àòå-
ëÿ) è ñïèñêà îïåðàòîðîâ, êàæäîìó èç
êîòîðûõ ïðåäøåñòâóåò îäíà èëè
áîëåå êîíñòàíò (îíè íàçûâàþòñÿ
êîíñòàíòàìè âûáîðà) èëè êëþ÷åâîå
ñëîâî else. Ïåðåêëþ÷àòåëü (ñåëåêòîð) äîëæåí èìåòü ïîðÿäêîâûé òèï
(ðàçìåðîì â áàéò èëè ñëîâî). Òàêèì
îáðàçîì, ñòðîêîâûé òèï è äëèí-
íûé
öåëûé òèï ÿâëÿþòñÿ íåäîïóñòèìûìè
òèïàìè ïåðåêëþ÷àòåëÿ. Âñå
êîíñòàíòû âûáîðà äîëæíû áûòü
óíèêàëüíûìè è èìåòü ïîðÿäêîâûé òèï,
ñîâìåñòèìûé ñ òèïîì ïåðåêëþ÷àòåëÿ.
ÚÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄ¿ ÚÄÄ¿ ÚÄÄÄÄ¿
îïåðàòîð case
Ä>³caseÃÄÄ>³âûðàæåíèåÃÄÄ>³ofÃÄÄÄÄÄ>³caseÃÄÄÂÄÄ¿
ÀÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÙ ÀÄÄÙ ^ ÀÄÄÄÄÙ
³ ³
³ ÚÄÄÄÄ¿ ³ ³
ÀÄÄÄ´ ; ³<ÄÙ ³
ÀÄÄÄÄÙ ³
ÚÄÄÄÄÄÄÄÄÄÄÙ
³ ÚÄÄÄ¿
ÀÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ>³endÃÄÄ>
³ ÚÄÄÄÄÄÄÄÄÄÄ¿ ^ ³ ÚÄÄÄ¿
^ ÀÄÄÄÙ
ÀÄÄ>³âåòâü
elseÃÄÄÙ ÀÄ>³ ; ÃÄÄÙ
ÀÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
ÚÄÄÄÄÄÄÄÄÄ¿ ³ ÚÄÄ¿
ÚÄÄÄÄÄÄÄÄÄ¿ v ÚÄÄÄ¿ ÚÄÄÄÄÄÄÄÄ¿
case
ÄÄ>³êîíñòàíòàÃÄÁÄ>³..ÃÄ>³êîíñòàíòàÃÄÄÂÄ>³ : ÃÄ>³îïåðàòîðÃÄ>
^ ÀÄÄÄÄÄÄÄÄÄÙ ÀÄÄÙ ÀÄÄÄÄÄÄÄÄÄÙ
³ ÀÄÄÄÙ ÀÄÄÄÄÄÄÄÄÙ
³
ÚÄÄÄ¿ ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ,
³<ÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÀÄÄÄÙ
ÚÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄ¿
âåòâü else
ÄÄÄÄ>³elseÃÄÄÄ>³îïåðàòîðÃÄÄÄ>
ÀÄÄÄÄÙ
ÀÄÄÄÄÄÄÄÄÙ
Îïåðàòîð âàðèàíòà case ïðèâîäèò ê
âûïîëíåíèþ îïåðàòîðà, êî-
òîðîìó ïðåäøåñòâóåò êîíñòàíòà
âûáîðà, ðàâíàÿ çíà÷åíèþ ïåðåêëþ÷à-
òåëÿ èëè äèàïàçîíó âûáîðà, â êîòîðîì íàõîäèòñÿ çíà÷åíèå ïåðåêëþ-
÷àòåëÿ. Åñëè òàêîé êîíñòàíòû âûáîðà èëè òàêîãî äèàïàçîíà âûáîðà
íå ñóùåñòâóåò è ïðèñóòñòâóåò âåòâü
else, òî âûïîëíÿòñÿ îïåðàòîð,
ñëåäóþùèé çà êëþ÷åâûì ñëîâîì
else. Åñëè æå âåòâü else îòñóòñòâó-
åò, òî íèêàêîé îïåðàòîð íå âûïîëíÿåòñÿ.
Ïðèâåäåì íåêîòîðûå ïðèìåðû
îïåðàòîðà âàðèàíòà:
case Operator of
plus: X := X+Y;
minus: X := X-Y;
times: X := X*Y;
end;
case I of
0, 2, 4, 6, 8:
Writeln('×åòíàÿ öèôðà');
1, 3, 5, 7, 9:
Writeln('Íå÷åòíàÿ öèôðà');
10..100: Writeln('Ìåæäó 10 è
100');
end;
Îïåðàòîð öèêëà çàäàåò ïîâòîðíîå âûïîëíåíèå îïðåäåëåííûõ îïå-
ðàòîðîâ.
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
îïåðàòîð öèêëà ÄÄÄÂÄÄ>³ îïåðàòîð repeat ÃÄÄÄÄÄÄ>
³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ^
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
ÃÄÄ>³ îïåðàòîð while ÃÄÄ´
³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³
³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³
ÀÄÄ>³ îïåðàòîð for ÃÄÄÙ
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Åñëè ÷èñëî ïîâòîðåíèé çàðàíåå èçâåñòíî, òî ïîäõîäÿùåé êîíñ-
òðóêöèé ÿâëÿåòñÿ îïåðàòîð for.  ïðîòèâíîì ñëó÷àå ñëåäóåò èñïîëü-
çîâàòü îïåðàòîðû while èëè repeat.
Äëÿ óïðàâëåíèÿ ïîâòîðåíèåì îïåðàòîðîâ ìîæíî èñïîëüçîâàòü
ñòàíäàðòíûå ïðîöåäóðû Break è Continue. Break çàâåðøàåò îïåðàòîð
öèêëà, à Continue ïðîäîëæàåò ñî ñëåäóþùåé èòåðàöèè ýòîãî îïåðàòî-
ðà. Ïîäðîáíîñòè âû ìîæåòå íàéòè â Ãëàâå 1 "Ñïðàâî÷íîãî ðóêîâîäñ-
òâà ïðîãðàììèñòà".
 îïåðàòîðå öèêëà ñ ïîñòóñëîâèåì (íà÷èíàþùèìñÿ ñî ñëîâà
repeat) âûðàæåíèå, êîòîðîå óïðàâëÿåò ïîâòîðíûì âûïîëíåíèåì ïîñëå-
äîâàòåëüíîñòè îïåðàòîðîâ ñîäåðæèòñÿ âíóòðè îïåðàòîðà repeat.
ÚÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄ¿
îïåðàòîð Ä>³repeatÃÄÄÄÄ>³îïåðàòîðÃÄÄÂÄ>³untilÃÄÄ>³âûðàæåíèåÃÄÄ>
repeat ÀÄÄÄÄÄÄÙ ^ ÀÄÄÄÄÄÄÄÄÙ ³ ÀÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÙ
³ ÚÄÄÄ¿ ³
ÀÄÄÄÄ´ ; ³<ÄÄÄÄÙ
ÀÄÄÄÙ
Ðåçóëüòàò âûðàæåíèÿ äîëæåí áûòü áóëåâñêîãî òèïà. Îïåðàòîðû,
çàêëþ÷åííûå ìåæäó êëþ÷åâûìè ñëîâàìè repeat è until, âûïîëíÿþòñÿ
ïîñëåäîâàòåëüíî äî òåõ ïîð, ïîêà ðåçóëüòàò âûðàæåíèÿ íå ïðèìåò
çíà÷åíèå True. Ïîñëåäîâàòåëüíîñòü îïåðàòîðîâ âûïîëíèòñÿ ïî êðàé-
íåé ìåðå îäèí ðàç, ïîñêîëüêó âû÷èñëåíèå âûðàæåíèÿ ïðîèçâîäèòñÿ
ïîñëå êàæäîãî âûïîëíåíèÿ ïîñëåäîâàòåëüíîñòè îïåðàòîðîâ.
Ïðèâåäåì ïðèìåðû îïåðàòîðà öèêëà ñ ïîñòóñëîâèåì:
repeat
K := I mod J;
I := J;
J := K;
until J = 0;
repeat
Write('Ââåäèòå çíà÷åíèå (0..9):');
Readln(I);
until (I >= 0) and (I <= 9);
Îïåðàòîð öèêëà ñ ïðåäóñëîâèåì (íà÷èíàþùèéñÿ ñ êëþ÷åâîãî ñëî-
âà while) ñîäåðæèò â ñåáå âûðàæåíèå, êîòîðîå óïðàâëÿåò ïîâòîðíûì
âûïîëíåíèåì îïåðàòîðà (êîòîðûé ìîæåò áûòü ñîñòàâíûì îïåðàòîðîì).
ÚÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄ¿ ÚÄÄ¿ ÚÄÄÄÄÄÄÄÄ¿
îïåðàòîð ÄÄÄ>³whileÃÄÄ>³âûðàæåíèåÃÄÄ>³doÃÄÄ>³îïåðàòîðÃÄÄ>
while ÀÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÙ ÀÄÄÙ ÀÄÄÄÄÄÄÄÄÙ
Âûðàæåíèå, ñ ïîìîùüþ êîòîðîãî îñóùåñòâëÿåòñÿ óïðàâëåíèå ïîâ-
òîðåíèåì îïåðàòîðà, äîëæíî èìåòü áóëåâñêèé òèï. Âû÷èñëåíèå åãî
ïðîèçâîäèòñÿ äî òîãî, êàê âíóòðåííèé îïåðàòîð áóäåò âûïîëíåí.
Âíóòðåííèé îïåðàòîð âûïîëíÿòñÿ ïîâòîðíî äî òåõ ïîð, ïîêà âûðàæå-
íèå ïðèíèìàåò çíà÷åíèå Òruå. Åñëè âûðàæåíèå ñ ñàìîãî íà÷àëà ïðè-
íèìàåò çíà÷åíèå False, òî îïåðàòîð, ñîäåðæàùèéñÿ âíóòðè îïåðàòîðà
öèêëà ñ ïðåäóñëîâèåì, íå âûïîëíÿåòñÿ.
Ïðèìåðàìè îïåðàòîðîâ öèêëà ñ ïðåäóñëîâèåì ìîãóò ñëóæèòü ñëå-
äóþùèå îïåðàòîðû:
while Data[I] <> X do I := I + 1;
While I > 0 do
begin
if Odd(I) then Z := Z * X;
I := I div 2;
X := Sqr(X);
end;
while not Eof(InFile) do
begin
Readln(InFile,Line);
Process(Line);
end;
Îïåðàòîðû öèêëà ñ ïàðàìåòðîì (êîòîðûå íà÷èíàþòñÿ ñî ñëîâà
for) âûçûâàåò ïîâòîðÿþùååñÿ âûïîëíåíèå îïåðàòîðà (êîòîðûé ìîæåò
áûòü ñîñòàâíûì îïåðàòîðîì) ïîêà óïðàâëÿþùåé ïåðåìåííîé ïðèñâàèâà-
åòñÿ âîçðàñòàþùàÿ ïîñëåäîâàòåëüíîñòü çíà÷åíèé.
ÚÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄ¿ ÚÄÄÄÄÄÄÄÄ¿
îïåðàòîð ÄÄÄ>³forÃÄÄ>³óïðàâëÿþùàÿÃÄÄ>³:=ÃÄÄ>³èñõîäíîåÃÄÄÄ¿
for ÀÄÄÄÙ ³ïåðåìåííàÿ ³ ÀÄÄÙ ³çíà÷åíèå³ ³
ÀÄÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÙ ³
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
³ ÚÄÄ¿
³ ÚÄ>³toÃÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄ¿ ÚÄÄ¿ ÚÄÄÄÄÄÄÄÄ¿
ÀÄÄÄ´ ÀÄÄÙ ÃÄÄ>³êîíå÷íîåÃÄÄ>³doÃÄÄ>³îïåðàòîðÃÄÄÄ>
³ ÚÄÄÄÄÄÄ¿ ³ ³çíà÷åíèå³ ÀÄÄÙ ÀÄÄÄÄÄÄÄÄÙ
ÀÄ>³downtoÃÄÙ ÀÄÄÄÄÄÄÄÄÙ
ÀÄÄÄÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
óïðàâëÿþùàÿ ïåðåìåííàÿ ÄÄÄ>³èäåíòèôèêàòîð ïåðåìåííîéÃÄÄÄ>
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄ¿
èñõîäíîå çíà÷åíèå ÄÄÄÄ>³âûðàæåíèåÃÄÄÄ>
ÀÄÄÄÄÄÄÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄ¿
êîíå÷íîå çíà÷åíèå ÄÄÄÄ>³âûðàæåíèåÃÄÄÄ>
ÀÄÄÄÄÄÄÄÄÄÙ
 êà÷åñòâå óïðàâëÿþùåé ïåðåìåííîé äîëæåí èñïîëüçîâàòüñÿ
èäåíòèôèêàòîð ïåðåìåíîé (áåç êàêîãî-ëèáî êâàëèôèêàòîðà), êîòîðûé
îáîçíà÷àåò ïåðåìåííóþ, îáúÿâëåííóþ ëîêàëüíîé â áëîêå, â êîòîðîì
ñîäåðæèòñÿ îïåðàòîð for. Óïðàâëÿþùàÿ ïåðåìåííàÿ äîëæíà èìåòü ïå-
ðå÷èñëèìûé òèï. Íà÷àëüíîå è êîíå÷íîå çíà÷åíèÿ äîëæíû èìåòü òèï,
ñîâìåñòèìûé ïî ïðèñâàèâàíèþ ñ ïåðå÷èñëèìûì òèïîì.
Ïðèìå÷àíèå: Î ëîêàëüíîñòè è îáëàñòè äåéñòâèÿ ðàññêàçû-
âàåòñÿ â Ãëàâå 8.
Êîãäà íà÷èíàåò âûïîëíÿòüñÿ îïåðàòîð for, íà÷àëüíîå è êîíå÷-
íîå çíà÷åíèÿ îïðåäåëÿþòñÿ îäèí ðàç, è ýòè çíà÷åíèÿ ñîõðàíÿþòñÿ íà
ïðîòÿæåíèè âñåãî âûïîëíåíèÿ îïåðàòîðà for.
Îïåðàòîð, êîòîðûé ñîäåðæèòñÿ â òåëå îïåðàòîðà for, âûïîëíÿ-
åòñÿ îäèí ðàç äëÿ êàæäîãî çíà÷åíèÿ â äèàïàçîíå ìåæäó íà÷àëüíûì è
êîíå÷íûì çíà÷åíèåì. Óïðàâëÿþùàÿ ïåðåìåííàÿ âñåãäà èíèöèàëèçèðóåò-
ñÿ íà÷àëüíûì çíà÷åíèåì. Êîãäà ðàáîòàåò îïåðàòîð for, çíà÷åíèå óï-
ðàâëÿþùåé ïåðåìåííîé (ñ÷åò÷èêà öèêëîâ) óâåëè÷èâàåòñÿ ïðè êàæäîì
ïîâòîðåíèè íà åäèíèöó. Åñëè íà÷àëüíîå çíà÷åíèå ïðåâûøàåò êîíå÷íîå
çíà÷åíèå, òî ñîäåðæàùèéñÿ â òåëå îïåðàòîðà for îïåðàòîð íå âûïîë-
íÿòñÿ. Êîãäà â îïåðàòîðå öèêëà èñïîëüçóåòñÿ êëþ÷åâîå ñëîâî
downto, çíà÷åíèå óïðàâëÿþùåé ïåðåìåííîé óìåíüøàåòñÿ ïðè êàæäîì
ïîâòîðåíèè íà åäèíèöó. Åñëè íà÷àëüíîå çíà÷åíèå â òàêîì îïåðàòîðå
ìåíüøå, ÷åì êîíå÷íîå çíà÷åíèå, òî ñîäåðæàùèéñÿ â òåëå îïåðàòîðà
öèêëà îïåðàòîð íå âûïîëíÿòñÿ.
Åñëè îïåðàòîð, ñîäåðæàùèéñÿ â òåëå îïåðàòîðà for, èçìåíÿåò
çíà÷åíèå óïðàâëÿþùåé ïåðåìåííîé, òî ýòî ÿâëÿåòñÿ îøèáêîé. Ïîñëå
âûïîëíåíèÿ îïåðàòîðà for çíà÷åíèå óïðàâëÿþùåé ïåðåìåííîé ñòàíî-
âèòñÿ íåîïðåäåëåííûì, åñëè òîëüêî âûïîëíåíèå îïåðàòîðà for íå áû-
ëî ïðåðâàíî ñ ïîìîùüþ îïåðàòîðà ïåðåõîäà.
Åñëè ïðèíÿòü âî âíèìàíèå ýòè îãðàíè÷åíèÿ, òî îïåðàòîð
for V := Expr1 to Expr2 do Body;
ýêâèâàëåíòåí îïåðàòîðó:
begin
Temp1 := Expr1;
Temp2 := Expr2;
if Temp1 <= Temp2 then
begin
V := Temp1;
Body;
while V <> Temp2 do
begin
V := Succ(V);
Body;
end;
end;
end;
è îïåðàòîð öèêëà:
for V := Expr1 downto Exp2 do Body;
ýêâèâàëåíòåí îïåðàòîðàì:
begin
Temp1 := Expr1;
Temp2 := Expr2;
if Temp1 >= Temp2 then
begin
V := Temp1;
Body;
while V <> Temp2 o
begin
V := Pred(V);
Body;
end;
end;
end;
ãäå Temp1 è Temp2 - âñïîìîãàòåëüíûå ïåðåìåííûå, òèï êîòîðûõ ñîâ-
ïàäàåò ñ îñíîâíûì òèïîì ïåðåìåííîé V è êîòîðûå íå âñòðå÷àþòñÿ â
äðóãîì ìåñòå ïðîãðàììû.
Ïðèâåäåì ïðèìåðû îïåðàòîðà öèêëà ñ ïàðàìåòðîì:
for I := 2 to 63 do
if Data[I] > Max then Max := Data[I]
for I := 1 to 10 do
for J := 1 to 10 do
begin
X := 0;
for K := 1 to 10 do
X := X + Mat1[I,K]*Mat2[K,J];
Mat[I,J] := X;
end;
for C := red to blue do Check(C);
 îïåðàöèÿõ íàä çàïèñÿìè îïåðàòîð with óäîáíî èñïîëüçîâàòü
äëÿ êðàòêîãî îáðàùåíèÿ ê ïîëÿì çàïèñè. Â îïåðàòîðå with ê ïîëÿì
îäíîé èëè áîëåå êîíêðåòíûõ ïåðåìåííûõ òèïà çàïèñü ìîæíî îáðàùàòü-
ñÿ, èñïîëüçóÿ òîëüêî èäåíòèôèêàòîðû ïîëåé. Îïåðaòîð with èìååò
ñëåäóþùèé ñèíòàêñèñ:
ÚÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄ¿ ÚÄÄÄÄÄÄÄÄ¿
îïåðàòîð ÄÄ>³withÃÄÄÄÄÄ>³ ññûëêà íà ÃÄÄÂÄ>³doÃÄÄ>³îïåðàòîðÃ>
with ÀÄÄÄÄÙ ^ ³ïåðåìåííóþ òèïà³ ³ ÀÄÄÙ ÀÄÄÄÄÄÄÄÄÙ
³ ³ çàïèñü ³ ³
³ ³ èëè îáúåêò ³ ³
³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³
³ ÚÄÄÄ¿ ³
ÀÄÄÄÄÄÄÄÄ´ , ³<ÄÄÄÄÄÄÄÄÙ
ÀÄÄÄÙ
ññûëêà íà ïåðåìåííóþ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
òèïà çàïèñü èëè îáúåêò ÄÄÄ>³ññûëêà íà ïåðåìåííóþÃÄÄ>
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Âîçüìåì ñëåäóþùåå îïèñàíèå:
type
TDate = record
Day : Integer:
Month : Integer;
Year : Integer:
end;
var OrderDate: TDate;
Ñ ó÷åòîì äàííîãî îïèñàíèÿ ïðèâåäåì ïðèìåð îïåðàòîðà with:
with OrderDate do
if Month = 12 then
begin
Month := 1;
Year := Year + 1
end else
Month := Month + 1;
Ýòî ýêâèâàëåíòíî ñëåäóþùåìó:
if OrderDate.Month = 12 then
begin
OrderDate.Month := 1;
OrderDate.Year := TDate.Year + 1
end
else
Date.month := TDate.Month + 1;
B.Pascal 7 & Objects/LR - 132 -
 îïåðàòîðå with ñíà÷àëà
ïðîèçâîäèòñÿ ïðîâåðêà êàæäîé ññûëêè
íà ïåðåìåííóþ, à èìåííî:
ìîæíî ëè åå èíòåðïðåòèðîâàòü, êàê ïîëå
çàïèñè. Åñëè ýòî òàê, òî îíà âñåãäà
èíòåðïðåòèðóåòñÿ èìåííî òàêèì
îáðàçîì, äàæå åñëè èìååòñÿ äîñòóï ê
ïåðåìåííîé ñ òåì æå èìåíåì.
Äîïóñòèì îïèñàíû ñëåäóþùèå
ïåðåìåííûå:
type
TPoint = record
x,y: Integer;
end;
var
x: Point;
y: Integer;
 ýòîì ñëó÷àå è ê x, è ê y ìîæíî îáðàùàòüñÿ, êàê ê ïåðåìåí-
íîé èëè êàê ê ïîëþ çàïèñè. Â
îïåðàòîðå:
with x do
begin
x := 10;
y := 25;
end;
x ìåæäó êëþ÷åâûìè ñëîâàìè with è dî îòíîñèòñÿ ê ïåðåìåííîé
òèïà
óêàçàòåëü, à â ñîñòàâíîì îïåðàòîðå x è y ññûëàþòñÿ íà x.x è y.y.
Îïåðàòîð:
with V1,V2,...Vn do s;
ýêâèâàëåíòåí îïåðàòîðàì:
with V1 do
with V2 do
...
with Vn do
S;
 îáîèõ ñëó÷àÿõ, åñëè Vn ÿâëÿåòñÿ ïîëåì è v1, è v2, òî îíà
èíòåðïðåòèðóåòñÿ êàê v2.Vn, à íå êàê
v1.Vn.
Åñëè âûáîðêà ïåðåìåííîé òèïà
çàïèñü ñâÿçàíà ñ èíäåêñèðîâàíè-
åì ìàññèâà èëè ðàçûìåíîâàíèåì
óêàçàòåëÿ, òî ýòè äåéñòâèÿ ïðîèçâî-
äÿòñÿ äî òîãî, êàê áóäåò âûïîëíÿòüñÿ
ñîñòàâíîé îïåðàòîð.