Texnik tizimlarda axborot texnalogiyalari

12-mavzu. C++ dasturlash tilining asosiy konstruksiyalari va tizimda qo‘llash xususiyatlari.

Reja:

1. Dastur strukturasi. C++ dasturlash tilining asosiy konstruksiyalari, ulardan foydalanish xususiyatlari. Operatorlar, toifalar, protseduralar. Dastur loyihasi tuzilmasi. Dastur tuzish xolatlari va ko‘rinishlari. Dasturning tarkibiy qismlari. Turli texnik sohalardagi ma’lumotlarning toifalari strukturasi.

2. Chiziqli hisoblash jarayonlarining dasturlari. Texnik tizimlaridagi oydin misollarda chiziqli dasturlashni qo‘llanilishi. Identifikator, o‘zgaruvchilar toifalari (turlar). C++ algoritmik tilida malumotlarni kiritish va chiqarish, boshqarish qatori, format spetsifikatorlari va modifikatorlari, standart kutubxonasi sarlavha fayllari (.h). Chiziqli dastur tuzilmasi (strukturasi). Sohaga oid chiziqli algoritmlarni ifodalash (energetika sohasi, mashinasozlik, konchilik ishi, muxandislik tizimlari sohalari).

3. Mantiqiy amallar va munosabatlar. Tarmoqlanuvchi dastur tuzilmasi. SHartli, shartsiz va tanlash operatorlari. Vizual dasturlashda ishlatiladigan RadioGroup komponentasi.

4. Takrorlash (sikl) operatorlari. Ularning turli formalari (parametrli va shartni oldin va keyin tekshiruvchi operatorlar). Takrorlanuvchi strukturali dasturlar. Takrorlanishning For, While, Do while operatorlari. Murakkab algoritmlarni ifodalaydigan soha masalalari.


1. Dastur strukturasi. C++ dasturlash tilining asosiy konstruksiyalari, ulardan foydalanish xususiyatlari. Operatorlar, toifalar, protseduralar. Dastur loyihasi tuzilmasi. Dastur tuzish xolatlari va ko‘rinishlari. Dasturning tarkibiy qismlari. Turli texnik sohalardagi ma’lumotlarning toifalari strukturasi.


C++ algoritmik tilining alifbosi quyidagilardan iborat:

• katta va kichik lotin harflari:

• 0 dan 9 gacha raqamlari;

• maxsus belgilar (+,-,*,/,=,>,<,{,},[,],’) o’zichiga oladi.

C++ tilida so’z deb bir nechta belgilar ketma - ketligi tushuniladi. Xizmatchi so’z deb C++ tilidagi standart nom tushuniladi. Bu nom maxsus ma’noni anglatadi va uni ma'lumotlarga berib bo’lmaydi. Masalan: int, float, for, while va hokazo.

C++ tilida ma’lumotlarninig elementlari bo’lib o’zgaruvchilar, o’zgarmaslar, izohlar xizmat qiladi. O’zgaruvchi. Xotiraning nomlangan qismi bo’lib, o’zida ma’lum bir toifadagi qiymatlarni saqlaydi. O’zgaruvchining nomi va qiymati bo’ladi. O’zgaruvchining nomi orqali qiymat saqlanayotgan xotira qismiga murojaat qilinadi. Programma ishlash jarayonida o’zgaruvchining qiymatini o’zgartirishi mumkin. Har qanday o’zgaruvchini ishlatishdan oldin, uni e'lon qilish lozim. Quyida butun sonlardan foydalanish uchun b, haqiqiy sonlardan foydalanish uchun h o’zgaruvchisi e’lon qilingan:

Int b;

Float h; O’zgarmaslar (const) Hisoblash jarayonida qiymatini o’zgartirmaydigan kattaliklarga aytiladi. 169 Float const pi=3.14; Izohlar. Programmaning ma’lum qismini tavsiflash uchun ishlatiladi va bu qatorda hech qanday amal bajarilmaydi, ya’ni programmaning biror qismini yaxshiroq tushuntirish uchun xizmat qiladi. Izoh “/*” va “*/” simvollari orasida beriladi. /* Bu erga izoh yoziladi */ Bundan tashqari bir satrli izohlardan ham foydalanish mumkin. Buning uchun izoh boshiga “//” belgisi qo’yiladi. Operator. Tilning yakunlangan jumlasi hisoblanadi va ma’lumotlar tahlilining tugallangan bosqichini ifodalaydi. Operatorlar nuqtali vergul “;” bilan ajratiladi. Ya’ni “;” operatorning tugallanganligini bildiradi. C++ da operatorlar programmada keltirilgan ketma-ketlikda bajariladi. Identifikator. Programmist tomonidan programma elementlari (funksiya, o’zgaruvchilar, o’zgarmaslar…) uchun ixtiyoriy tanlangan nom. Identifikator tanlanganda quyidagilarga ahamiyat berish kerak:

