DASTURLASH I 4-HAFTA Mavzu: Mantiqiy tur, mantiqiy opetarotlar, If shartli operatori. Hafta Mavzu Mashg‘ulo So t turi at 4-Ma’ruza Tarmoqlanuv 4chi hisoblash hafta jarayonlarini dasturlash 2 Mashg‘ulot mazmuni Mantiqiy tur, mantiqiy opetarotlar, If shartli operatori Lab_4.1 2 Mantiqiy amallar bilan ishlash Lab_4.2 2 Lab_4.3 Tuzilgan dasturni avtomatik tarzda 2 onlayn tekshiruvchi dastur yordamida nazorat ishini topshirish 2 4-Mustaqil ish If shatrli operatoridan foydalanib dastur yozish Topshiriqda berilgan savollarga javob yozish 1 Test savollariga javob berish 5 Dastur tuzishga bajarish doir topshiriqlarni 4-MA’RUZA MAVZU: MANTIQIY TUR, MANTIQIY OPETAROTLAR, IF SHARTLI OPERATORI. Reja: 1. Ma’ruzaga kirish; 2. bool ma’lumot turi; 3. if – shart operatori; 4. Ikki tarmoqli if-else operatori; 5. Xatoliklar va kutilmagan holalar; 6. Mantiqiy operatorlar; 7. Amaliy qism: soliqlarni hisoblash Kalit so‘zlar: ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ algoritm bo‘lish operatori butun tur C-stili dizayn tizimi haqiqiy nuqtali raqam haqiqiy tur identifikator ifodalash ifodani belgilash ikkilik tur increment kod va test increment operator KIN ma’lumot turi o‘zgarmas o‘zgarmas kalit so‘z o‘zgaruvchi ✓ o‘zgaruvchi maydoni ✓ o‘zgaruvchilarni e’lon qilish ✓ oddiy tur ✓ operandlar ✓ operator ✓ operatorni belgilash ✓ operatorni taqsimlash ✓ postdekrement ✓ postinkrement ✓ predekrement ✓ preinkrement ✓ psevdokod ✓ qisqa tur ✓ so‘zma-so‘z ✓ talablar spesifikatsiyasi ✓ tizim tahlili ✓ ✓ ✓ ✓ toshish toshmagan UNIX davri uzun tur yashirin tur 1. Ma’ruzaga kirish Key Point. Dastur shartlarga asoslangan holda hisoblash operatorlari orqali qaror qilishi mumkin. Yuqoridagi ma’ruzalarda keltirilgan yuzani topish masalasi uchun tuzilgan dasturda agar radiusga manfiy qiymat kiritilsa dastur nomutanosib natija chiqaradi. Aytaylik, agar manfiy qiymat kiritilsa dasturning ishlashini xohlamaymiz. Bunday vaziyatda nima qilish mumkin? Barcha yuqori darajali dasturlash tillaridagi kabi C++ tilida ham bir qancha alternativ variantlar ichidan tanlash va shu orqali dastur yo`nalishini boshqarish mumkin bo`lgan tanlash operatorlari mavjud. Yuzani topish masalasi uchun tuzilgan dasturda yuzaning qiymatini kiritish, hisoblash va natijani chiqarish ko`rsatmalari kiritilgan satrlar o`rniga quyidagicha satrlarni qo`yish mumkin: if(radius < 0) { cout << "Noto`g`ri qiymat kiritildi!"<< endl; } else { yuza = radius * radius * PI; cout << "Aylana yuzasi" << radius << " bo`yicha"<< yuza << ” ga teng” << endl; } radius Shuningdek, tanlash operatorlari shartlarni qo`llashda mantiqiy ifodalardan ham foydalanadi. Mantiqiy ifoda – true (rost) yoki false (yolg`on) qiymatlarini qabul qilish orqali hisoblash operatori. Quyida mantiqiy turlar va u bilan bog`liq operatorlar bilan tanishib chiqamiz. 2. bool ma’lumot turi Key Point. bool ma’lumot turi o`zgaruvchini true (rost) yoki false (yolg`on) qiymatlari bilan e’lon qiladi. Doira radiusining qiymati 0 dan katta, 0 ga teng yoki 0 dan kichik ekanligini ikki xil qiymat orqali qanday aniqlash mumkin? C++ ikki xil qiymatdan foydalanish orqali yo`nalishga erishish uchun oltita taqqoslash operatorlarini taqdim etadi (4.1jadvaj). 4.1-jadvaj. Taqqoslash operatorlari. Ogohlantirish: Taqqoslash jarayonida ikki tomonning tengligini tekshirish uchun ikkita tenglik belgisi (==)dan foydalanish zarur. Bitta tenglik belgisi (=) ta’minlash operatori hisoblanadi. true va false – mantiqiy qiymatlar bo`lib, xuddi 1 va 0 ga o`shaydi. Ular dasturlash tilida kalit so`zlardir va ulardan ismlar sifatida foydalanib bo`lmaydi. Ichki fonda C++ true qiymati o`rniga 1 ni va false qiymati o`rniga 0 ni ishlatadi. Agar konsol oynada mantiqiy qiymat kiritsak, agar u rost (true) bo`lsa dastur ekranga 1 ni chiqaradi, agar yolg`on (false) bo`lsa, 0 ni chiqaradi. Masalan, cout << (4 < 5); 1 ni ko`rsatadi, chunki 4 < 5 (4 ning 5 dan kichikligi) rost. cout << (4 > 5); 0 ni ko`rsatadi, chunki 4 > 5 (4 ning 5 dan kattaligi) yolg`on. Eslatma. Dasturda bool o`zgaruvchiga sonli qoymatlarni ham berish mumkin. Bunda 0 dan boshqa ixiyoriy son true qiymat, 0 ning o`zi false qiymat qabul qiladi. Misol uchu, quyidagi ta’minlash operatorlaridan keyin b1 va b3 lar true, b2 esa false qiymatga ega bo`ladi: boolb1 = -1.5; // bool b1 = true bilan bir xil boolb2 = 0; // bool b2 = false bilan bir xil boolb3 = 1.5; // bool b3 = true bilan bir xil Nazorat. 4.1. Oltita taqqoslash operatorlarini ayting. 4.2. Quyidagi mantiqiy ifodalar natijasiga ko`ra x ning 1 ga tengligini taxmin qiling: (x (x (x (x (x > 0) < 0) != 0) >= 0) != 1) 4.3. Quyidagi kod chiqaruvchi natijani ayting: bool b = true; int i = b; cout << b << endl; cout << i << endl; 4.1. if – shart operatori Key Point. if – shart operatori dasturga hisoblash uchun maxsus alternative tanlov qismni belgilovchi tuzilma. Dastur tuzish davomida ko`p hollarda masalani yechimini topish bir nechta holatlar uchun bajarilishiga duch kelamiz. C++ da tanlash operatorlarining bie necha xili mavjud: bir yo`nalishli if operatori, ikki yo`nalishli if-else operatori, ichma-ich if operatorlar, switch operatori va shartli ifodalar. Bir yo`nalishli if operatori shart faqat bitta (true) bo`lgan holatlarda ishlaydi. Uning yozilish qoidasi quyidagicha: if (mantiqiy ifoda) { ko`rsatma satri (s); } 4.1 (a) rasmdagi blok-sxemada C++ da if operatorining ishlash tartibi tasvirlangan. Blok-sxema – dasturdagi qadamlar va bajarilish qismlarini ko`rsatkichli chiziqcha yordamida bog`lagan holda tasvirlovchi diagramma. Bu shakllardagi bajarilish qismlari o`zida operatsiyalarni ifodalaydi va yo`nalish chiziqlari dasturning boshqaruv yo`lini ko`rsatadi. Romb shakli mantiqiy qiymatni aniqlash uchun va to`rtburchak shakli ko`rsatmalarni bajarishni ko`rsatish uchun foydalaniladi. 4.1-rasm. Agar mantiqiy ifoda rost qiymatni qabul qilsa, if operatori berilgan ko`rsatmani ishga tushiradi Agar mantiqiy ifoda true qiymat qabul qilsa, blok ichidagi ko`rsatmalar bajariladi. Misol sifatida quyidagi kodni ko`rib chiqamiz: if(radius >= 0) { yuza = radius * radius * PI; cout << "Aylana yuzasi" << radius << bo`yicha"<< yuza << ” ga teng” << endl; " radius } 4.1(b) – rasmda agar radiusning qiymati 0 dan katta yoki 0 ga teng bo`lsa blok ichidagi ko`rsatma bajariladi, ushbu ikki shartdan boshqa holatda blokdagi ko`rsatma bajarilmaydi. Mantiqiy ifoda qavslar ichida yozilishi kerak. Quyida keltirilgan (a) shakldagi koddagi mantiqiy ifoda noto`g`ri yozilgan, (b) shakldagi kodda esa to`g`ri yozilgan. Shart operatorining bajarilishida uning tanasini belgilash uchun figural qavslar ({ va })dan foydalanish mumkin. Agar dasturda faqat bir yoqlama shart operatori bo`lsa va undan keyin ushbu shartga tegishli bo`lgan boshqa bajariluvchi ifodalar bo`lmasa bu qavslardan foydalanish shart emas. Bunga quyidagicha misol keltirish mumkin: Quyidagi kodli ro`yxatda foydalanuvchi tomonidan butun son kiritilishi ko`rsatilgan. Agar son 5 ga qoldiqsiz bo`linsa “5 ga karrali” degan gap, agar 2 ga qoldiqsiz bo`linsa, “Juft son” degan gap ekranga chiqariladi. 3.1-kodli royxat. ifoperator.cpp 1 #include<iostream> 2 using namespacestd; 3 4 int main() 5 { 6 // Foydalanuvchini butun son kiritishga undash 7 int son; 8 cout << "Butun sonni kiriting: "; 9 cin >> son; 10 11 if (son % 5 == 0) 12 cout << "5 ga karrali"<< endl; 13 14 if(son % 2== 0) 15 cout << "Juft son"<< endl; 16 17 return 0; 18 } Butun sonni kiriting: 4 Juft son Butun sonni kiriting: 30 5 ga karrali Juft son 4.4. Ikki tarmoqli if-else operatori Key Point. Ikki tarmoqli if-else operatori berilgan mantiqiy ifodaning true yoki false qiymat qabul qilganda operatsiya bajarishga mo`ljallangan. Bir tarmoqli if operatori agar mantiqiy ifoda rost qiymat qabul qilsa, dastur bosqichini operatsiya bajarishga yo`naltiradi. Mantiqiy ifoda yolg`on qiymat qabul qilganda esa hech qanday operatsiya bajarilmaydi. Ammo qo`yilgan shartning bajarilmagan holatida ham biror operatsiya amalga oshirilishi lozim bo`ladigan masalalar ham bor. Bunda ikki tarmoqli if - else operatoridan foydalanishimiz mumkin. Bu operator mantiqiy turning true yoki false qiymati uchun dastur oqimini bir-biridan farq qiluvchi ikki xil vazifaning bajarilishiga yo`naltiradi. Quyida ikki tarmoqli if - else operatorining yozilish qoidasi keltirilgan: if(mantiqiy ifoda) { mantiqiy ifoda rost qiymat olgandagi operatsiya; } else { mantiqiy ifoda rost qiymat olgandagi operatsiya; } 4.2-rasmda ushbu jarayonning algoritm blok-sxemasi keltirilgan. 4.2-rasm. if - else operatori mantiqiy turning true yoki false qiymati uchun dastur oqimini bir-biridan farq qiluvchi ikki xil vazifaning bajarilishiga yo`naltiradi if - else operatori bajarilishini doira yuzasini hisoblash dasturi orqali ko`rib chiqamiz: if(radius >= 0) { yuza = radius * radius * PI; cout << "Doira radiusi: "<<radius << " yuzasi: "<< yuza; } else { cout << "Manfiy radius"; }