111
Ta‘rif: Agar shartli takrorlanuvchi jarayonlar tarkibidagi shart
takrorlanishdan oldin tekshirilsa, shart oldi takrorlanuvchi jarayonlar deyiladi.
Takrorlanuvchi operator tarkibiga beriladigan shart tahlil qilinib yozilish
kerak, chunki shart hech qachon yolg‘on qiymat qabul qilmasa,
dastur cheksiz
ishlashga to‗g‘ri keladi. Takrorlanish hech qachon cheksiz bo‗lishi mumkin emas,
aks holda algoritmning diskretlik hossasi buziladi.
Shart oldi takrorlanish operatori yani while operatorining umumiy ko‗rinishi
quyidagicha.
while() { operatorlar; }
Agar shart chin qiymat qabul qilib tursa {} ichidagi operatorlar
bajarilaveradi, qachonki shart yolg‘on bo‗lgandagina takrorlanish o‗z ish
faoliyatini to‗xtatadi.
Takrorlash strukturasi bir ifoda yoki blokni ma'lum bir shart to‗g'ri (true)
bo‗lishi davomida qaytarish imkonini beradi. Qaytarilayotgan ifoda shartga ta'sir
ko‗rsatishi kerak. Ma'lum bir vaqt o‗tgandan keyin shart false ga o‗zgartilishi
kerak. Bo‗lmasa while (davomida) tugatilmaydi. while faqat o‗zidan keyin kelgan
ifodaga ta'sir qiladi. Agar biz bir guruh amallarni qaytarmoqchi bo‗lsak, ushbu
blokni {} qavslar ichiga olishimiz kerak. Shart takrorlanuvchi
blokning boshida
tekshirilgani sababli, agar shart noto‗g'ri bo‗lib chiqsa, blokni hech ijro ko‗rmasligi
ham mumkin.
While operatori tarkibidagi shart yolg‘on qiymat qabul qilganda operatorlar
bajarilmasdan qoladi, shart chin qiymat qabul qilgandagina operatorlar bajariladi.
Ba‘zi hollarda shart takrorlanish boshidan yolg‘on qiymat qabul qiladi, bunda
takrorlanish bir marta ham bajarilmaydi. Shart chin qiymat qabul qilib,
lekin
takrorlanish tanasida shart tarkibi o‗zgartirilmasa, takrorlanish cheksiz bo‗lib
qoladi.
Misol: Salom so‗zini ekranga n mart chiqarilsin.
Bu masalani for sikl operatori yordamida ham ifodalash mumkin, lekin
while operatorining mohiyatini o‗rganish uchun oddiy masala yordamida
qaraymiz.
#include
int main()
{ int n,i=1;
cout<<‖n=‖;
cin>>n;
while(i<=n)
112
{ cout<<‖Salom \n‖;
i++; }
return 0;
}
Kirituvchi ma‘lumotlar
n=3
Dastur
natijasi
Salom
Salom
Salom
While operatorini dasturlash tarkibida ishlatish vaqtida doimo takrorlanish
tarkibidagi shart bilan tekshiriladigan bitta o‗zgaruvchi olish kerak. Bu masalada
shart bilan tekshirish uchun
i o‗zgaruvchisi tanlandi. Takrorlanish sonini
n orqali
i
bilan solishtirish natijasida aniqlanadi.
While operatorining ishlash jarayoni yuqoridagi misolda quyidagicha.
Boshlang‘ich holatda i=1 shart i<=n(1<=3) chin
Qadam1: salom so‗zi ekranda chiqariladi i=2;
shart i<=n(2<=3)
Qadam2: salom so‗zi ekranda chiqariladi i=3;
shart i<=n(3<=3)
Qadam2: salom so‗zi ekranda chiqariladi i=4;
shart i<=n(4<=3) yolg‘on takrorlanish to‗xtatiladi.
Misol: n berilganda k!
Bu masalani C++ dasturlash tilida ifodalash uchun k faktorialni takrorlanish
tanasiga joylashtirish kerak, takrorlanish shartini esa k!ko‗rinishida
tasvirlanadi.
#include
int main()
{ int n,k=0,p=1;
cout<<‖n=‖;
cin>>n;
while(p{ k++;
p=p*k;
}
cout<return 0;
113
}
Kirituvchi ma‘lumotlar
n=7
Dastur natijasi
k=3
Bu masalani C++ dasturlash tilidagi ko‗rinishiga e‘tibor bersak oxirida
cout<
ortiq bajariladi, shuning uchun k-1 holat bo‗yicha chiqariladi. Bu jarayonni n= 7
qiymat berib, qo‗lda test qilib ko‗rsangiz tushunish oson bo‗ladi.
While operatori tarkibidagi shart ba‘zi hollarda o‗zgarmas
qiymat
ko‗rinishda ham beriladi, bunda shart 0 bilan solishtiriladi, agar qiymat ortib borsa,
dastur cheksiz takrorlanish mumkin, bunday holatlarda o‗zgarmas qiymatni
kamaytirish kerak.
#include
int main()
{ int k=0,p=1;
while(p)
{ k++;
p=p*k;
cout<}
return 0;
}
Yuqoridagi dastur tarkibidagi shart p faqat 0 bilan solishtiriladi 0 dan farqli
bo‗lsa, takrorlanish bajarilaveradi, demak takrorlanish cheksiz bo‗lib qoladi.
Takrorlanish cheksiz bo‗lmasligi holatini quyidagi misol orqali tekshiramiz.