• Identifikator lotin harflaridan boshlanishi shart;

• Ikkinchi simvoldan boshlab raqamlardan foydalanish mumkin;

• C++ da kata kichik harflar farq qiladi. Ya’ni quyidagilarning har biri alohida identifikator hisoblanadi: KATTA, kata, KaTTa, kAttA, Katta, kATTA, …

• Probel C++ da so’zlarni ajratish uchun ishlatiladi. Shuning uchun identifikatorda probeldan foydalanib bo’lmaydi;

• Xizmatchi (int, float, for, while kabi) so’zlardan identifikator sifatida foydalanib bo’lmaydi;

C++ tilining kalit so’zlariga quyidagilar kiradi: 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. Protsessor registrlarini belgilash uchun quyidagi so’zlar ishlatiladi:

_AH, _AL, _AX, _EAX, _BH, _BL, _BL, _BX, _EBX, _CL, _CH, _CX, _ECX, _DH, _DL, _DX, _EDX, _CS, _ESP, _EBP, _FS, _GS, _DI, _EDI, _SI, _ESI, _BP, _SP, _DS, _ES, _SS, _FLAGS.

C++ da programma funksiya yoki funksiyalardan tashkil topadi. Agar programma bir nechta funksiyadan iborat bo’lsa, bir funksiyaning nomi main bo’lishi shart. Programma aynan main funksiyasining birinchi operatoridan boshlab bajariladi.

Funksiyaning aniqlanishi quyidagicha bo’ladi: Qaytariluvchi_qiymat_toifasi funksiya_nomi ([parametrlar])

{ Funksiya tanasini tashkil qiluvchi operatorlar

}

Qoida bo’yicha funksiya qandaydir bir qiymatni hisoblash uchun ishlatiladi. Shuning uchun funksiya nomi oldidan, funksiya qaytaradigan qiymat toifasi yoziladi. Agar funksiya hech qanday qiymat qaytarmaydigan bo’lsa, void toifasi yoziladi. Agar funksiya qaytaradigan qiymat toifasi yozilmagan bo’lsa, int (butun) toifali qiymat qaytariladi deb qabul qilinadi. Funksiyalar bilan keying mavzularda batafsil tanishamiz.

C++da oddiy matnni ekranga chiqaruvchi programmani ko’rib chiqamiz

// Muallif Andijon Mashinasozlik institute

// Sana 22-avgust 2018-yil

// Maqsad: Matnni ekranga chiqruvchi programma

#include // ekranga ma’lumot chiqarish uchun

int main ()

{

std:cout << “Salom Dunyo!”

return 0;

}

170

Har bir satrni o’rganib chiqamiz:

1,2,3 – satrlar izoh hisoblanadi. Malakali programmistlar har qanday programma muallif, programmaning tuzilish sanasi va maqsadini ifodalovchi izoh bilan boshlanishini maslahat berishadi.

4,6,10 – satrlar bo’sh satrlar hisoblanadi. Bosh satrlar programma qismlarini bir-biridan ajratib qo’yish uchun ishlatiladi. Programma qismlarining bir-biridan ajralib turishi, programma o’qilishini osonlashtiradi.

5-satrda, klaviaturadan ma’lumotlarni kiritish va ekranga chiqarish uchun sarlavha fayli programmaga qo’shilyapti. Bu satr klaviatura orqali ma’lumot kirituvchi va ekranga nimadir chiqaruvchi har qanday programmada bo’lishi shart. Aks holda xato sodir bo’ladi.

Agar sizning kompilyatoringiz eski bo’lsa, unda yozishingiz lozim bo’ladi.

“// ekranga ma’lumot chiqarish uchun” yozuvi bir satrli izoh hisoblanadi.

7-satrda butun toifadagi qiymat qaytaruvchi main funksiyasi berilgan. Int xizmatchi so’zi butun toifadagi ma’lumotlarni e’lon qilishi uchun ishlatiladi.

