Takrorlanuvchi jarayonlarni dasturlash.
![Takrorlanuvchi jarayonlarni dasturlash.
Reja:
1. Takrorlanuvchi jarayonlarni dasturlash
2. Parametr bo‘yicha sikl operatori. Ichma ich sikllarni tashkil qilish
3. C++ tilida shartsiz o‘tish operatori va uning ishlash prinsipi](/data/documents/d32a890b-4a8e-4eca-bacd-f2e7969c3bd9/page_1.png)
![Sikl (takrorlanish) - bu ko'rsatmalar to'plamining takroriy bajarilishini
tashkil qilish uchun mo'ljallangan yuqori darajadagi dasturlash tillaridagi
boshqaruv strukturasining bir turi. Shuningdek, siklni bir necha bor
bajarilgan, har qanday usulda tashkil qilingan (masalan, shartli o’tish
yordamida) har qanday ketma-ketlik deb atash mumkin.
Qayta bajarilishi uchun mo'ljallangan ko'rsatmalar ketma-ketligi sikl
tanasi deb ataladi. Sikl tanasining bitta bajarilishi takrorlash deyiladi.
Takrorlashning yana bajarilishini yoki siklning tugashini aniqlaydigan ifoda
chiqish sharti yoki siklni tugatish sharti (yoki davomiylik sharti, uning
haqiqiyligi qanday talqin qilinishiga qarab - siklni to'xtatish yoki davom
ettirish zarurati belgisi sifatida) deb nomlanadi. Joriy takrorlash raqamini
saqlaydigan o'zgaruvchiga sikl takrorlash hisoblagichi yoki oddiygina sikl
hisoblagichi deyiladi. Siklda hisoblagich bo'lishi shart emas, hisoblagich
bitta bo'lishi shart emas - sikldan chiqish sharti sikldagi o'zgargan bir nechta
o'zgaruvchiga bog'liq bo'lishi mumkin yoki uni tashqi sharoitlar bilan
aniqlash mumkin (masalan, ma'lum bir vaqt boshlanishi), ikkinchi holda
hisoblagich umuman kerak bo'lmasligi mumkin.
Har qanday siklning bajarilishi sikl o'zgaruvchilarining dastlabki
initsializatsiyasini, chiqish holatini tekshirishni, sikl tanasini bajarilishini va
har bir takrorlashda sikl o'zgaruvchisini yangilashni o'z ichiga oladi. Bundan
tashqari, aksariyat dasturlash tillarida siklni erta boshqarish uchun vositalar
mavjud, masalan, siklni tugatish bayonotlari, ya'ni chiqish sharti (C++ da
break ) va iteratsiyani o'tkazib yuborish bayonotlari (C da continue )
haqiqatidan qat'i nazar sikldan chiqishga imkon beradi.
Kompyuterlar ma'lumotlarni saqlashdan tashqari ko'proq narsani amalga
oshirishi mumkin. Ular ma'lumotlarni tahlil qiladi, birlashtiradi, buyurtma
qiladi, ajratadi, o'zgartiradi, ekstrapolyatsiya qiladi, sintez qiladi va boshqa
manipulyatsiyalarni amalga oshiradi. Ba'zan ular ma'lumotlarni buzadi va](/data/documents/d32a890b-4a8e-4eca-bacd-f2e7969c3bd9/page_2.png)
![yo'q qiladi, ammo biz ularning xatti-harakatlarini boshqarishga harakat
qilamiz. Ushbu mo''jizalarni bajarish uchun dasturlarda takrorlanadigan
amallarni bajarish va qaror qabul qilish vositalari zarur. Albatta, C++ bunday
vositalarni taqdim etadi. Darhaqiqat, u C da for, while, do while va if
so'zlarini ishlatiladi. Ushbu har xil boshqaruv bayonotlari dasturning to'g'ri
ishlashini ta'minlash uchun ko'pincha taqqoslash iboralari va mantiqiy
ifodalardan foydalanadi. Ushbu mavzuda sikllar qanday tashkil qilinishini
ko'rib chiqamiz.
Parametr bo’yicha takrorlash operatori. for sikli
Vaziyat ko'pincha dasturlardan takroriy vazifalarni bajarishni talab
qiladi, masalan, qator elementlarini birma-bir qo'shish yoki 20 martalik
maqtovni chop etish. For sikli bu kabi vazifalarni bajarishni osonlashtiradi.
Quyidagi dasturdagi siklni ko'rib chiqamiz, va keyin qanday ishlashini
ko'rib chiqamiz.
#include <iostream>
int main()
{
using namespace std;
int i; //hisoblagich yaratish
for (i = 0; i < 5; i++ )
cout << "Bu matn takrorlanadi \n";
cout << "Takrorlanish to’xtaydi.\n";
return 0;
}](/data/documents/d32a890b-4a8e-4eca-bacd-f2e7969c3bd9/page_3.png)
![Ushbu takrorlanish i o'zgaruvchisiga 0 berish bilan boshlanadi:
i = 0;
Bu siklni boshlashning bir qismidir. So'ngra, siklni tekshirish qismida
dastur i 5 dan kamligini tekshiradi:
i <5;
Agar shunday bo'lsa, dastur quyidagi buyruqni bajaradi, u sikl tanasi deb
nomlanadi:
cout << "Bu matn takrorlanadi\ n";
Shundan so'ng, dastur siklning yangilanish qismini faollashtiradi va uni
1 ga oshiradi:
i++
Siklning yangilanish qismida ++ amalidan foydalaniladi, bu o'sish
jarayoni deyiladi. U o'z operandining qiymatini 1 ga oshiradi.
Keyin sikl yangi o'tishni boshlaydi, i ning yangi qiymatini 5 bilan
taqqoslaydi. Yangi qiymat (1) ham 5 dan kam bo'lganligi sababli, sikl yana
bir qatorni bosib chiqaradi va yana i ni oshirish bilan tugaydi. Bu yangi
sikldan o'tishni tayyorlaydi - tekshiruv, bayonotni bajarish va i qiymatini
yangilash. Jarayon, 5 qiymatini olguncha davom etadi. Shundan so'ng,
keyingi tekshiruv yolg’on natijani beradi va dastur sikldan keyingi bayonotga
o'tadi.
for siklining qismlari. for sikli - takrorlanadigan harakatlar orqali o'tish
vositasi. Uning qanday ishlashini batafsil ko'rib chiqamiz. Odatda for
siklining qismlari quyidagi amallarni bajaradi.
1. Dastlabki qiymatni belgilash.
2. Siklni davom ettirish shartini tekshirish.
3. Sikl harakatlarini bajarish.
4. Sinov sharoitida ishlatilgan qiymatlarni baholash.](/data/documents/d32a890b-4a8e-4eca-bacd-f2e7969c3bd9/page_4.png)
![C++ siklining tuzilishida ushbu elementlar shunday joylashtirilganki,
ular bir qarashda olinishi mumkin. Initsializatsiya, tasdiqlash va yangilash -
bu qavs ichiga kiritilgan boshqaruv qismining uch qismi. Har bir qism boshqa
qismlardan vergul bilan ajratilgan ifoda. Boshqaruv qismidan keyingi
bayonot siklning tanasi deb nomlanadi va u sinov sharti rost bo'lgan taqdirda
bajariladi:
for (initsializatsiya; tekshiriluvchi ifoda; ifodani yangilash)
tana
C ++ sintaksisida to'liq for operatori bitta bayonot deb hisoblanadi,
garchi u o'z tanasida bir yoki bir nechta boshqa bayonotlarni qabul qilsa ham.
(Agar siklning tanasida bir nechta bayonotlar mavjud bo'lsa, ular quyida
tasvirlanganidek, blokga joylashtirilishi kerak.)
Sikl faqat bir marta initsializatsiyani amalga oshiradi. Odatda, dasturlar
ushbu ifoda yordamida o'zgaruvchini ba'zi bir boshlang'ich qiymatni o'rnatadi
va keyin bu o'zgaruvchini sikl hisoblagichi sifatida ishlatadi.
Tekshiriluvchi ifoda siklning tanasi bajarilishi kerakligini aniqlaydi.
Odatda bu ifoda taqqoslash ifodasidir, ya'ni ikkita qiymatni taqqoslaydigan
ifoda. Bizning misolimizda i va 5 qiymatlari taqqoslanadi, agar tekshiruv
muvaffaqiyatli bo'lsa (test ifodasi rost bo'lsa), dastur sikl tanasini bajaradi.
Aslida, C++ da tekshiruv ifodalari faqat rost yoki yolg’on natijalarni
taqqoslash bilan chegaralanmaydi. Bu yerda har qanday ifodadan foydalanish
mumkin va C++ uni bool tipiga o'tkazadi. Shunday qilib, 0 ni qaytaradigan
ifoda mantiqiy yolg'onga aylantiriladi va sikl tugaydi. Agar ifoda nolga teng
bo'lsa, u mantiqiy qiymatga to'g'ri keladi va sikl davom etadi. Ifodani
yangilash sikl oxirida, sikl tanasi bajarilgandan so'ng baholanadi. Odatda
sikldagi qadamlar sonini boshqaruvchi o'zgaruvchining qiymatini oshirish](/data/documents/d32a890b-4a8e-4eca-bacd-f2e7969c3bd9/page_5.png)
![Operator1
Ifodani
initsializatsiyalash
Tekshiriluvchi
ifoda
Operator3 Operator2 Ifodani yangilash
true
false For sikliyoki kamaytirish uchun ishlatiladi. Biroq, bu boshqa barcha boshqaruv
ifodalari kabi har qanday amaldagi C++ ifodasi bo'lishi mumkin. Bu for
sikliga birinchi misolda bo'lgani kabi, 0 dan 5 gacha hisoblashdan ko'ra
ko'proq moslashuvchanlikni beradi. 1-rasmda for siklining blok
diagrammasini ko'rsatadi.
Operator1
for (ifodani initsializatsiyalash;
tekshiriluvchi ifoda;
ifodani yangilash;)
operator2
operator3](/data/documents/d32a890b-4a8e-4eca-bacd-f2e7969c3bd9/page_6.png)
![1-rasm. for siklining blok-sxemasi
Sikl qadamini o'zgartirish. Hozirgacha sikl misollarida sikl
hisoblagichi har qadamda bittadan ko'paytirildi yoki kamaytirildi. Buni
yangilash ifodasini o'zgartirish orqali o'zgartirish mumkin. Masalan, quyidagi
dastur sikl hisoblagichini foydalanuvchi kiritgan qadam miqdoriga
ko'paytiradi. Yangilash ifodasi sifatida i++ dan foydalanish o'rniga u i = i +
by ifodasini ishlatadi, bu erda foydalanuvchi tanlagan sikl bosqichi bo’ladi.
#include <iostream>
using namespace std;
int main()
{
cout << "Butun son kiriting: ";
int by;
cin >> by;
cout << "O’sish qadami " << by;
for (int i = 0; i < 100; i = i + by)
cout << i << endl;
return 0;
}
Sikldan chiqish operatori. Break operatori Switch bayonoti va for
sikli haqidagi misollarda allaqachon break operatoriga duch keldingiz.
Uning qanday ishlashi haqida allaqachon tasavvurga ega bo’lgan bo’lishingiz
mumkin. Ushbu operatorni batafsilroq ko’rib chiqamiz.](/data/documents/d32a890b-4a8e-4eca-bacd-f2e7969c3bd9/page_7.png)
![Ko'pincha sikldan foydalanganda va deyarli har doim switch
operatoridan foydalanganda dasturchi mos ravishda sikl tanasi yoki switch
tanasining bajarilishini to'xtatishi kerak. Bunday hollarda break ishlatiladi.
Shuningdek, ushbu operator yordamida cheksiz sikl uzilib qoladi. Uni
to'xtatish kerak bo'lganda, sikl tanasiga shart qo'shiladi, bajarilgandan so'ng,
break operatori ishga tushiriladi va sikl tugaydi.
Quyidagi misolda oddiy o'yin amalga oshiriladi: bitta o'yinchi 1 dan 7
gacha bo'lgan raqamni taxmin qiladi, ikkinchisi uni topishi kerak.
#include <iostream>
using namespace std;
int main()
{
int digit = 0;
int answer = 0;
cout << "Raqibingiz taxmin qilishi uchun 1 dan 7 gacha raqamni
kiriting:";
for (;;)
{
cin >> digit; // yashirin raqamni kiritish
if (digit >= 1 && digit <= 7) // raqamni belgilangan diapazonga
muvofiqligini tekshirish
{
break; // agar u mos keladigan bo'lsa, sikldan chiqish
}
else // aks holda raqamni qayta kiritishni so'rash](/data/documents/d32a890b-4a8e-4eca-bacd-f2e7969c3bd9/page_8.png)
![{
cout << "Noto'g'ri oraliq! 1 dan 7 gacha raqam kiriting:";
}
}
system("cls"); // bu funksiya ekranni tozalaydi va raqib qaysi raqam
kiritilganligini ko'rmaydi
cout << "Raqibingiz o'ylagan raqamni taxmin qilishga harakat qiling!\
n";
cout << "Bu 1 dan 7 gacha bo'lgan butun son. Javobingizni kiriting:";
for (int myTry = 1;; myTry++)
{
cin >> answer;
if (answer < 1 || answer > 7)
{
myTry--; // urinishlar sonini bittaga kamaytiring
cout << "!!!1 dan 7 gacha oraliqdagi son kiriting:";
}
else if (digit == answer) // agar son mos kelsa
{
cout << "Tabrik! Siz " << myTry << "-urinishda sonni
topdingiz!\n\n";
break; // sikldan chiqish
}
else // aks holda yana bir bor urinish
{](/data/documents/d32a890b-4a8e-4eca-bacd-f2e7969c3bd9/page_9.png)
![cout << "Siz topa olmadingiz! Yana bir bor urinib ko
`ring:";
}
}
return 0;
}
Barchasini aniq saqlash uchun va taxmin qiladigan o'yinchi yaroqsiz
diapazondan raqamni kirita olmasligi uchun, raqam kiritilib tekshiriladigan
cheksiz sikldan ishlaymiz. Agar raqam kerakli diapazonga to'g'ri keladigan
bo'lsa, sikl to'xtatiladi (15 - 18 qatorlar), agar bo'lmasa, ekranda ogohlantirish
paydo bo'ladi va raqamni qayta kiritishingizni talab qiladi. Bu kiritilgan
raqam kerakli oraliqda bo'lguncha davom etadi.
To'g'ri raqamni kiritgandan so'ng, 25-qatorda maxsus funksiya tizimini
chaqiramiz ("cls") , bu ikkinchi o'yinchi raqamni taxmin qilishni
boshlashidan oldin ekranning tarkibini tozalaydi (faqat konsolda ishlaydi).
Keyin ikkinchi cheksiz siklni aniqlaymiz (29 - 47 qatorlar), lekin bu
safar myTry hisoblagichi bilan. Bu o'yinchi raqamni taxmin qilishga
urinishlar sonini hisoblab chiqadi. O’yinchi raqamni kiritadi va darhol 33 - 37
qatorlar oralig'ida tekshiriladi.
Agar u mos kelmasa, dastur ogohlantiradi va myTry urinish
hisoblagichidan birini chiqaramiz. Aks holda, agar raqam kerakli diapazonda
bo'lsa, biz uning yashirin raqamga (38 - 42 satrlar) to'g'ri kelishini
tekshiramiz: ha - tabriklaymiz va siklni to'xtatamiz, yo'q - 43 - 46 satrlarga
o'ting - xato haqida xabar beramiz va raqamni qayta kiritishni taklif qilamiz.
Continue operatori. Ushbu operator joriy siklning takrorlanishini
to'xtatish (o'tkazib yuborish) va keyingi takrorlashga o'tish zarur bo'lganda
foydalaniladi. U for siklida bajarilganda, joriy takrorlash to'xtatiladi,](/data/documents/d32a890b-4a8e-4eca-bacd-f2e7969c3bd9/page_10.png)
![boshqaruv o'zgaruvchisini o'zgartirishga o'tish va undan keyin siklning
bajarilishini davom ettirish sharti tekshiriladi.
Quyidagi masalani hal qilaylik: 7 ga bo'linadigan va 1 dan 70 gacha
bo'lgan sonlarni ko'rsatish kerak.
#include <iostream>
using namespace std;
int main()
{
for (int i = 1; i <=70; i++)
{
if (i % 7 != 0) // agar sonni 7 ga bo'lganda qoldiq qolmasa
{
continue; // bu holda ushbu qadam tashlab o'tiladi
}
cout << i << endl;
}
return 0;
}
Agar i raqami qoldiqsiz 7 ga bo'linmasa (bo'linishning qolgan qismi 0
emas), davom etadi. Ya'ni, 12-qator satr endi bajarilmaydi va biz ekranda i
raqamini ko'rmaymiz. Agar i ni 7 ga bo'lishining qoldig’i 0 ga teng bo'lsa
(son 7 ga bo'linadigan bo'lsa), if tanasi bajarilmaydi va raqam ko'rsatiladi.
Ichma-ich sikllar. Oldingi mavzularda C ++ dasturlash tilidagi uchta
takroriy konstruksiyalar bilan tanishishga muvaffaq bo'ldik. Ular for while
hamda do while operatorlaridir. Endi ichma-ich yuz berishi mumkin bo’lgan](/data/documents/d32a890b-4a8e-4eca-bacd-f2e7969c3bd9/page_11.png)
![takrorlanishlarni ko'rib chiqamiz. Bu bitta siklning tanasiga (tashqi) boshqa
sikl (ichki) joylashgandagi holat hisoblanadi. Tashqi siklda bir nechta
shunday ichki joylashtirilgan sikllar bo'lishi mumkin.
Ichki siklga o'tish uchun dastur avval tashqi siklni bajarishni boshlashi
kerak, ichki sikldan oldin kodda yozilganlar bajariladi va keyin ushbu siklni
bajarishni boshlaydi.
Ichki siklning qanday ishlashini namoyish etish uchun bitta qiziqarli
umumiy misol mavjud. Masala quyidagicha qo’yilgan: sikldan foydalanib,
siz @ belgilaridan 5x15 to'rtburchak chizishingiz kerak.
#include <iostream>
using namespace std;
int main()
{
for (int i = 0; i < 5; i++) // ushbu sikl satrlar sonini sanaydi
{
for (int j = 0; j < 15; j++) // ushbu sikl ichki sikl bo'lib, har bir
satrda nechta belgi chiqishini aniqlaydi
{
cout << '@';
}
cout << endl; // yangi qatorga o'tadi
}
return 0;
}](/data/documents/d32a890b-4a8e-4eca-bacd-f2e7969c3bd9/page_12.png)
![Dastlab, for sikli 6-satrda bajarila boshlaydi, chunki uning tanasida
ikkinchi siklga qadar hech narsa yozilmaganligi sababli, dastur darhol shu
joylashtirilgan siklni - 8 - 11-satrlarni bajarishni boshlaydi. Uning bajarilishi
natijasida ekranda 15 ta @ belgini chop etadi va undan chiqadi. So’ngra 12-
satrda coutni ishga tushiriladi, i o'zgaruvchisi birga oshiriladi va asosiy
hamda ichki sikldan bajarishni davom ettiradi. Ekranda yana 15 ta belgi va
pastki qatorga o'tadi. Bu 5 marta amalga oshiriladi, shundan so'ng dastur
chiqadi. Ekranda quyidagi natija hosil bo’ladi.
Ushbu vazifani biroz murakkablashtiramiz. Endi foydalanuvchi
klaviaturadan kiritish usuli yordamida shaklni bosib chiqarish uchun belgini
tanlasin. U shuningdek o'lcham - kenglik va balandlikni tanlaydi. Yana bir
yangilik shundaki, shakl avvalgi misolimizda bo'lgani kabi to'ldirilgan emas,
bo'sh bo'lishi kerak. Ya'ni, u faqat konturdan iborat bo'lishi kerak. Dastur
kodi quyidagicha bo’ladi:
#include <iostream>
using namespace std;
int main()
{
int lines = 0;](/data/documents/d32a890b-4a8e-4eca-bacd-f2e7969c3bd9/page_13.png)
![int symbInLines = 0;
char symbol = 0;
cout << "Belgi kiriting: ";
cin >> symbol;
cout << "Satr miqdori: ";
cin >> lines;
cout << "Satrdagi simvollar miqdori: ";
cin >> symbInLines;
cout << endl;
for (int i = 1; i <= lines; i++)
{
if (i == 1 || i == lines) // birinchi va oxirgi satr
{
for (int j = 1; j <= symbInLines; j++)
{
cout << symbol; //
}
}
else //
{
cout << symbol; // bitta simvolni ko'rsatish
for (int j = 1; j <= symbInLines - 2; j++)
{
cout << ' '; // (symbInLines - 2) marta bo'sh probelni
chiqarish
}](/data/documents/d32a890b-4a8e-4eca-bacd-f2e7969c3bd9/page_14.png)
![cout << symbol; // yana bir simvolni ko'rsatish
}
cout << endl; // yangi satr
}
cout << endl;
return 0;
}
Yana bir misolni qarab chiqamiz. Ko’paytirish jadvalini chop etish.
#include <iostream>
using namespace std;
int main()
{
for (int f = 2; f <= 9; f++)
{
for (int s = 1; s <= 9; s++)
{
cout << f << " * " << s << " = " << f * s;
cout << endl;
}
cout << endl;
}
cout << endl;](/data/documents/d32a890b-4a8e-4eca-bacd-f2e7969c3bd9/page_15.png)
![return 0;
}
C++ tilida shartsiz o‘tish operatori va uning ishlash prinsipi
Nishon - bu davomida ikkita nu q ta (‘:’) qo’ y il g an identifikator .
Nishon bilan qandaydir operat o r belgilanadi va keyinchalik , progr a m maning
boshqa bir qismidan unga shartsiz o’ t ish ama l ga oshiriladi . Nishon
bilan har qand a y operator belgilanishi mumkin , shu jumladan e’ l on
operatori va bo’sh operatori ham . N i shon faqat funksiyalar ichida amal
qiladi .
Nishonga shartsiz o’tish goto operatori yordamida ba j ari l a d i . goto
operatori orqali faqat uning o’zi j oylashgan funksiya i chida g i operator l arga
o’tish mumkin. goto operatorini n g sin t aksisi quyidagicha :
g o to < nishon >;](/data/documents/d32a890b-4a8e-4eca-bacd-f2e7969c3bd9/page_16.png)
![Ayr i m hollarda , goto operator i ning « sakrab o’ t ishi » his o biga xatoliklar
yuzaga keli sh i mum k in . Masalan ,
int i =0;
i++; if( i )go t o m; int j ;
m:j + =i;
operatorlarining bajar i lishi xatolik k a o l ib keladi , chunki j e’lon qilinmay
qoladi .
Shartsiz o’tish opera t ori programmani tuzishdagi kuchli va sh u bilan
birgalikda xavfli vositalardan biri hisoblanadi . Kuchliligi shundaki , u ning
yordam i da a lgor i t mning « boshi ber k » joy l aridan chiqib ketish mumkin .
Ikkinchi tomondan , bloklarni n g ichiga o’tish , masalan , takrorlash
o pera t orlarini ich i ga « sakra b » k ir i sh kuti l magan holatlarni yu za g a kelt i rishi
m u m k in . Shu s abab l i , imkon qadar goto operat o ridan foyda l anmaslik
kerak , ishlatilgan taqdirda ham quyidagi qoidaga amal qilish zarur : « blok
ichiga , if…else va swi t c h operatorlari ichiga , h am d a takrorlash
operat o rlari ta n asiga t ashqaridan kirish m umkin em a s ».
Garchi , nishon yordam i da pr o gramman i ng ixtiyoriy joyiga o’tish
mumkin bo’lsa ham , boshlang’ich qiymat berish e’lonlaridan sakrab
o’tish m a n etiladi , lekin bloklardan sakrab o’tish mum k in .
Masalan :
...
goto B; \\ xato
flo a t x= 0 .0;
goto B; \\ to’ g’ ri
{ int n=1 0 ;x= n *x+ x ; }
B: c o ut << “x = ”<< x ;
...](/data/documents/d32a890b-4a8e-4eca-bacd-f2e7969c3bd9/page_17.png)
![Xususan , ni sh on yorda m ida ichki blokdan tashqi blo k ka va tashqi
blokdan ichki blok k a o’ti sh ga C++ t ili ruxsat beradi :
{
Goto ABC;
…
{
int i=15;
ABC:
…
Goto XYZ;
int y=10;
…
XYZ:
…
goto KLM:
…
}
Int k=0;
…
KLM:
…
}
Lekin , yuqor i da keltiri l gan misoldagi barcha o’tishlar mazmunan xato
hiso b lanadi .
Quyidagi programmada ikkita n a tural sonl a r eng katta u m umiy
b щ luvchini ( EKU B ) t o pish masalasida g i takrorlash jarayonini nishon
va goto operatori vositasida a m alga oshirish ko’rsatilgan :](/data/documents/d32a890b-4a8e-4eca-bacd-f2e7969c3bd9/page_18.png)
![int main()
{
Int a, b;
cout<< “A va B natural sonlarning EKUBini topish. \n”;
cout<< “A va B natural sonlarni kiriting:”
cin>>a>>b;
nishon:
if (a==b)
{
cout<< “Bu sonlar EKUBi”<<a;
return 0;
}
a>b? a-=b: b-=a;
goto nishon;
}
Programmadagi nishon bilan belgi l angan operatorda a va b sonlar n i
ten g ligi tekshiriladi . A g ar u lar teng bo’lsa , ixtiyoriy bi t - tasi , m asalan a s oni
EKUB bo’ladi va funksiyadan chiqiladi . Aks holda , bu son l arning
kattasidan ki ch igi ayriladi va goto orqali ularn i ng tengligi tek sh iriladi .
Takrorlash jarayoni a va b sonl a r o’zaro teng bo’lguncha davom e tadi .
Shuni qayd etish kera k ki , bu masa l ani takrorlash operator l ari yordamida
bajarish ancha samarali hisob l anadi .](/data/documents/d32a890b-4a8e-4eca-bacd-f2e7969c3bd9/page_19.png)
Takrorlanuvchi jarayonlarni dasturlash. Reja: 1. Takrorlanuvchi jarayonlarni dasturlash 2. Parametr bo‘yicha sikl operatori. Ichma ich sikllarni tashkil qilish 3. C++ tilida shartsiz o‘tish operatori va uning ishlash prinsipi
Sikl (takrorlanish) - bu ko'rsatmalar to'plamining takroriy bajarilishini tashkil qilish uchun mo'ljallangan yuqori darajadagi dasturlash tillaridagi boshqaruv strukturasining bir turi. Shuningdek, siklni bir necha bor bajarilgan, har qanday usulda tashkil qilingan (masalan, shartli o’tish yordamida) har qanday ketma-ketlik deb atash mumkin. Qayta bajarilishi uchun mo'ljallangan ko'rsatmalar ketma-ketligi sikl tanasi deb ataladi. Sikl tanasining bitta bajarilishi takrorlash deyiladi. Takrorlashning yana bajarilishini yoki siklning tugashini aniqlaydigan ifoda chiqish sharti yoki siklni tugatish sharti (yoki davomiylik sharti, uning haqiqiyligi qanday talqin qilinishiga qarab - siklni to'xtatish yoki davom ettirish zarurati belgisi sifatida) deb nomlanadi. Joriy takrorlash raqamini saqlaydigan o'zgaruvchiga sikl takrorlash hisoblagichi yoki oddiygina sikl hisoblagichi deyiladi. Siklda hisoblagich bo'lishi shart emas, hisoblagich bitta bo'lishi shart emas - sikldan chiqish sharti sikldagi o'zgargan bir nechta o'zgaruvchiga bog'liq bo'lishi mumkin yoki uni tashqi sharoitlar bilan aniqlash mumkin (masalan, ma'lum bir vaqt boshlanishi), ikkinchi holda hisoblagich umuman kerak bo'lmasligi mumkin. Har qanday siklning bajarilishi sikl o'zgaruvchilarining dastlabki initsializatsiyasini, chiqish holatini tekshirishni, sikl tanasini bajarilishini va har bir takrorlashda sikl o'zgaruvchisini yangilashni o'z ichiga oladi. Bundan tashqari, aksariyat dasturlash tillarida siklni erta boshqarish uchun vositalar mavjud, masalan, siklni tugatish bayonotlari, ya'ni chiqish sharti (C++ da break ) va iteratsiyani o'tkazib yuborish bayonotlari (C da continue ) haqiqatidan qat'i nazar sikldan chiqishga imkon beradi. Kompyuterlar ma'lumotlarni saqlashdan tashqari ko'proq narsani amalga oshirishi mumkin. Ular ma'lumotlarni tahlil qiladi, birlashtiradi, buyurtma qiladi, ajratadi, o'zgartiradi, ekstrapolyatsiya qiladi, sintez qiladi va boshqa manipulyatsiyalarni amalga oshiradi. Ba'zan ular ma'lumotlarni buzadi va
yo'q qiladi, ammo biz ularning xatti-harakatlarini boshqarishga harakat qilamiz. Ushbu mo''jizalarni bajarish uchun dasturlarda takrorlanadigan amallarni bajarish va qaror qabul qilish vositalari zarur. Albatta, C++ bunday vositalarni taqdim etadi. Darhaqiqat, u C da for, while, do while va if so'zlarini ishlatiladi. Ushbu har xil boshqaruv bayonotlari dasturning to'g'ri ishlashini ta'minlash uchun ko'pincha taqqoslash iboralari va mantiqiy ifodalardan foydalanadi. Ushbu mavzuda sikllar qanday tashkil qilinishini ko'rib chiqamiz. Parametr bo’yicha takrorlash operatori. for sikli Vaziyat ko'pincha dasturlardan takroriy vazifalarni bajarishni talab qiladi, masalan, qator elementlarini birma-bir qo'shish yoki 20 martalik maqtovni chop etish. For sikli bu kabi vazifalarni bajarishni osonlashtiradi. Quyidagi dasturdagi siklni ko'rib chiqamiz, va keyin qanday ishlashini ko'rib chiqamiz. #include <iostream> int main() { using namespace std; int i; //hisoblagich yaratish for (i = 0; i < 5; i++ ) cout << "Bu matn takrorlanadi \n"; cout << "Takrorlanish to’xtaydi.\n"; return 0; }
Ushbu takrorlanish i o'zgaruvchisiga 0 berish bilan boshlanadi: i = 0; Bu siklni boshlashning bir qismidir. So'ngra, siklni tekshirish qismida dastur i 5 dan kamligini tekshiradi: i <5; Agar shunday bo'lsa, dastur quyidagi buyruqni bajaradi, u sikl tanasi deb nomlanadi: cout << "Bu matn takrorlanadi\ n"; Shundan so'ng, dastur siklning yangilanish qismini faollashtiradi va uni 1 ga oshiradi: i++ Siklning yangilanish qismida ++ amalidan foydalaniladi, bu o'sish jarayoni deyiladi. U o'z operandining qiymatini 1 ga oshiradi. Keyin sikl yangi o'tishni boshlaydi, i ning yangi qiymatini 5 bilan taqqoslaydi. Yangi qiymat (1) ham 5 dan kam bo'lganligi sababli, sikl yana bir qatorni bosib chiqaradi va yana i ni oshirish bilan tugaydi. Bu yangi sikldan o'tishni tayyorlaydi - tekshiruv, bayonotni bajarish va i qiymatini yangilash. Jarayon, 5 qiymatini olguncha davom etadi. Shundan so'ng, keyingi tekshiruv yolg’on natijani beradi va dastur sikldan keyingi bayonotga o'tadi. for siklining qismlari. for sikli - takrorlanadigan harakatlar orqali o'tish vositasi. Uning qanday ishlashini batafsil ko'rib chiqamiz. Odatda for siklining qismlari quyidagi amallarni bajaradi. 1. Dastlabki qiymatni belgilash. 2. Siklni davom ettirish shartini tekshirish. 3. Sikl harakatlarini bajarish. 4. Sinov sharoitida ishlatilgan qiymatlarni baholash.
C++ siklining tuzilishida ushbu elementlar shunday joylashtirilganki, ular bir qarashda olinishi mumkin. Initsializatsiya, tasdiqlash va yangilash - bu qavs ichiga kiritilgan boshqaruv qismining uch qismi. Har bir qism boshqa qismlardan vergul bilan ajratilgan ifoda. Boshqaruv qismidan keyingi bayonot siklning tanasi deb nomlanadi va u sinov sharti rost bo'lgan taqdirda bajariladi: for (initsializatsiya; tekshiriluvchi ifoda; ifodani yangilash) tana C ++ sintaksisida to'liq for operatori bitta bayonot deb hisoblanadi, garchi u o'z tanasida bir yoki bir nechta boshqa bayonotlarni qabul qilsa ham. (Agar siklning tanasida bir nechta bayonotlar mavjud bo'lsa, ular quyida tasvirlanganidek, blokga joylashtirilishi kerak.) Sikl faqat bir marta initsializatsiyani amalga oshiradi. Odatda, dasturlar ushbu ifoda yordamida o'zgaruvchini ba'zi bir boshlang'ich qiymatni o'rnatadi va keyin bu o'zgaruvchini sikl hisoblagichi sifatida ishlatadi. Tekshiriluvchi ifoda siklning tanasi bajarilishi kerakligini aniqlaydi. Odatda bu ifoda taqqoslash ifodasidir, ya'ni ikkita qiymatni taqqoslaydigan ifoda. Bizning misolimizda i va 5 qiymatlari taqqoslanadi, agar tekshiruv muvaffaqiyatli bo'lsa (test ifodasi rost bo'lsa), dastur sikl tanasini bajaradi. Aslida, C++ da tekshiruv ifodalari faqat rost yoki yolg’on natijalarni taqqoslash bilan chegaralanmaydi. Bu yerda har qanday ifodadan foydalanish mumkin va C++ uni bool tipiga o'tkazadi. Shunday qilib, 0 ni qaytaradigan ifoda mantiqiy yolg'onga aylantiriladi va sikl tugaydi. Agar ifoda nolga teng bo'lsa, u mantiqiy qiymatga to'g'ri keladi va sikl davom etadi. Ifodani yangilash sikl oxirida, sikl tanasi bajarilgandan so'ng baholanadi. Odatda sikldagi qadamlar sonini boshqaruvchi o'zgaruvchining qiymatini oshirish