13-Mavzu .Mantiqiy dasturlash texnologiyasi
Reja:
1. Mantiqiy amallari va munosabatlar.
2. Tarmoqlanuvchi dastur tuzilmasi.
3. Takrorlash (tsikl) operatorlari. Ularning turli formalari (parametrli va shartni oldin va keyin tekshiruvchi operatorlar).
Tayanch so’z va iboralar:Tayanch so’z va iboralar: O’tish operator, shartli operatori, shartli operatori, tanlash operatori C++ algoritmik tilining alifbosi , identifikator. operator, int, float, for, whil, asm, auto, break, case, catch, char, class, const, continue, default, delete, do, double, else, enum, explicit, extern, float, for, friend, goto, if, inline, int, long, mutable, new, operator, private, protected, public, register, return, short, signed, sizeof,, static, struct, switch, template, this, throw, try, typedef, typename, union, unsigned, virtual, void, volatile, while. «takrorlash sharti», for, while, do while, switch operatorlari.
C++ dasturlash tizimida tarmoqlanuvchi jarayonlarni dasturlash
Mantiqiy tur − mantiqiy ifodalarning qiymatlarini qabul qiluvchi o’zgaruvchilarni e’lon qilishda ishlatiladi. Bu turga tegishli o’zgaruvchilar 0 (yolg’on) yoki 1 (rost) qiymatlardan birini qabul qiladi. Dasturlash tillarida tuzilgan mantiqiy ifodalar to’liq matematik mantiq qonuniyatlariga asoslanadi. Matematik mantiq − fikrlashning shakli va qonuniyatlari haqidagi fan. Uning asosini mulohazalar hisobi tashkil qiladi. Mulohaza – bu ixtiyoriy jumla bo‘lib, unga nisbatan rost yoki yolg‘on fikrni bildirish mumkin. Masalan «-5>-25», «11–juft son», «Toshkent-Hindistonning poytaxti», «Samarqand−tarixiy shahar» va hokazolar. Lekin «78 987 256 katta son» jumlasi to’g’ri mulohaza hisoblanmaydi, chunki «katta son» tushunchasi juda ham nisbiy, ya’ni katta son deganda qanday sonni nazarda tutish aniq emas. Shuning uchun ham yuqoridagi jumlaning rost yoki yolg‘onligi haqida fikr bildirish qiyin. Mulohazalarning rost yoki yolg’on bo’lishi holatlarga bog‘liq ravishda ham o‘zgarishi mumkin: Masalan, «hozir soat 13.00» jumlasining rost yoki yolg‘onligi qaralayotgan vaqtga bog‘liq. Xuddi shunday «x>0» ifodaning qiymati x o’zgaruvchisining qiymatiga bevosita bog’liq bo’ladi. C oilasidagi dasturlash tillarida mantiqiy ifodalar qurish uchun quyidagi taqqoslash amallari kiritilgan “>” (katta), “<” (kichik), “>=” (katta yoki teng), “<=” (kichik yoki teng), “==” (teng), “!=” (teng emas). C++ tilida mantiqiy tur «Bul algebrasi” asoschisi, Angliyalik matematik Jorj Bul sharafiga bool kalit so‘zi bilan ifodalangan. “Bul algebrasi” da mantiqiy mulohazalar ustida uchta amal aniqlangan: Inkor – A mulohazaning inkori deganda A rost bo‘lganda yolg‘on, yolg‘on bo‘lganda rost qiymat qabul qiluvchi mulohazaga aytiladi. C++ tilida inkor – ‘!’ belgisi bilan ifodalanadi. Masalan, A mulohazaning inkori «!A» ko‘rinishida yoziladi; Konyunksiya − ikkita A va B mulohazalar konyuksiyasi yoki mantiqiy ko‘paytmasi «A && B» ko‘rinishida yoziladi. Bu mulohaza qiymati A va B mulohazalarning har ikkalasi rost bo’lgandagina rost bo‘ladi, aks holda esa yolg‘on bo‘ladi («&&» amali «va» deb o‘qiladi). Masalan, «bugun oyning 8-kuni va bugun payshanba» mulohazasi oyning 8-kuni payshanba bo‘lgan kunlar uchungina rost bo‘ladi; Dizyunksiya – ikkita A va B mulohazalar dizyunksiyasi yoki mantiqiy yig‘indisi «A || B» ko‘rinishida yoziladi. Bu mulohaza rost bo‘lishi uchun A yoki B mulohazalardan hech bo’lmaganda bittasi rost bo‘lishi yetarli. («||» amali «yoki» deb o‘qiladi). Masalan, bugun “dushanba yoki chorshanba” mulohazasi haftaning dushanda yoki chorshanba kunlari uchun rost hisoblanadi; Yuqorida keltirilgan fikrlar asosida mantiqiy amallar uchun rostlik jadvali aniqlangan:

