«while» operatori orqali murakkab konstruksiyalarni tuzish while operatori shartida murakkab mantiqiy ifodalarni ham qo‘llash mumkin. Bunday ifodalarni qo‘llashda && (mantiqiy ko'paytirish), || (mantiqiy qo‘shish) , hamda ¡(mantiqiy inkor) kabi operatsiyalardan foydalaniladi. 11.22-rasmda while operatori konstruktsiyasida murakkabroq shartlarni qo'yilishiga misol keltirilgan.
->:
10
12 13 i 4
♦include using namespace std;
int main()
{ unsigned short kichik; unsigned long katta; const unsigned short Max Kichik=65535; cout << «Kichik sonni kiriting:»; ein >> kichik; cout « «Katta sonni kiriting:»; ein >> katta; cout << «kichik son:» << kichik << //Har bir iteratsiyada uchta shart tekshiriladi.
while (kichik0 && kichik< Max Kichik ) if(kichik%5000==0) //Har 5000 satrdan keyin nuqta chiqariladi
cout<<».» ; kichik++; katta-=2 ; cout<<»\nKichik son:»< Katta son:»<return 0 ; }
NATIJA:
Kichik sonni kiriting:2
Katta sonni kiriting:100000 kichik son:2 Kichik son:33335 Katta son:33334 rasm. «while»konstruksiyasidagi murakkab shartlar.
Rasmda keltirilgan dastur quyidagi mantiqiy o‘yinni ifodalaydi. Oldin ikkita son - kichik va katta kiritiladi. Undan so‘ng toki ular bir-biriga teng bo'lmaguncha, ya'ni «uchrashmaguncha» kichik son birga oshiriladi, kattasi esa ikkiga kamaytiriladi. O'yinning maqsadi qiymatlar «uchrashadigan» sonni topishdir. 10,12-satrlarda qiymatlar kiritiladi. 15-satrda esa siklni davom ettirishning quyidagi uchta sharti tekshiriladi:
kichik o'zgaruvchisi qiymati katta o'zgaruvchisi qiymatidan oshmasligi;
katta o'zgaruvchisi qiymati manfiy va nolga teng emasligi;
kichik o'zgaruvchisi qiymati Max Kichik qiymatidan oshib ketmasligi.
17-satrda esa kichik soni 5000 ga bo'lingandagi qoldiq hisoblanadi. Agarda kichik 5000 ga qoldiqsiz bo'linsa, bu operatsiyaning bajarilishi natijasi 0 ga teng bo'ladi. Bu holatda hisoblash jarayonlarini vizual ifodasi sifatida ekranga nuqta chiqariladi. Keyin esa kichik qiymati bittaga oshiriladi, katta qiymati
350 |j|
11 - bob. Dasturlash asoslari
esa 2 taga kamaytiriladi. Sikl agarda tekshirish sharti tarkibidagi birorta shart bajarilmasa, to‘xtatiladi va boshqaruv 22-satrga o‘tadi.
«break» va «continue» operatorlari Ko‘pincha siklning navbatdagi iteratsiyasiga sikl tanasidagi boshqa operatorlar (navbatdagi operatorlar) bajarilmasdan turib, o‘tish zaruriyati tug‘iladi. Bunday holatlarda continue operatori qo‘llaniladi. Bundan tashqari, siklni bajarilishi sharti qanoatlantirilganda ham, qator hollarda undan chiqib ketish zaruriyati paydo bo'ladi. Bu holda esa break operatori ishlatiladi. Bunday operatorlami qo‘llanilishiga misol 11,23-rasmda keltirilgan. Bu misol bizga oldingi rasmdan tanish bo‘lgan o'yinning biroz murakkablashtirilgan variantidir. Bu yerda kichik va katta qiymatlardan tashqari qadam va maqsadli kattalikni kiritish talab etiladi. Agarda kichik son qiymati qadam o‘zgaruvchisiga (qadam)karrali bo‘lmasa katta qiymati ikkiga kamaytiriladi. Qachonki, kichik o‘zgaruvchisi qiymati katta o‘zgaruvchisi qiymatidan katta bo‘lsa o‘yin tugatiladi. Agarda, katta o‘zgaruvchisi qiymati maqsadli kattalik (maqsad)ning qiymati bilan ustma-ust tushsa, o‘yin bekor qilinganligi haqida xabar ekranga chiqariladi. . : #include : using namespace std; : int main() I : ( : unsigned short kichik; : unsigned long katta, qadam, maqsad; : const unsigned short Max Kichik = 65535; : cout << «Kichik sonni kiriting:»; : ein » kichik ; "• cout << «Katta sonni kiriting:»; ein » katta ; 12: cout « «Qadam qiymatini kiriting:»; 13: ein >> qadam; ±4: cout << «Maqsadli kattalik qiymatini kiriting:»; 15: ein » maqsad; 16: cout « «\n»; i : while(kichik0 && kichik ' : kichik++ ; 20: if(kichik%qadam==0) 21: { 22: cout « «qadam:» << kichik << endl; 23: continue ; 24 : } 25: if(katta==maqsad) //maqsadli nuqtaga 26: // tengligini tekshirish ' 27 : { 28: cout « «Maqsadga erishildi!»; 29: break; 30: } 3 l : katta -= 2; 32: } 33: cout<< «\nKichik son:» << kichik «» katta son:»« katta « endl ; 34: return 0; 35: }