Такрорлаш операторлари
Программа бажарилишини бошқаришнинг бошқа бир кучли механизмларидан бири – такрорлаш операторлари ҳисобланади.
Такрорлаш оператори такрорлаш шарти деб номланувчи мантиқий ифодани рост (true) қийматида программанинг маълум бир қномларидаги операторларни (такрорлаш танасини) кўп марта такрор равишда бажаришни амалга оширади (итарация). Такрорлаш ўзининг кириш ва чиқиш нуқталарига эга, лекин чиқиш нуқтасининг бўлиши шарт эмас. Охирги ҳолда такрорлашга чексиз такрорлаш дейилади. Чексиз такрорлаш учун такрорлашни давом эттириш шарти доимо рост бўлади.
Такрорлаш шартини текшириш такрорлаш танасидаги операторларини бажаришдан олдин текширилиши мумкин (for, while такрорлашлари) ёки такрорлаш танасидаги операторларини ҳар бир бажаргандан кейин текширилиши мумкин (do-while).
Такрорлаш операторлари ихтиёрий равишда ичма-ич жойлашган бўлиши мумкин.
for такрорлаш оператори
for такрорлаш операторининг синтаксиси қўйидаги кўринишга эга:
for (<ифода >1; <ифода>2;<ифода>3) <оператор ёки блок>;
Бу оператор амал қилишни <ифода >1 бажаришдан бошлайди. Кейин такрорлаш қадамлари бошланади. Ҳар бир қадамда <ифода>2 бажарилади, агар натижа рост (true) бўлса, такрорлаш танаси - <оператор> бажарилади ва охирида <ифода>3 бажарилади, акс ҳолда бошқарув такрорлаш операторидан кейинги операторга ўтилади. Такрорлаш танаси – <оператор ёки блок> сифатида битта оператор ёки операторлар блоки келиши мумкин.
Мисол учун 10 дан 20 гача бўлган бутун сонлар йиғиндисини ҳисоблаш масаласини кўрайлик.
#include
int main()
{
int Summa=0;
for (int i=10; i<=20; i++)
Summa +=i;
сout<<”Yig\’indi=” <return 0;
}
Программадаги такрорлаш оператори ўз ишини такрорлаш параметри i (такрорлаш санагичи) ўзгарувчисига бошланғич қиймат – 10 беришдан бошлайди ва ҳар бир такрорлаш қадамидан (итарациядан) кейин унинг қиймати биттага ошади (қавс ичидаги учинчи оператор бажарилиши ҳисобига). Ҳар бир такрорлаш қадамида такрорлаш танасидаги оператор бажарилади, яъни Summa ўзгарувчисига i қиймати қўшилади.
Такрорлаш санагичи i қиймати 21 бўлганда i<=20 такрорлаш шарти ёлғон бўлади ва такрорлаш тугайди ва бошқарув такрорлаш операторидан кейинги cout операторига ўтилади ва экранга йиғинди чоп этилади.
Юқорида келтирилган мисолга қараб такрорлаш операторларининг қавс ичидаги ифодаларига изоҳ бериш мумкин:
<ифода>1 – такрорлаш санагичи вазифасини бажарувчи ўзгарувчисига бошлағич қиймат беришга хизмат қилади;
<ифода>2 – такрорлашни бажариш ёки йўқлигини аниқлаб берувчи мантиқий ифода, агар шарт рост бўлса, такрорлаш давом этади, акс ҳолда йўқ;
<ифода>3 – одатда такрорлаш санагичи қийматини ошириш (камайтириш) учун хизмат қилади ёки бу ерда такрорлаш шартига таъсир қилувчи бошқа амаллар бўлиши мумкин.
Такрорлаш операторила қавс ичидаги ифодалар бўлмасилиги мумкин, лекин синтаксис ‘;’ бўлмаслигига рухсат бермайди. Шу сабабли, энг содда кўринишдаги такрорлаш оператори қуйидагича бўлади:
for ( ; ; ) cout <<”Cheksiz takrorlash…” ;
Агар такрорлаш жараёнида бир нечта ўзгарувчиларнинг қиймати синхрон равишда ўзгариши керак бўлса, <ифода>1 ва <ифода>3 ифодаларида бир нечта операторларни ‘,’ билан ёзиш орқали бунга эришиш мумкин:
for (int i=10, j=2; i<=20; i++, j=i+10)
{
…
};
Такрор операторининг ҳар бир қадамида j ва i қийматлари мос равишда ўзгариб боради.
for операторида такрорлаш танаси бўлмаслиги ҳам мумкин. Масалан, программа бажарилишини маълум бир муддатга «тўхтатиб» туриш зарур бўлса, такрорлашни ҳеч қандай қўшимча ишларни бажармасдан амалга ошириш орқали эришиш мумкин:
#include
int main()
{
int delay;
. . .
for (delay =500; delay>0; delay--)
; // бўш оператор
. . .
return 0;
}
Юқорида келтирилган 10 дан 20 гача бўлган сонлар йиғиндисини бўш танали такрорлаш оператори орқали ҳисоблаш мумкин:
. . .
for (int i=10; i<=20; Summa +=i++);
. . .
Такрорлаш оператори танаси сифатида операторлар блокини ишлатиш факториални ҳисоблаш мисолида кўрсатиш мумкин. Айтиш зарурки, факториални ҳисоблашнинг бу йўлини самарали деб бўлмайди.
#include
int main()
{
int a;
unsigned long fact=1;
cout <<”Butun sonni kiriting:_ ”;
cin >>a;
if ((a>=0)&&(a<33))
{
for (int i=1; i<=a; i++)
{
if (a!=0) fact *=i;
else fact=1;
}
cout <}
return 0;
}
Программа фойдаланувчи томонидан 0 дан 33 гача оралиқдаги сон киритилганда амал қилади.
Do'stlaringiz bilan baham: |