8-satrdagi ochuvchi figurali {funksiya tanasining boshlanganini bildiradi.

12-satrdagiu yopiluvchi figurali} funksiya tanasining tugaganini bildiradi.

9-satrdagi std::cout << orqali ma’lumotlar ekranga chiqariladi. Qo’shtirnoq (“_”) orasida yozilgan ma’lumotlar satr deyiladi. Qo’shtirnoq orasida nima yozilsa, hech qanday o’zgarishsiz ekranga chiqariladi.

9-satr oxiridagi nuqtali vergul (;) std::cout operatori tugallanganligini bildiradi; operatorlarni bir-biridan ajratish uchun xizmat qiladi. Ya’ni operator tugallanganligini bildiradi. 5-satrdagi kabi preprotsessor amalidan keyin; qo’yilmaydi.

11-satrdagi return xizmatchi so’zi orqali funksiya 0 qiymat qaytaradi va programma muvaffaqiyatli yakunlanadi.

O’zgaruvchilarni e’lon qilish. Programmada ishlatiladigan barcha o’zgaruvchilarni qaysi toifaga tegishli ekanligini e’lon qilish kerak. Ma’lumotlarni e’lon qilishning umumiy ko’rinishi quyidagicha:

Toifa_nomi o’zgaruvchi;

Agar bir nechta o’zgaruvchi bir toifaga mansub bo’lsa, ularni vergul bilan ajratib berish mumkin. Butun sonlarni ifodalash uchun int va haqiqiy sonlarni ifodalash uchun float xizmatchi so’zlaridan foydalaniladi. Bu ma’ruzada shu 2 tasini bilish bizga kifoya qiladi. Keying mavzuda butun va haqiqiy sonlar haqida batafsl gaplashamiz. Int x,y; // butun toifadagi o’zgaruvchilarni e’lon qilish Float a,b,c; // haqiqiy toifadagi o’zgaruvchilar e’lon qilish Kiritish va chiqarish operatorlari. Programmada klaviatura orqali ma’lumot kiritish va ekranga chiqarish uchu preprotsessor direktivasini, ya’ni #include ni programmaga qo’shish shart. Ma’lumotlarni kiritish std:cin >>, ma’lumotlarni chiqarish std::cout << operatori orqali amalga oshiriladi. Std::cin >>a; Bu operator bajarilganda ekranda kursor paydo bo’ladi. Kerakli ma’lumot klaviatura orqali kiritilgandan so’ng Enter tugmasi bosiladi. Cout orqali ekranga ixtiyoriy ma’lumotni chiqarish mumkin. Satrli ma’lumotlarni ekranga chiqarish uchun, ularni qo’shtirnoq orasida yozish kerak. Quyida a va b sonlarining yiьindisini chiqaruvchi programma berilgan: #include // standart nomlar fazosidan foydalanishni e’lon qilish Using namespace std;

Int main ()

{

Int a,b,c;

Cout “a=”; cin >>a;

Cout “b=”; cin >>b;

C=a+b;

Cout;

Return 0;

}

Ba’zi matematik funksiyalar:

Matematik funksiyalardan programmada foydalanish uchun math.h faylini programmaga qo’shish kerak.

#include



2. Chiziqli hisoblash jarayonlarining dasturlari. Texnik tizimlaridagi oydin misollarda chiziqli dasturlashni qo‘llanilishi. Identifikator, o‘zgaruvchilar toifalari (turlar). C++ algoritmik tilida malumotlarni kiritish va chiqarish, boshqarish qatori, format spetsifikatorlari va modifikatorlari, standart kutubxonasi sarlavha fayllari (.h). Chiziqli dastur tuzilmasi (strukturasi). Sohaga oid chiziqli algoritmlarni ifodalash (energetika sohasi, mashinasozlik, konchilik ishi, muxandislik tizimlari sohalari).


