Ichki qavslar Murakkab ifodalami tuzishda ichki qavslardan foydalaniladi. Masalan, sizga sekundlaming umumiy soni keyin esa barcha qaralayotgan odamlar soni, undan keyin esa ulaming ko‘paytmasini hisoblash kerak bo‘lsin: TotalPersonSeconds=((NumMinutesToThink+NumMinutes ToType)*60*(PeoplelnTheOffice+PeopleOnVocation) ) Bu ifodada oldin NumMinutesToThink o‘zgaruvchisining qiymati NumMinutesToType o‘zgaruvchisi qiymatiga qo'shiladi. Keyin esa hosil qilingan yig‘indi 60 ga ko'paytiriladi. Bundan keyin PeoplelnTheOffice o'zgaruvchi qiymati PeopleOnVocation qiymatiga qo'shiladi, keyin esa sekundlar soni kishilar soniga ko'paytiriladi.
Munosabat operatorlari Bunday operatorlar ikkita qiymatni teng yoki teng emasligini aniqlash uchun ishlatiladi. Taqqoslash ifodasi doimo true (to‘g‘ri) yoki false (noto‘g‘ri) qiymatni qaytaradi. Munosabat operatorlarining qo‘llanilishiga oid misol 11.3. jadvalda keltirilgan.
3361
11 - bob. Dasturlash asoslari
11.3-jadval
Munosabat operatorlari
Nomi
Operator
Misol
Qaytaradigan qiymat
Tenglik
==
100=50 50=50
false true
Teng emas
1=
100!=50 50'=50
true false
Katta
>
I00>50 50>50
true false
Katta yoki teng
>=
100>=50 50>=50
true true
Kichik
<
50<100 50<50
true false
Kichik yoki teng
<=
50<=100 50<=50
true true
«if» operatori Odatda dastur satrma-satr tartib bilan bajariladi. if operatori shartni tekshirish (masalan, ikki o‘zgaruvchi tengmi) va uning natijasiga bog‘liq ravishda dasturni bajarilish tartibini o‘zgartirish imkonini beradi. if operatorining oddiv shakli quyidagi ko'rinishdadir: if (mapT) nfooja; Qavs ichidagi shart ixtiyoriy ifoda bo‘lishi mumkin. Agarda bu ifoda false qiymatini qaytarsa undan keyingi ifoda yoki blok tushirib qoldiriladi. Agarda shart true qiymat qaytarsa navbatdagi ifoda bajariladi. Quyidagi misolni qaraymiz: if (kattaSon>kichikSon) kattaSon=kichikSon; Bu yerda katta Son va kichik Son o‘zgaruvchilari taqqoslanayapti. Agarda katta Son o‘zgaruvchisi qiymati katta bo‘lsa, bu navbatdagi qatorda unga qiymat sifatida kichikSon o‘zgaruvchisining qiymati o‘zlashtiriladi. if operatorida figurali qavs ichiga olingan ifodalar blokini ham ishlatish mumkin: if (shart) {
ifoda
ifoda
ifoda
J Quyida ifodalar blokining qo‘llanilishiga oid misol keltirilgan: if(kattaSon>kichikSon) { kattaSon=kichikSon cout<<»kattaSon : »<>; cout<<»kichikSon: >>< }
337
§ 11.4. C++ daslurlash tilida ifodalar va operatorlar
Bu holda kattaSon o‘zgaruvchisiga nafaqat kichikSon o‘zgaruvchisi o’zlashtirilayapti. balki ekranga bu haqida axborot ham chiqarilayapti: 1: #include 2: using namespace std;
3 : int main () 4: { 5: int BunyodkorGol, PaxtakorGol; 6: cout<<»Bunyodkor jamoasi kiritgan to'plar sonini yozing:»; 7: cin » BunyodkorGol; 8: cout<<»Paxtakor jamoasi kiritgan to'plar sonini yozing:»; 9: cin » PaxtakorGol; 10: cout << «\n»; 11: if (BunyodkorGol > PaxtakorGol) 12: cout « «Yashasin Bunyodkor!\n»; 13: if (BunyodkorGol < PaxtakorGol) 14: { ' 15: cout << «Yashasin Paxtakor! \n»; 16: cout « «Bugun Paxtakor muxlislariga bayram!\n»; 17: } ' 18: if (BunyodkorGol==PaxtakorGol) 19: { ' 20: cout << «Durrangmi? Bo'lishi mumkin emas! \n»; 21: cout <<»Paxtakorning kiritgan to'plari haqida ma'lumotni qaytadan yozing:»; 27: cin » PaxtakorGol; 28: if (BunyodkorGol>PaxtakorGol) 29: { 30: cout<<»Bunyodkor yutishini oldindan bilgan edim! Shuning uchun qayta so'radim\n»; 31: cout<<»Yashasin Bunyodkor!\n»; 32: } 33: if (BunyodkorGoKPaxtakorGol) 34: { 35: cout<<»Paxtakor yutishini oldindan bilgan edim! Shuning uchun qayta so'radimXn»; 36: cout<<»Yashasin Paxtakor!»; 37: cout«»Bugun Paxtakor muxlislariga bayram!\n»; 38: } 39: if (BunyodkorGol==PaxtakorGol) 40: cout<<»Qoyil! Haqiqatan ham durang ekanXn»; 41: } 42: cout«»Ma'lumotingiz uchun rahmatXn»; 43: return 0; 44 : }
NAT1JA:
338
11 - bob. Dasturlash asoslari
Bunyodkor jamoasi kiritgan to'plar sonini yozing:2 Paxtakor jamoasi kiritgan to'plar sonini yozing:2 Durangmi? Bo'lishi mumkin emas!
Paxtakorning kiritgan to 'plari haqida ma'lumotni qaytadan yozing:l Bunyodkor yutishini oldindan bilgan edim! Shuning uchun qayta so'radim Yashasin Bunyodkor! Ma'lumotingiz uchun rahmat - rasm. Munosabat operatorining qo‘llanilishi orqali tarmoqlanish.
«eise»_kalit_so‘zi'>«eise» kalit so‘zi Dasturlarda ko‘p hollarda biror bir shart bajarilca (ya’ni bu shart true qiymatni qaytarsa) bir blok, shart bajarilmasa (ya’ni bu shart false qiymatni qaytarsa) boshqa bir blokning bajarilishi talab qilinadi. 11.11 .-rasmda birinchi tekshirish (BunyodkorGol>PaxtakorGol) trueqiymat qaytarsa ekranda bir xabar, false qiymatida esa boshqa bir xabar chiqariladi. Bunday masalalami yuqorida ko’rsatilgan usul, ya’ni qator shartlarni tekshirish uchun birnechta if operatorlarini qo'llash orqali hal qilish mumkin, lekin dastuming soddaligini ta’minlash uchun else kalit so’zidan foydalaniladi: if (shart) Ifoda; else Ifoda; : #include
§ 11.4. C++ dasturlash tilida ifodalar va operatorlar
339
Katta sonni kiriting:4
Kichik sonni kiriting:6 Ikkinchisi katta son-ku! -rasm. «eise» kalit so'zining ishlatilishi.
«if» operatori orqali murakkab konstruktsiyalarni hosil qilish «if - eise» konstruktsiyasida ifodalar blokida ixtiyoriy operatorlarni ishlatishda hech qanday chegara yo'q. Shu jumladan, ifodalar bloki ichida yana if - else operatorlarini ishlatish muinkin. Bu holda bir nechta if operatoridan iborat ichma-ich konstruktsiya hosil bo‘ladi. Bundax murakkab konstruksiyaga misol 11.13-rasmda keltiriIgan : #include : using namespace std; : int main() : { : // Ikkita son kiritamiz.Ularni BirinchiSon : // va BirinchiSon o ' zgaruvchilariga o 'zlashtiramiz. : // Agarda BirinchiSon qiymati BirinchiSon // qiymatidan katta bo'lsa katta son : //kichigiga qoldiksiz bo'linishini tekshira- II miz. Agarda u qoldiqsiz bo'linsa ular : //teng yoki teng emasligini tekshiramiz. : int BirinchiSon, IkkinchiSon; : cout« «Ikkita son kiriting.\nBirinchisi:»; 14: ein >> BirinchiSon; : cout << «Ikkinchisi:»; 16: ein >> IkkinchiSon; 17: cout << «\n»; 13: if (BirinchiSon>=IkkinchiSon) 19: { : if ((BirinchiSon%IkkinchiSon)==0) 21 : 22: if (BirinchiSon==IkkinchiSon) 23: cout<<»Ular bir-biriga teng!\n»; 24 : eise 25: cout <<»Birinchi son ikkinchisiga karrali!\n»; 26: } ’ 27: eise 28: cout <<»Ikkinchi son katta!\n»; 29: 30: return 0; 31: }
NATIJA:
340
11 - bob. Dasturlash asoslari
Ikkita son kiriting.
Birinchisi : 9 Ikkinchisi:3 Birinchi son ikkinchisiga karrali! 11.13 - rasm. «if» operatori ichki bo'lgan murakkab konstruktsiya. Mantiqiy operatorlar Dasturlashda bir emas, balki bir nechta shartli ifodalarni tekshirish zaruriyati juda ko‘p uchraydi. Masalan, x o‘zgaruvchisi y o‘zgaruvchisidan, y esa o‘z navbatida z o'zgaruvchisidan kattami sharti bunga misol bo‘la oladi. Bizning dasturimiz mos amalni bajarishdan oldin bu ikkala shart to‘g‘ri yoki noto‘g‘riligini tekshirishi lozim. Quyidagi mantiq asosida yuqori darajada tashkil qilingan signalizatsiya tizimini tasavvur qiling. Agarda eshikda signalizatsiya o‘matilgan bo‘lsa BA kun vaqti kech soat olti VA bugun bayram YOKI dam olish kuni BO‘LMASA militsiya chaqirilsin. Barcha shartlami tekshirish uchun S++ tilining uchta mantiqiy operatori ishlatiladi. Ular 11,4-jadvalda keltirilgan. - jadval.
Mantiqiy operatorlar
Operator
Belgi
Misol
VA
&&
1-ifoda && 2-ifoda
YOKI
II
1 -ifoda[|2-ifoda
INKOR
!
! ifoda
Mantiqiy ko‘paytirish operatori Mantiqiy ko‘paytirish operatori ikkita ifodani hisoblaydi, agar ikkala ifoda true qiymat qaytarsa VA operatori ham true qiymat qaytardi. Agarda sizning qomingiz ochligi rost bo'lsa VA sizda pul borligi ham rost bo‘lsa siz o‘zingizga tushlik qilish uchun biror bir narsa xarid qilishingiz mumkin. Yoki yana bir misol, masalan, if(x==5&&y==5) mantiqiy ifodasi agarda x va y o‘zgaruvchilarini ikkalasining ham qiymatlari 5 ga teng bo‘lsagina true qiymat qaytaradi. Bu ifoda agarda o‘zgaruvchilardan birortasi 5 ga teng bo‘lmagan qiymat qabul qilsa false qiymatini qaytaradi. Mantiqiy ko'paytirish operatori faqatgina o‘zining ikkala ifodasi ham rost bo‘lsagina true qiymat qaytaradi. Mantiqiy ko'paytirish operatori && belgisi orqali belgilanadi. 100>