Öèêë ïðåäíàçíà÷åí äëÿ îðãàíèçàöèè ìíîãîêðàòíîãî èñïîëíåíèÿ íàáîðà èíñòðóêöèé (îïåðàòîðîâ, íàèìåíüøàÿ àâòîíîìíàÿ ÷àñòü ÿçûêà ïðîãðàììèðîâàíèÿ).
Åñëè çàðàíåå íåèçâåñòíî ÷èñëî ïîâòîðåíèé öèêëà, òî ìîæíî èñïîëüçîâàòü öèêë ñ ïîñòóñëîâèåì.
 áîëüøèíñòâå ïðîöåäóðíûõ ÿçûêîâ ïðîãðàììèðîâàíèÿ öèêë ñ ïîñòóñëîâèåì ðåàëèçóåòñÿ îïåðàòîðîì while, îòñþäà åãî âòîðîå íàçâàíèå– while-öèêë
Âûïîëíÿåòñÿ ñëåäóþùèì îáðàçîì
Ñíà÷àëà âûïîëíÿåòñÿ òåëî öèêëà, çàòåì ïðîâåðÿåòñÿ óñëîâèå. Åñëè îíî ëîæíî, òî âûïîëíÿåòñÿ òåëî öèêëà. Åñëè óñëîâèå èñòèííî, òî öèêë ñ÷èòàåòñÿ âûïîëíåííûì.
 ýòîì öèêëå ëîãè÷åñêîå âûðàæåíèå - ýòî óñëîâèå âûõîäà èç öèêëà
Ïðè îïèñàíèè öèêëîâ ñ ïîñòóñëîâèåì íåîáõîäèìî ïðèíèìàòü âî âíèìàíèå ñëåäóþùåå:
- ïåðåä ïåðâûì âûïîëíåíèåì öèêëà óñëîâèå åãî îêîí÷àíèÿ (èëè ïðîäîëæåíèÿ) äîëæíî áûòü îïðåäåëåíî;
- òåëî öèêëà äîëæíî ñîäåðæàòü õîòÿ áû îäèí îïåðàòîð, âëèÿþùèé íà óñëîâèå îêîí÷àíèÿ (ïðîäîëæåíèÿ), èíà÷å öèêë áóäåò áåñêîíå÷íûì;
- óñëîâèå îêîí÷àíèÿ öèêëà äîëæíî áûòü â ðåçóëüòàòå âûïîëíåíî.
Òåëî öèêëà ñ ïîñòóñëîâèåì âûïîëíÿåòñÿ ïîêà óñëîâèå ëîæíî
ÏÐÈÌÅÐ 1.
ÏÐÈÌÅÐ 2. Ïàðû íåîòðèöàòåëüíûõ âåùåñòâåííûõ ÷èñåë ââîäÿòñÿ ñ êëàâèàòóðû. Ïîñ÷èòàòü ïðîèçâåäåíèå äëÿ êàæäîé ïàðû è ñóììó âñåõ ÷èñåë.
Ðåøåíèå:
program cycle_repeat;
var x,y,sum:real;
otv:char;
begin
sum:=0;
repeat
write('Ââåäèòå ÷èñëà x,y > 0 ');
readln(x,y);
writeln('Èõ ïðîèçâåäåíèå = ',x*y:8:3);
sum:=sum+x+y;
write('Çàâåðøèòü ïðîãðàììó (Ä/Í)? ');
readln(otv);
until (otv='Ä') or (otv='ä');
writeln('Îáùàÿ ñóììà = ',sum:8:3);
readln
end.
ÏÐÈÌÅÐ 3. Ïîäñ÷èòàòü êîëè÷åñòâî íå÷åòíûõ öèôð â çàïèñè íàòóðàëüíîãî ÷èñëà n.
Èäåÿ ðåøåíèÿ. Èç çàäàííîãî ÷èñëà âûáèðàòü èç ìëàäøåãî ðàçðÿäà öèôðó çà öèôðîé äî òåõ ïîð, ïîêà îíî íå èñ÷åðïàåòñÿ, ò.å. ñòàíåò ðàâíûì íóëþ. Êàæäóþ íå÷¸òíóþ öèôðó ó÷èòûâàòü.
Ðåøåíèå:
1. Ââåñòè ÷èñëî n
2. K := 0 {ïîäãîòàâëèâàåì ñ÷¸ò÷èê}
3. Åñëè n mod 10 mod 2 = 1, òî K := K +1
4. n := n div 10
5. Åñëè n = 0, ïåðåõîä ê øàãó 7
6. Ïåðåõîä ê øàãó 3
7. Âûâîä K
8. Êîíåö
ÏÐÈÌÅÐ 4. Ñîñòàâèòü ïðîãðàììó ïëàíèðîâàíèÿ çàêóïêè òîâàðà â ìàãàçèíå íà ñóììó, íå ïðåâûøàþùóþ çàäàííóþ âåëè÷èíó.
Ðåøåíèå
Îáîçíà÷èì ÷åðåç x, k – ñîîòâåòñòâóþùóþ öåíó è êîëè÷åñòâî òîâàðà, ÷åðåç p – çàäàííóþ ïðåäåëüíóþ ñóììó, ÷åðåç s – îáùóþ ñòîèìîñòü ïîêóïêè. Íà÷àëüíîå çíà÷åíèå îáùåé ñòîèìîñòè ïîêóïêè (S) ðàâíî íóëþ. Çíà÷åíèå ïðåäåëüíîé ñóììû ñ÷èòûâàåòñÿ ñ êëàâèàòóðû. Íåîáõîäèìî ïîâòîðÿòü çàïðîñ öåíû è êîëè÷åñòâà âûáðàííîãî òîâàðà, âû÷èñëÿòü åãî ñòîèìîñòü, ñóììèðîâàòü åå ñ îáùåé ñòîèìîñòüþ è âûâîäèòü ðåçóëüòàò íà ýêðàí äî òåõ ïîð, ïîêà îíà íå ïðåâûñèò ïðåäåëüíóþ ñóììó ð.  ýòîì ñëó÷àå íà ýêðàí íóæíî âûâåñòè ñîîáùåíèå î ïðåâûøåíèè.
Program E_10;
Var x, k, p, s : Integer;
Begin
WriteLn('Ââåäèòå öåíó òîâàðà è åãî êîëè÷åñòâî');
ReadLn(x,k);
s:=s+x*k;
WriteLn('Ñòîèìîñòü ïîêóïêè ðàâíà ',s);
Until s>p;
WriteLn('Ñóììàðíàÿ ñòîèìîñòü ïîêóïêè ïðåâûñèëà ïðåäåëüíóþ ñóììó');
End.
|