Dastur bajarilishi mobaynida berilganlarni saqlab turish uchun o’zgaruvchilar va o’zgarmaslardan foydalaniladi. O’zgaruvchi−dastur obekti bo’lib, xotiradagi bir nechta yacheykalarni egallaydi va berilganlarni saqlash uchun xizmat qiladi. O’zgaruvchi nomga, o’lchamga va boshqa atributlarga – ko’rinish sohasi, amal qilish vaqti va boshqa xususiyatlarga ega bo’ladi. O’zgaruvchilarni ishlatish uchun ular albatta e’lon qilinishi kerak. E’lon natijasida o’zgaruvchi uchun xotiradan ma’lum adresga ega soha zahiralanadi, soha o’lchami esa o’zgaruvchining turiga bog’liq bo’ladi. Shuni qayd etish zarurki, bitta turga tegishli o’zgaruvchiga turli apparat platformalarda xotiradan turlicha joy ajratilishi mumkin. O’zgaruvchi e’loni uning turini aniqlovchi kalit so’z bilan boshlanadi va ‘=’ belgisi orqali boshlanьich qiymat beriladi (o’zgaruvchiga boshlanьich qiymat berilmasa ham bo’ladi). Bitta kalit so’z bilan bir nechta o’zgaruvchilarni e’lon qilish ham mumkin. Buning uchun o’zgaruvchilar bir-biridan ‘,’ belgisi bilan ajratiladi. O’zgaruvchilar e’loni ‘;’ belgisi bilan tugallanadi. O’zgaruvchi nomi 255 ta belgidan oshmasligi kerak. Quyida C++ tilining tayanch turlari, ularning baytlardagi o’lchamlari va qiymatlarining chegaralarini keltiramiz:



Butun son turlari. Butun son qiymatlarni qabul qiladigan o’zgaruvchilar int (butun), short (qisqa), va 1ong (uzun) kalit so’zlari bilan e’lon qilinadi. O’zgaruvchi qiymatlari ishorali bo’lishi yoki unsigned kalit so’zi bilan ishorasiz son sifatida qaralishi mumkin. Belgi turi. Belgi turidagi o’zgaruvchilar char kalit so’zi bilan e’lon qilinadi va ular o’zida belgining ASCII jadvalidagi kodini saqlaydi. Belgi turidagi qiymatlar nisbatan murakkab bo’lgan tuzilmalar – satrlar, belgilar massivi va hokazolarni hosil qilishda ishlatiladi. Haqiqiy son turi. Haqiqiy sonlar float va double kalit so’zlari bilan e’lon qilinadi. Bu turdagi o’zgaruvchilar uchun mos ravishda xotiradan 4 va 8 bayt joy ajratiladi, hamda sonni saqlash qolipida bo’ladi. Agar kasrli son juda katta (kichik) qiymatlarni qabul qiladigan bo’lsa, u xotiradan 10 bayt joy egallaydi va ikkilangan aniqlik ko’rinishida saqlanadi. U long double kalit so’zi bilan e’lon qilinadi. Mantiqiy tur. Bu turdagi o’zgaruvchi bool kalit so’zi bilan e’lon qilinadi va u xotiradan bir bayt joy egallaydi, hamda 0(yolьon) yoki 1(rost) qiymatlaridan birini qabul qilishi mumkin. Void turi. Void turidagi dastur obekti hech qanday qiymatga ega bo’lmaydi va bu turdan qurilmaning til sintaksisiga mos kelishini ta’minlash uchun ishlatiladi. Masalan, C++ tili sintaksisi funksiya qiymat qaytarishini talab qiladi. Agar funksiyaning qiymat qaytarishi talab etilmasa, u void kalit so’zi bilan e’lon qilinadi. O’zgaruvchilarning e’lon qilinishiga doir misollar: Int a=-5, A=15; float abs=36.7, d; double kasr_son; bool b,t; char BELGI=’@’; Void mening_funksiyam(); /*funksiya qaytaradigan qiymat inobatga olinmaydi */ Kompyuter uchun tuzilgan algoritm ijrochisi-bu kompyuterdir. Biror dasturlash tilida yozilgan algoritm kodlashtirilgan oddiy ko’rsatmalar ketma-ketliliga o’tadi va mashina tomonidan avtomatik ravishda bajariladi. Metodik nuqtai–nazardan qaraganda algoritmning birinchi ijrochisi sifatida o’quvchi (talaba) o’zini tanlashi mumkin. O’quvchi tomonidan biror masalani echish algoritmi tuzilganda bu algoritmning to’ьri natija berishini tekshirish juda muhimdir. Buning yagona usuli o’quvchi tomonidan algoritmni turli boshlanьich berilganlarda qadamma - qadam

bajartirib (ijro etib) ko’rishidir. Algoritmni bajarish natijasida xatolar aniqlanadi va bartaraf etiladi. Ikkinchi tomonidan, masalani echishga qiynalayotgan o’quvchi uchun tayyor algoritmni bajarish – masalani echish yo’llarini tushunishga xizmat qiladi.

