Îïåðàòîð ïîâòîðà repeat àíàëîãè÷åí îïåðàòîðó while, íî îòëè÷àåòñÿ îò íåãî, âî-ïåðâûõ, òåì, ÷òî óñëîâèå ïðîâåðÿåòñÿ ïîñëå î÷åðåäíîãî âûïîëíåíèÿ îïåðàòîðîâ òåëà öèêëà (î÷åðåäíîé èòåðàöèè) è òàêèì îáðàçîì ãàðàíòèðóåòñÿ õîòÿ áû îäíîêðàòíîå âûïîëíåíèå öèêëà, à âî-âòîðûõ, òåì, ÷òî êðèòåðèåì ïðåêðàùåíèÿ öèêëà ÿâëÿåòñÿ ðàâåíñòâî âûðàæåíèÿ êîíñòàíòå True. Çà ýòî öèêë repeat ÷àñòî íàçûâàþò öèêëîì ñ ïîñòóñëîâèåì, èëè öèêëîì «Äλ, òàê êàê îí ïðåêðàùàåò âûïîëíÿòüñÿ, êàê òîëüêî çíà÷åíèå âûðàæåíèÿ óñëîâèÿ, çàïèñàííîãî ïîñëå ñëîâà until, ñòàíîâèòñÿ ðàâíûì True (èñòèíà).
Îïåðàòîð ïîâòîðà repeat ñîñòîèò èç çàãîëîâêà repeat, òåëà è óñëîâèÿ îêîí÷àíèÿ until.
Ôîðìàò çàïèñè:
repeat
<îïåðàòîð>;
<îïåðàòîð>;
until <óñëîâèå îêîí÷àíèÿ öèêëà>;
Îïåðàòîðû, çàêëþ÷åííûå ìåæäó ñëîâàìè repeat è until, ÿâëÿþòñÿ òåëîì öèêëà. Âíà÷àëå âûïîëíÿåòñÿ òåëî öèêëà, çàòåì ïðîâåðÿåòñÿ óñëîâèå âûõîäà èç öèêëà. Èìåííî ïîýòîìó öèêë, îðãàíèçîâàííûé ñ ïîìîùüþ îïåðàòîðà repeat, â ëþáîì ñëó÷àå âûïîëíèòñÿ õîòÿ áû îäèí ðàç. Åñëè ðåçóëüòàò áóëåâñêîãî âûðàæåíèÿ ðàâåí False, òî òåëî öèêëà àêòèâèçèðóåòñÿ åùå ðàç; åñëè ðåçóëüòàò ðàâåí True, òî ïðîèñõîäèò âûõîä èç öèêëà.
Ïðè ïðîãðàììèðîâàíèè îïåðàòîðîâ òåëà öèêëà ñëåäóåò îáåñïå÷èòü âëèÿíèå ïî êðàéíåé ìåðå îäíîãî èç îïåðàòîðîâ òåëà öèêëà íà çíà÷åíèå óñëîâèÿ, èíà÷å öèêë áóäåò âûïîëíÿòüñÿ áåñêîíå÷íî.
 ñëåäóþùåì ôðàãìåíòå ïîêàçàíî, êàê îïåðàòîð repeat èñïîëüçóåòñÿ äëÿ îæèäàíèÿ íàæàòèÿ êëàâèø Y è N. Íàæàòèå äðóãèõ êëàâèø áóäåò èãíîðèðîâàòüñÿ:
uses Crt;
var
YN: char;
begin
repeat
YN:= ReadKey
until Upcase(YN) in ['Y'.'N'];
end.
Ïðèìåðîì äåéñòâèÿ îïåðàòîðà repeat ìîæåò ñëóæèòü ïðîãðàììà DemoRepeat, êîòîðàÿ ââîäèò è ñóììèðóåò ëþáîå êîëè÷åñòâî öåëî÷èñëåííûõ çíà÷åíèé. Åñëè ââåäåíî çíà÷åíèå 999, òî íà ýêðàí âûâîäèòñÿ ðåçóëüòàò ñóììèðîâàíèÿ.
program DemoRepeat;
var
X; integer;
Sum; real;
begin
Sum:=0;
repeat {Ïîâòîðÿòü}
Write('Çíà÷åíèå Õ= '): {Íà÷àëî òåëà öèêëà}
Readln(X); {Ñ÷èòàòü î÷åðåäíîå çíà÷åíèå X ñ êëàâèàòóðû}
if X <> 999 then
Sum:= Sum+X;
until X = 999; {Óñëîâèå îêîí÷àíèÿ öèêëà}
Writeln('Ñóììà ââåäåííûõ ÷èñåë= ', Sum);
end.
 äàííîì ïðèìåðå â ðàçäåëå îïèñàíèÿ ïåðåìåííûõ îïèñàíà ïåðåìåííàÿ X öåëî÷èñëåííîãî òèïà integer è Sum âåùåñòâåííîãî òèïà real.  íà÷àëå âûïîëíåíèÿ ïðîãðàììû îáíóëÿåòñÿ çíà÷åíèå ñóììû ÷èñåë. Çàòåì ïðè ïîìîùè çàðåçåðâèðîâàííîãî ñëîâà repeat îáúÿâëÿåòñÿ öèêë, ïîñëå ÷åãî ñëåäóþò îïåðàòîðû òåëà öèêëà, êîòîðûå âûâîäÿò íà ýêðàí çàïðîñ «Çíà÷åíèå X=» è ñ÷èòûâàþò ââåäåííîå ñ êëàâèàòóðû çíà÷åíèå X. Îïåðàòîð if ïðîâåðÿåò åãî íà íåðàâåíñòâî ÷èñëó 999 è, åñëè îíî íå ðàâíî 999, óâåëè÷èâàåò çíà÷åíèå ñóììû Sum íà çíà÷åíèå ÷èñëà X.  êîíöå öèêëà îïåðàòîð until Õ = 999 ïðîâåðÿåò óñëîâèå îêîí÷àíèÿ öèêëà. Åñëè çíà÷åíèå âûðàæåíèÿ X = 999 èñòèííî, òî öèêë çàâåðøèòñÿ, à óïðàâëåíèå â ïðîãðàììå áóäåò ïåðåäàíî íà îïåðàòîð, íàõîäÿùèéñÿ çà ñëîâîì until, ò. å. ïåðâûé îïåðàòîð çà ãðàíèöåé öèêëà repeat. Ýòî âûçîâ ïðîöåäóðû Writeln, êîòîðàÿ âûâåäåò ñîîáùåíèå «Ñóììà ââåäåííûõ ÷èñåë ðàâíà» è íàïå÷àòàåò çíà÷åíèå ïåðåìåííîé Sum.
|