Mantiqiy tur qiymatlari ustida mantiqiy ko‘paytirish, qo‘shish va inkor amallarini qo‘llash
orqali murakkab mantiqiy ifodalarni qurish mumkin. Misol uchun, «x–manfiy va y ning qiymati
[-1..3] sonlar oralig‘iga tegishli emas» mulohazasining mantiqiy ifodasi quyidagicha bo‘ladi:
(x<0) && (u<-1) || (y>3).
Masala. Tekislikda markazining koordinatalari y x, , radiusi r bo’lgan aylana, hamda nuqta
0
,
0
x y koordinatalari bilan berilgan. Berilgan nuqtaning aylanaga tegishli ekanligini aniqlovchi
algoritm va dastur tuzilsin.
Berilgan masalalar uchun mantiqiy mulohazalar bajarilganda 1 (rost), aks holda 0 (yolg'on)
qiymat qaytaruvchi algoritmlar va dasturlar tuzilsin:
Ko’pgina masalalar yuzaga keladigan turli holatlarga bog‘liq ravishda qaror qabul qilishni
talab etadi. Bu borada C++ tili dasturning alohida bo‘laklarining bajarilish tartibini boshqarishga
imkon beruvchi qurilmalarning yetarlicha katta majmuasiga ega. Masalan, dastur bajarilishining
birorta qadamida qandaydir shartni tekshirish natijasiga ko‘ra boshqaruvni dasturning u yoki bu
bo‘lagiga uzatish mumkin (tarmoqlanuvchi algoritm). Bunday tarmoqlanishni amalga oshirish
uchun shart operatorlaridan foydalaniladi.
if operatori: if operatori qandaydir shartni rostlikka tekshirshi natijasiga ko‘ra dasturda
tarmoqlanishni amalga oshiradi:
if (
); Bu yerda mantiqiy turga tegishli o’zgaruvchi yoki mantiqiy ifoda bo’lishi mumkin. Agar shart 0 qiymatidan farqli, ya’ni rost bo‘lsa, bajariladi, aks holda, ya’ni shartning qiymati 0(yolg‘on) bo‘lsa, hech qanday amal bajarilmaydi va boshqaruv if operatoridan keyingi operatorga o’tadi (agar u mavjud bo‘lsa). C++ tilining qurilmalari operatorlarni blok ko‘rinishida tashkil qilishga imkon beradi. Blok – ‘{‘ va ‘}’ belgilar oralig‘iga olingan operatorlar ketma-ketligi bo‘lib, u kompilyator tomonidan yaxlit bir operator deb qabul qilinadi. Blok ichida o’zgaruvchilar e’lonlari ham bo’lishi mumkin va blokda e’lon qilingan o‘zgaruvchilar faqat shu blok ichida (ko‘rinadi) amal qiladi, blokdan tashqarida (ko‘rinmaydi) amal qilmaydi. Blokdan keyin ‘;’ belgisi qo‘yilmasligi mumkin, lekin blok ichidagi har bir ifoda ‘;’ belgisi bilan yakunlanishi shart. if – else operatori: Shart operatorining if – else ko‘rinishi quyidagicha: if () ; else ; Bu yerda 0 qiymatidan farqli, ya’ni rost bo‘lsa , aks holda bajariladi. if-else shart operator mazmuniga ko‘ra algoritmning tarmoqlanuvchi blokini ifodalaydi. ?: shart amali: Agar tekshirilayotgan shart nisbatan sodda bo‘lsa, shart amalining ‘?:’ ko‘rnishini ishlatish mumkin: ? : ; Ushbu shart amali if shart operatoriga o‘xshash ko’rinishda ishlaydi: agar 0 qiymatidan farqli, ya’ni rost bo‘lsa, , aks holda bajariladi. Odatda ifodalarning qiymatlari biror o‘zgaruvchiga o’zlashtiriladi. Goto operatori va nishonlar: Nishon – bu davomida ikkita nuqta (‘:’) qo‘yilgan identifikator. Nishon bilan qandaydir operator belgilanadi va keyinchalik dasturning boshqa bir qismidan unga shartsiz o‘tish amalga oshiriladi. Nishon bilan har qanday operator belgilanishi mumkin, shu jumladan e’lon operatori va bo‘sh operatorlar ham. Nishon faqat funksiyalar ichida amal qiladi. Nishonga shartsiz o‘tish goto operatori yordamida bajariladi. Goto operatori orqali faqat uning o‘zi joylashgan funksiya ichidagi operatorlarga o‘tish mumkin. Goto operatorining sintaksisi quyidagicha: goto ; Ayrim hollarda, goto operatorining «sakrab o‘tishi» hisobiga xatoliklar yuzaga kelishi mumkin. Masalan, int i=0; i++; if(i) goto m; int j; m: j+=i; operatorlarining bajarilishi xatolikka olib keladi, chunki j o’zgaruvchisining e’loni chetlab o’tilgan. Shartsiz o‘tish operatori dastur tuzishdagi kuchli va shu bilan birga xavfli vositalardan biri hisoblanadi. Kuchliligi shundaki, u yordamida algoritmning «boshi berk» joylaridan chiqib ketish mumkin. Ikkinchi tomondan, bloklarning ichiga o‘tish, masalan, takrorlash operatorlarining ichiga «sakrab» kirish kutilmagan holatlarni yuzaga keltirishi mumkin. Shu sababli, imkon qadar goto operatoridan foydalanmaslik kerak, foydalanilgan taqdirda ham quyidagi qoidalarga amal qilish zarur – blok ichiga, if, if−else va switch operatorlari ichiga, hamda takrorlash operatorlari tanasiga tashqaridan “sakrab” kirish mumkin emas. Garchi, nishon yordamida dasturning ixtiyoriy joyiga o‘tish mumkin bo’lsa ham, boshlang‘ich qiymat berish e’lonlaridan sakrab o‘tish man etiladi, lekin bloklardan sakrab o‘tish mumkin.
C++ dasturlash tizimida takrorlanuvchi jarayonlarni dasturlash va muhandislik masalalarida qo’llash
Dastur bajarilishini boshqarishning yana bir kuchli mexanzmlaridan biri – takrorlash operatorlari hisoblanadi. Takrorlash operatori «takrorlash sharti» deb nomlanuvchi ifodaning rost qiymatida dasturning ma’lum bir qismidagi operatorlar (takrorlash tanasi)ning ko‘p marta takror ravishda bajarilishini amalga oshiradi. Takrorlash o‘zining kirish va chiqish nuqtalariga ega bo’lib, ba’zan chiqish nuqtasi bo‘lmasligi ham mumkin. Agar chiqish nuqtasi bo’lmasa cheksiz takrorlanish sodir bo’ladi. Cheksiz takrorlanish uchun takrorlashni davom ettirish sharti doimo rost bo‘ladi. Takrorlash shartini tekshirish, takrorlanish tanasidagi operatorlarning bajarilishidan oldin tekshirilishi mumkin (for, while takrorlash operatorlarida) yoki takrorlanish tanasining operatorlari bir marta bajarilgandan keyin tekshirilishi mumkin (do-while). Takrorlanishlarni tashkil etishda takrorlanishlar soni va qadami oldindan ma’lum bo’lgan holatlar uchun for operatoridan, boshqa hollarda esa while hamda do-while operatorlaridan foydalanish maqsadga muvofiq. Takrorlash operatorlari ichma-ich joylashishi ham mumkin. Quyida takrorlash operatorlari va ularning qo’llanilishi bilan batafsil tanishamiz. for takrorlash operatorining sintaksisi quyidagi ko‘rinishga ega: for (; ;) ; Bu operator o‘z ishini ifodasining bajarishidan boshlaydi. Keyin takrorlash qadamlari boshlanadi. Har bir qadamda tekshiriladi, agar ning qiymati 0 qiymatidan farqli, ya’ni rost bo‘lsa, takrorlash tanasi − bajariladi, so’ngra bajariladi. Agar ning qiymati 0 (yolg’on) bo‘lsa, takrorlanish jarayoni to‘xtaydi va boshqaruv takrorlash operatoridan keyingi operatorga o‘tadi. Shuni ta’kidlash kerakki, ifodasi vergul bilan ajratilgan bir nechta ifodalar birlashmasidan iborat bo‘lishi ham mumkin, bu holda vergul bilan ajratilgan ifodalarning oxirgisi takrorlanish sharti hisoblanadi. Takrorlanish
tanasi sifatida bitta operator, jumladan bo‘sh operator bo‘lishi yoki operatorlar bloki ham kelishi mumkin. Quyida for operatori parametrlarining vazifalari bilan tanishamiz: − takrorlash sanagichiga boshlang’ich qiymat berishga xizmat qiladi va u takrorlash jarayoni boshida faqat bir marta hisoblanadi. Ifodada o‘zgaruvchi e’loni ham bo’lishi mumkin va bu o‘zgaruvchi takrorlash operatori tanasida amal qiladi va takrorlash operatoridan tashqarida «ko‘rinmaydi». − takrorlanishning bajarishi yoki bajarilmasligini aniqlab beruvchi mantiqiy ifoda (shart), agar shart rost bo‘lsa, takrorlanish davom etadi, aks holda to’xtaydi. Agar bu ifodaning o’rni bo‘sh bo‘lsa, shart doimo rost deb hisoblanadi. − odatda takrorlanish sanagichining qiymatini oshirish (kamaytirish) uchun xizmat qiladi yoki unda takrorlanish shartiga ta’sir etuvchi boshqa amallar ham bo‘lishi mumkin. Takrorlash operatorida qavs ichidagi ifodalar bo‘lmasligi ham mumkin, lekin sintaksis ‘;’ bo‘lmasligiga ruxsat bermaydi. Shu sababli sodda ko‘rinishdagi takrorlash operatori quyidagicha bo‘ladi: for(;;). Agar takrorlanish jarayonida bir nechta o‘zgaruvchilarning qiymati sinxron ravishda o‘zgarishi kerak bo‘lsa, va ifodalarida zarur operatorlarni ‘,’ bilan yozish orqali bunga erishish mumkin: for(int i=1,j=2;i<=15;i++,j=i+1) { … } Takrorlash operatorining har bir qadamida i va j o‘zgaruvchilarning qiymatlari mos ravishda o‘zgarib boradi. for operatorida takrorlanish tanasi bo‘lmasligi ham mumkin. Shuni ham ta'kidlash joizki, C++ tilida for operatorining parametrlari haqiqiy turga tegishli bo'lishi, takrorlanishlar qadami ham ixtiyoriy holatda belgilanishi mumkin. Bu imkoniyatlar operatorning keng qamrovli ekanligini bildiradi. Masala. Dastlabki n ta (n>0) natural sonlarning kvadratlari yig’indisini hisoblovchi algoritm va dastur tuzilsin.

Agar ifoda qiymati doimo rost bo‘lsa, takrorlanish jarayoni cheksiz davom etadi. Xuddi shunday, takrorlanish boshlanishida rost bo’lib, uning qiymatiga takrorlanish tanasidagi hisoblash ta’sir etmasa, ya’ni uning qiymati o‘zgarmasa, bu holda ham takrorlanish cheksiz davom etadi. while takrorlanish shartini oldindan tekshiruvchi takrorlash operatori hisoblanadi. Agar takrorlanish boshida yolg‘on bo‘lsa, while operatori tarkibidagi bajarilmasdan cheklab o’tiladi. Ayrim hollarda qiymat berish operatori ko‘rinishida kelishi mumkin. Bunda qiymat berish amali bajariladi va natija 0 bilan taqqoslanadi. Natija noldan farqli bo‘lsa, takrorlanish davom ettiriladi. Agar rost ifodaning qiymati noldan farqli o‘zgarmas bo‘lsa, cheksiz takrorlanish ro‘y beradi. Masalan: while(1); // cheksiz takrorlanish Xuddi for operatoridagi kabi bu operatorda ham qavs ichida ‘,’ yordamida ajratilgan bir nechta ifodalarni yozish mumkin. Masala. Ikkita natural sonning eng katta umumiy bo’luvchisi (EKUB)ni Evklid algoritmi yordamida topish masalasi uchun algoritm va dastur tuzilsin./p>

Butun turdagi a va b qiymatlari oqimdan o‘qilgandan keyin ular qiymatlari toki o‘zaro teng bo‘lmaguncha takrorlash jarayoni ro‘y beradi. Takrorlashning har bir qadamida a va b sonlarining kattasidan, kichigi ayriladi va ularning tengligi tekshiriladi. Takrorlashdan keyingi ko‘rsatma vositasida a o‘zgaruvchisining qiymati natija sifatida chop etiladi. do-while takrorlash operatori while operatoridan farqli ravishda oldin operator yoki blokni bajaradi, keyin takrorlanish shartini tekshiradi. Bu qurilma takrorlanish tanasining kamida bir marta bajarilishini ta’minlaydi. do-while takrorlash operatori quyidagi sintaksisga ega: do while (); Bunday takrorlash operatorining qo‘llaniladigan holatlari takrorlanishni boshlamasdan turib, takrorlanish shartini tekshirishning iloji bo‘lmagan holatlar hisoblanadi. Masalan, birorta jarayonni davom ettirish yoki to‘xtatish haqidagi so‘rovga javob olish va uni tekshirish zarur bo‘lsin. Ko‘rinib turibdiki, jarayonni boshlamasdan oldin bu so‘rovni berishning ma’nosi yo‘q. Hech bo‘lmaganda takrorlanish jarayonining bitta qadami amalga oshirilgan bo‘lishi kerak.
Masala. Berilgan a musbat butun sonining barcha musbat butun bo’luvchilari va ularning miqdorini chop etadigan algoritm va dastur tuzilsin.

Nazorat savollari:
1. Qanday oparatorlar mantiqiy solishtirish operatorlari deyiladi
2. Mantiqiy operatorlar. Misol keltiring
3. O’tish operatori haqida tushuncha bering
4. Shartli operatorning qisqa ko’rinishi haqida tushuncha bering
5. Shartli operatorning uzun ko’rinishi haqida tushuncha bering
6. Tanlash operatori haqida tushuncha bering
7. Sharti avval tekshiriladigan takrorlanish
8. Sharti keyin tekshiriladigan takrorlanish
9. Parametrli takrorlanish
10. Takrorlanuvchi dastur nima?