Algoritmlarni shartli ravishda quyidagi turlarga ajratish mumkin:

- chiziqli algoritmlar;

- tarmoqlanuvchi algoritmlar;

- takrorlanuvchi yoki siklik algoritmlar;

- ichma-ich joylashgan siklik algoritmlar;

- rekurrent (rekursiv) algoritmlar;

- takrorlanishlar soni oldindan noma’lum algoritmlar;

- ketma-ket yaqinlashuvchi algoritmlar.

Algoritmda amallar bajarilish tartibi navbat bilan, ketma-ket tarzda amalga oshsa − bunday algoritmga chiziqli algoritm deyiladi.

Chiziqli algoritmlarning blok-sxemasini tasvirlashning umumiy ko’rinishi quyidagicha bo’ladi:



C++ tilida o’zgaruvchilarga qiymat berish yoki ifodalarni qiymatlash uchun “=” amalidan foydalaniladi. Uning sintaksisi quyidagicha: =; O’zgaruvchilarga klaviaturadan qiymat kiritish va natijani ekranga chiqarish uchun mos ravishda “iostream.h” kutubxonasida joylashgan “cin” va “cout” oqimli o’qish vayozish funksiyalaridan foydalaniladi. Ularning sintaksislari quyidagicha: cin>>o’zgaruvchi; cout<>” (“get”), “<<” (“put”) amallari ham shuncha marta qo’llaniladi. Bulardan tashqari C++ tilida oqimdan formatli o’qish va yozishni amalga oshirishga mo’ljallangan funksiyalar ham mavjud. Quyida ular bilan tanishamiz. Bu funksiyalar − scanf() va printf() lar bo’lib, C tilidan vorislik bilan olingan. Ulardan foydalanish uchun «stdio.h» sarlavha faylini dasturga qo’shish kerak bo’ladi. Formatli o’qish funksiyasi scanf() quyidagi, int scanf(const char *[,…]); prototipga ega. Formatlash satri − belgilar satri bo’lib, u uchta toifaga bo’linadi: 1. To’ldiruvchi belgilar — bu 'bo’sh joy', ‘\t’,’\n’ belgilari. Bu belgilar formatlash satridan o’qiladi, lekin o’zgaruvchilarda saqlanmaydi. 2. To’ldiruvchi belgilardan farqli belgilar − bu ’%’ belgisidan tashqari, qolgan barcha ASCII belgilari hisoblanadi. Bu belgilar ham formatlash satridan o’qiladi, lekin o’zgaruvchilarda saqlanmaydi. 3. Format aniqlashtiruvchilar − oqim maydonidagi belgilarni ko’rib chiqish, o’qish va adresi bilan berilgan o’zgaruvchilar turiga mos ravishda almashtirish jarayonini boshqaradi. Har bir format aniqlashtiruvchisiga bitta o’zgaruvchi adresi mos kelishi kerak. Agar format aniqlashtiruvchilari soni o’zgaruvchilardan ko’p bo’lsa, natija qanday bo’lishini oldindan aytib bo’lmaydi. Aks holda, ya’ni o’zgaruvchilar soni ko’p bo’lsa, ortiqcha o’zgaruvchilar inobatga olinmaydi. Format aniqlashtiruvchisi quyidagi ko’rinishga ega: %[*][][F|N][h|1|L] Format aniqlashtiruvchisi ‘%’ belgisidan boshlanadi va undan keyin 1.2-jadvalda keltirilgan shart yoki shart bo’lmagan komponentalar keladi:



Oqimdagi belgilarni almashtiriladigan tur belgisining qabul qilishi mumkin bo’lgan belgilari quyidagi jadvalda keltirilgan:



Formatli yozish funksiyasi printf() esa quyidagi, int printf(const char * [,...]); prototipga ega bo’lib, bu funksiya standart oqimga formatlashgan chiqarishni amalga oshiradi. Funksiya argumentlar ketma-ketligidagi har bir argument qiymat qabul qiladi va unga satridagi mos format aniqlashtiruvchisini qo’llaydi va oqimga chiqaradi. Har bir format aniqlashtiruvchisiga bitta o’zgaruvchi adresi mos kelishi kerak. Agar format aniqlashtiruvchilari soni o’zgaruvchilardan ko’p bo’lsa, natija nima bo’lishini oldindan aytib bo’lmaydi. Aks holda, ya’ni o’zgaruvchilar soni ko’p bo’lsa, ortiqcha o’zgaruvchilar inobatga olinmaydi. Agar oqimga chiqarish muvaffaqiyatli bo’lsa, funksiya chiqarilgan baytlar sonini, aks holda EOF qiymatini qaytaradi. printf() funksiyasining satri argumentlarni almashtirish, formatlash va chiqarish jarayonini boshqaradi va u ikki turdagi obyektlardan tashkil topgan. − oqimga o’zgarishsiz chiqariladigan oddiy belgilar; − argumentlar ro’yxatidan tanlanadigan argumentga qo’llaniladigan format aniqlashtiruvchilari. U quyidagi ko’rinishga ega: % [][<.kenglik>] [.][F|N|h|1|L] ; Format aniqlashtiruvchisi ‘%’ belgisidan boshlanadi va undan keyin 1.4-jadvalda keltirilgan shart yoki shart bo’lmagan komponentalar keladi:



Almashtiriladigan tur belgisining qabul qilishi mumkin bo’lgan belgilari quyidagi jadvalda keltirilgan:







3.Mantiqiy amallar va munosabatlar. Tarmoqlanuvchi dastur tuzilmasi. SHartli, shartsiz va tanlash operatorlari. Vizual dasturlashda ishlatiladigan RadioGroup komponentasi. Mantiqiy tur − mantiqiy ifodalarning qiymatlarini qabul qiluvchi o’zgaruvchilarni e’lon qilishda ishlatiladi. Bu turga tegishli o’zgaruvchilar 0 (yolь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 yolь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’ь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 yolьonligi haqida fikr bildirish qiyin. Mulohazalarning rost yoki yolьon bo’lishi holatlarga bog’liq ravishda ham o’zgarishi mumkin: Masalan, «hozir soat 13.00» jumlasining rost yoki yolь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 yolьon, yolь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 yolь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 yiьindisi «A || B» ko’rinishida yoziladi. Bu mulohaza rost bo’lishi uchun A yoki B mulohazalardan hech bo’lmaganda bittasi rost bo’lishi etarli. («||» 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 oraliь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. #include #include #include using namespace std; int main(int argc, char *argv[]) { float x,y,r,x0,y0; /*Aylana markazining koordinatalari va radiusini kiritish*/ cin>>x>>y>>r;



Berilgan masalalar uchun mantiqiy mulohazalar bajarilganda 1 (rost), aks holda 0 (yolь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 etarlicha 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 erda 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(yolь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 oraliь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 erda 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, boshlanьich qiymat berish e’lonlaridan sakrab o’tish man etiladi, lekin bloklardan sakrab o’tish mumkin. Masalan: … goto B3A; \\ xato float x=0.5; goto B3A; \\ to’ьri {int n=10; x=n*x+8;} B3A: cout<<“x=”<


4.Takrorlash (tsikl) operatorlari. Ularning turli formalari (parametrli va shartni oldin va keyin tekshiruvchi operatorlar). Takrorlanuvchi strukturali dasturlar. Takrorlanishning For, While, Switch operatorlari. Murakkab algoritmlarni ifodalaydigan soha masalalari.

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 (yolь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 boshlanь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.



while takrorlash operatori, operator yoki blokni takrorlanish sharti yolьon (0) bo’lguncha takrorlashni amalga oshiradi. Uning sintaksisi quyidagicha: while () ; Agar 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 yolь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.



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. O’zgaruvchilarning qanday toifalarini bilasiz?

2. C++ da qanday amallar va ifodalar ishlatiladi?

3. Qanday standart matematik funksiyalarni bilasiz?.

4. C++ da qanday oddiy arifmetik ifodalar ishlatiladi?.

5. Dastur matni va preprocessor haqida tushuncha bering

6. Qanday operatorlar mantiqiy solishtirish operatorlari deyiladi?

7. Qo`shma operatorlar haqida tushuncha bering

8. C++ tilining qanday xizmatchi so’zlari ishlatiladi?

9. C++ da qanday kiritish operatori ishlatilai?

10. C++ da qanday chiqish operatori ishlatilai?

11. C++ da qanday kutubxona funktsiyalari ishlatiladi?

12. C++da qanday qo’shimcha standart funktsiyalar ishlatiladi?