C++ dasturlash tiliga kirish. C++ tilida ifodalar, operatorlar. Chiziqli jarayonlarga dasturlar tuzish.
Reja:
1. C++ dasturlash tili va muhiti. Dastur interfeysi.
2. Dastur strukturasi. Dastur elementlari. Alifbosi. Nomlar (Identifikatorlar).
3. C++ tilida ma’lumotlar va ularning turlari. Oʻzgarmaslar. Oʻzgaruvchilar.
4. C++ tilida ifodalar. Operatorlar.
5. Tarkibiy va boʻsh operator.
6. Ma’lumotlarni kiritish va chiqarish operatorlari (protseduralari).
Tayanch so‘z va iboralar: C++ dasturlash tili, : C++ dasturlash tili muhiti. Dastur interfeysi. C++ tilida ifodalar, Operatorlar.
1.C++ dasturlash tili va muhiti. Dastur interfeysi.
Obyektga Yo`naltirilganlik Dasturi (OYD) dasturlarni tashkillashtirish uslubidir. C++ esa Obyektga Yo`naltirilganlik Dasturining tilidir. U Bjarne Stroustrup tomonidan 1983-yilda AQSH, New Jersey, AT va T Laborotoriyasida yaratilgan. U ―C‖ ni tasvirlarga boy emas deb xisoblardi va o`zing eng yoqtirgan tili Simula 67 dan foydalangan holda qo`shimcha belgilar kiritdi va uni kengaytirdi. Simula 67 eng qadimgi obyektga yo`naltirilganlik tillaridan biri edi. Bjarne Stroustrup aslida uni "C oily darajalar bilan " deb atagandi. Aniqroq qilib aytgandan, C++ Cning yuqori to`plamidir : C dage deyarli barcha to`g`ri holatlar C++ da ham to`g`ridir, garchi revers,ya`ni teskari tomondan, noto`g`rib o`lsa ham . C++ ( C plyus plyus ) nomi Rick Mascitti tomonidan berilgan. Bu yerda "++" Cning kengaytirilish operatoridir.
1.0 versiyasi 1985 yilda, 2- versiyasi 1989 yilda, 3-versiyasi esa 1992 yilda sotuvga qo`yildi. C++ foydalanuvchilar tomonidan duch kelinadigan va AT&T da muhokama qilinadigan muammolarni bartaraf etish uchun taraqqiy etilgan. C++ ning mukammalligi quyida berilgan ikkita hodisalar orqali tasdiqlangan:
(i) AMSI (Amerika Milliy Standardlar Instituti ) da tuzilgan C++ qo`mitasi va
(ii) El lis va Stroustrup tomonidan chop etilgan C++ izohli qo`lyozmalari. ANS/ISO 2003-yilda C++standartlarining so‗ngi hujjatini nashr qildi. C++ quydagi xususiyatlarga ega:
(i) Masalalarini yechish davomida ularning murakkabligini kamaytiradi..
(ii) Natijalarning to‗riligini kafolatlaydi.
(iii) Kompyuter uskunalari va boshqa resurslar jihatidan hamyonbob .
(iv) Mavjud dasturiy inshootlari vakutubxonalar uchun integratsiyalash arzon va qulaydir.
(v) Ixcham ya‘ni turli xil kompyuterlarda dasturga xech qanday o‗zgartirish kiritmagan holda
qo‗llanilishi mumkin.1
Obyektga yo‗naltirilganlik dasturi diskret obyeklar ya`ni boshqa obyektlar bilan muloqotda bo`ladigan struktura va funksiyalarning ma`lumotlar yig‘indisidir.
C++ sinflar funksional yuklamalar va operator yuklamalarni qo‗shimcha qiladi. Bular yordamida abstract ma‘lumot turlarini yaratishimiz, mavjud ma‘lumot turlaridan xususiyatlarni o‗zlashtirishimiz va polimorfizmni qo‗llashimiz mumkin.
Shunday ekan C++ tili C ning yuksaltirilgan darajasi bo‗lib obyektga yo‗naltirilganlik qulaylilarini kengaytiradi. Bundan tashqari C++ boshqa yangi qulayliklarga ham ega, xususan: I/O dagi rivojlanishlar va fikrlari yozishda yangi imkoniyatlar.
1J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 , (189 bet).
44-rasm. C va C++ orasidagi bog‘liqlik
Umuman olganda, C va C++ orasidagi amaliy farqlar siz o‗ylagandan ancha katta. Siz dasturni C++ da C da yozilgan dasturdagidek yozishingiz ham mumkin. C++ programmasi dasturchilari C++ ni faqat yangi xususiyatlari uchun afzal ko‗rishmaydi, balki ular C dasturchilariga qaraganda C odatiy xususiyatlarining turli ko‗rinishda berilganligini ham ta`kidlashadi. 5.1-jadval C va C++ orasidagi farqni ko‗rsatadi 2
5.1-jadval. C va C++ orasidagi farq
№
|
С
|
С++
|
1.
|
Bu jarayonga yo‗naltirilgan til
|
Bu obyektga yo‗naltirilgan til
|
2.
|
Bunda ish yuqoridan pastga yo‗naltirilgan
|
Bunda ish pastdan yuqoriga yo‗naltirilgan
|
3.
|
Sinflarni va metodlarni qo‗llamaydi
|
Sinflarni va metodlarni qo‗llaydi
|
4.
|
Bu polymorphism va inheritance (meros)ni
qo‗llamaydi
|
Polymorphism va inheritance (meros)ni
qo‗llaydi
|
5.
|
Abstrakt va virtual sinflarni qo‗llamaydi
|
Abstrakt va virtual sinflarni qo‗llaydi
|
6.
|
Operator va funksiyalarning yuklamalarini
qo‗llamaydi
|
Operator va funksiyalarning yuklamalarini
qo‗llaydi
|
7.
|
Turli platformalarda bo‗ysinuvchan emas
|
C ga qaraganda turli platformalarda ancha
bo‗ysinuvchan
|
Agar siz C tili bilan tanish bo‗lsangiz demak C++ haqida xam boshlang‘ich asosiy ma‘lumotlarga ega desa bo‗ladi. Shunga qaramasdan ko‗pgina notanish ma‘lumotlar ham bo‗ladi. Bizning asosiy maqsadimiz OYD dasturlarini imkoni bvoricha tezroq yozishingizda yordam berishdir.
Eslatma: C++ yordamida muxarrirlar, tuzuvchilar, muloqot tizimlari ma‟lumotlar bazasi va boshqa shu kabi tizimlarni rivojlantirishingiz mumkin.
2.Dastur strukturasi. Dastur elementlari. Alifbosi. Nomlar (Identifikatorlar).
Programmistlar - ular shunday odamlar bo‗lib, hamma vaqt ham biror narsa etishmayotgandek, chunki programmaning effektivligi va qo‗llanilishida uning tez ishlashini orttirish uchun doim xar xil usullarni izlashda bo‗ladi. Ayrim xollarda biz ishlashda ko‗proq instrumentlarni talab kilamiz, ya‘ni asosan programmalash tillari bilan ishlagandda. Bunday tillar ko‗pchilikni tashkil qilgani bilan ularning ichida ayrimlari kuchli hisoblanadi. Tilning effektivligi uning tezligi va shu bilan bir vaqtda egiluvchan (qo‗lay) ligiga bog‗liq bo‗ladi. Tilning sintaksisi qisqa tushunarli bo‗lishi kerak. U korrekt kodni tuza olishi bilan keng imkoniyatlarga ham ega bo‗lishi, lekin eskicha (va tupik) echimlarga ega bo‗lmasligi
2J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (190- bet)
kerak. Xulosa qilib aytganda yaxshi til bir material bulmagan sifatga ega bo‗lishi kerak, ya‘ni unda ishlagan odam rohat qilishi kerakdir. Manna shunday tillarning biri С# tili hisoblanadi. NET Framework muhitini qo‗llab quvvatlaydigan Microsoft kompaniyasida yaratilgan С# tili programmalash sohasidagi boy merosga tayanadi. Uning bosh arxitektori shu sohaning etakchi mutaxasisi— Anders Xeylsberg (Anders Hejlsbeni).
С# — dunyodagi ikkita eng mufaqiyatli С va C++ kompyuter tillarining avlodidir. U S tilidan sintaksis, kalit suzlarini va operatorlarni meros qilib olgan. U C++ tilida aniqlangan ob‘ekt modelini qurish va takomillashtirish imkoniyatga ega. SHuningdek, С# boshqa muvafaqiyatli Java tili bilan yaqindan bog‗langan. С# i Java umumiy kelib chiqishga ega bo‗lganligi bilan, ammo ularning ko‗pchilik muhim jihatlari bir biridan farq qilib, ularni ―qarrindosh (dvoyurodnыy) aka ukalar‖ deyishga bo‗ladi. Masalan, ular ikkalasi ham programmalashda keng tarqalgan sistemani qo‗llab quvvatlaydi va yaxshi ishlay olishi uchun oraliq kodni foydalanadi, lekin amalga oshirish qismlari(detali)da bir-biridan farq qilanadi.3
Meros qilingan xarakteristikalardan tarkib topgan quvvatli fundamentga tayangan С#, programmalash san‘atini yangi pag‗onaga ko‗taradigan muhim yangiliklarga egadir. Masalan, С# tilining elementlariga vakil (nomoyonda), xossalar, indeksatorlar va hodisalardek tushunchalar kiritilgan. SHuningdek, nishon(atribut) larni qo‗llab quvvatlaydigan sintaks qo‗shilgan; COM (Component Object Model bu —Microsoft komponentli ob‘ektining modeli — o‗zining boshqa ob‘ektlarga bo‗lgan xizmatini ko‗rsatadigan ob‘ekt yordamida interfeysga ega bo‗lgan standart mexanizm ) bilan bog‗liq bo‗lgan muammolarni yo‗qotish hisobiga komponentlarni tuzish soddalashtirilgan. SHuningdek, Java tilidek С# tili xatolarni dinamik holda izlaydigan, xavsizligini va programmalarni boshqarishni taminlaydigan vositanilarni taqdim etadi. Biroq Java dan С# ning farqi bu uning programmistlarga ko‗rsatkichlarga murojat qila olishni berishida. SHunday qilib С#, C++ ning dastlabki kuchi va aniq shablon sinflarining(template class) korrekt foydalanadigan, turini kantrollaydigan (type checking) mexanizmga ega bo‗lgan Java ning xavfsizligini o‗zida mujassamlashtirgan. SHuningdek, С# tilida qo‗laylilik va ishonchlilik orasidagi qarama-qarshilik miyorlangan va yo‗q qilingan(foydalanuvchi yoki programmaga bilinmaydi).
Hisoblash texnikaning rivojlanish yo‗lidagi programmalash tillarining evolyusiyasi hisoblash muhitini, programmistlarning fikrlash usulini va programmalashga qarashni o‗zgartiradi. С# tili ham bundan mustasno emas. SHaroitga moslashish va yangiliklar kiritishni takomillashtirish jarayonida С# tili hozirgi vaqtda oldingi qatorlardadir. Bu har qanday professional programmist e‘tiborga oladigan til xisoblanadi.
Dasturlar
Dastur so‗zi ham komandalarning alohida blokini (berilgan kodini) aniqlovchi so‗z, ham yaxlit holdagi bajariluvchi dasturiy mahsulotni belgilovchi so‗z sifatida ishlatiladi. Bu ikki xillilik o‗quvchini chalg‗itishi mumkin. SHuning uchun unga aniqlik kirit amiz. Demak dasturni yo dasturchi tomonidan yoziladigan komandalar to‗plami, yoki amallar bajaradigan kompyuter mahsuloti sifatida tushinamiz.
Dasturchilar oldida turgan masalalar
Vaqt o‗tishi bilan dasturchilar oldiga quyilgan masalalar o‗zgarib boryapti. Bundan yigirma yil oldin dasturlar katta hajmdagi ma‘lumotlarni qayta ishlash uchun tuzilar edi. Bunda dasturni yozuvchi ham, uning foydalanuvchisi ham kompyuter sohasidagi bilimlar bo‗yicha professional bo‗lishi talab etilardi. Hozirda esa ko‗pgina o‗zgarishlar ro‗y berdi. Kompyuter bilan ko‗proq uning apparat va dasturiy ta‘minoti haqida tushunchalarga ega bo‗lmagan kishilar ishlashyapti. Kompyuter odamlar tomonidan uni chuqur o‗rganish vositasi emas, ko‗proq o‗zlarining oldilariga qo‗yilgan, o‗zlarining ishlariga tegishli bo‗lgan muammolarini echish instrumenti bo‗lib qoldi.4
Foydalanuvchilarning ushbu yangi avlodini dasturlar bilan ishlashlarini osonlashtirilishi bilan bu dasturlarning o‗zini murakkabligi darajasi oshadi. Zamonaviy dasturlar - foydalanuvchi bilan do‗stona munosabatni yuqori darajada tashkil qiladigan ko‗p sondagi oynalar, menyu, muloqot oynalari va vizual grafikaviy muhitlardan tarkib topgan interfeysga ega bo‗lishi lozim.
3J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (191-192betlar) 4J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (192-193betlar)
Dasturlashga talabni o‗zgarishi nafaqat tillarning o‗zgarishiga balki uni yozish texnologiyasini ham o‗zgarishiga olib keldi. Dasturlash evolyusiyasi tarixida ko‗pgina bosqichlar bo‗lishiga qaramay biz bu kursimizda protsedurali dasturlashdan ob‘ektlarga mo‗ljallangan dasturlashga o‗tishni qaraymiz.
Protseduraviy, strukturaviy va ob‟ektlarga mo„ljallangan dasturlash
Shu vaqtgacha dasturlar berilgan ma‘lumotlar ustida biror bir amal bajaruvchi protseduralar ketma-ketligidan iborat edi. Protsedura yoki funksiya ham o‗zida aniqlangan ketma-ket bajariluvchi komandalar to‗plamidan iboratdir. Bunda berilgan ma‘lumotlarga murojaatlar protseduralarga ajratilgan holda amalga oshiriladi.
Strukturaviy dasturlashning asosiy g‗oyasi «bo‗lakla va hukmronlik qil» prinsipiga butunlay mos keladi. Kompyuter dasturini masalalar to‗plamidan iborat deb qaraymiz. Oddiy tavsiflash uchun murakkab bo‗lgan ixtiyoriy masalani bir nechta nisbatan kichikroq bo‗lgan tarkibiy masalalarga ajratamiz va bo‗linishni toki masalalar tushunish uchun etarli darajada oddiy bo‗lguncha davom ettiramiz.
Misol sifatida kompaniya xizmatchilarining o‗rtacha ish haqini hisoblashni olamiz. Bu masala sodda emas. Uni qator qism masalalarga bo‗lamiz:
1. Har bir xizmatchining oylik maoshi qanchaligini aniqlaymiz.
2. Kompaniyaning xodimlari sonini aniqlaymiz.
3. Barcha ish haqlarini yig‗amiz.
4. Hosil bo‗lgan yig‗indini kompaniya xodimlari soniga bo‗lamiz.
Xodimlarning oylik maoshlari yig‗indisini hisoblash jarayonini ham bir necha bosqichlarga ajratish mumkin.
1. Har bir xodim haqidagi yozuvni o‗qiymiz.
2. Ish xaqi to‗g‗risidagi ma‘lumotni olamiz.
3. Ish haqi qiymatini yig‗indiga qo‗shamiz.
4. Keyingi xodim haqidagi yozuvni o‗qiymiz.
O‗z navbatida, har bir xodim haqidagi yozuvni o‗qish jarayonini ham nisbatan kichikroq qism operatsiyalarga ajratish mumkin:
1. Xizmatchi faylini ochamiz.
2. Kerakli yozuvga o‗tamiz.
3. Ma‘lumotlarni diskdan o‗qiymiz.
Strukturaviy dasturlash murakkab masalalarni echishda etarlicha muvofaqqiyatli uslub bo‗lib qoldi. Lekin, 1980 - yillar oxirlarida Strukturaviy dasturlashning ham ayrim kamchiliklari ko‗zga tashlandi.5 Birinchidan, berilgan ma‘lumotlar (masalan, xodimlar haqidagi yozuv) va ular ustid agi amallar (izlash, tahrirlash) bajarilishini bir butun tarzda tashkil etilishidek tabiiy jarayon realizatsiya qilinmagan edi. Aksincha, protseduraviy dasturlash berilganlar strukturasini bu ma‘lumotlar ustida amallar bajaradigan funksiyalarga ajratgan edi.
Ikkinchidan, dasturchilar doimiy tarzda eski muammolarning yangi echimlarini ixtiro qilar edilar. Bu situatsiya ko‗pincha velosipedni qaytam ixtiro qilish ham deb aytiladi. Ko‗plab dasturlarda takrorlanuvchi bloklarni ko‗p martalab qo‗llash imkoniyatiga bo‗lgan hohish tabiiydir. Buni radio ishlab chiqaruvchi tomonidan priyomnikni yig‗ishga o‗xshatish mumkin. Konstruktor har safar diod va tranzistorni ixtiro qilmaydi. U oddiygina - oldin tayyorlangan radio detallaridan foydalanadi xolos. Dasturiy ta‘minotni ishlab chiquvchilar uchun esa bunday imkoniyat ko‗p yillar mobaynida yo‗q edi.
Amaliyotga do‗stona foydalanuvchi interfeyslari, ramkali oyna, menyu va ekranlarni tadbiq etilishi dasturlashda yangi uslubni keltirib chiqardi. Dasturlarni ketma-ket boshidan oxirigacha emas, balki uning alohida bloklari bajarilishi talab qilinadigan bo‗ldi. Biror bir aniqlangan hodisa yuz berganda dastur unga mos shaklda ta‘sir ko‗rsatishi lozim. Masalan, bir knopka bosilganda faqatgina unga biriktirilgan amallar bajariladi. Bunday uslubda dasturlar ancha interaktiv bo‗lishi lozim. Buni ularni ishlab chiqishda hisobga olish lozim.
Ob‘ektga mo‗ljallangan dasturlash bu talablarga to‗la javob beradi. Bunda dasturiy komponentlarni ko‗p martalab qo‗llash va berilganlarni manipulyasiya qiluvchi metodlar bilan birlashtirish imkoniyati mavjud.
Ob‘ektga mo‗ljallangan dasturlashning asosiy maqsadi berilganlar va ular ustida amal bajaruvchi protseduralarni yagona ob‘ekt deb qarashdan iboratdir.
C++ dasturlash tili C tiliga asoslangan. C esa o‗z navbatida B va BCPL tillaridan kelib chiqqan. BCPL 1967 yilda Martin Richards tomonidan tuzilgan va operatsion sistemalarni yozish uchun mo‗ljallangan edi.6
5J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (193-194betlar)
Ken Thompson o‗zining B tilida BCPL ning ko‗p hossalarini kiritgan va B da UNIX operatsion sistemasining birinchi versiyalarini yozgan. BCPL ham, B ham tipsiz til bo‗lgan. Yani o‗garuvchilarning ma'lum bir tipi bo‗lmagan - har bir o‗zgaruvchi kompyuter hotirasida faqat bir bayt yer egallagan. O‗zgaruvchini qanday sifatda ishlatish esa, yani butun sonmi, kasrli sonmi yoki harfdekmi, dasturchi vazifasi bo‗lgan. C tilini Dennis Ritchie B dan keltirib chiqardi va uni 1972 yili ilk bor Bell Laboratories da, DEC PDP-11 kompyuterida qo‗lladi. C o‗zidan oldingi B va BCPL tillarining juda ko‗p muhim tomonlarini o‗z ichiga olish bilan bir qatorda o‗zgaruvchilarni tiplashtirdi va bir qator boshqa yangiliklarni kiritdi. Boshlanishda C asosan UNIX sistemalarida keng tarqaldi. Hozirda operatsion sistemalarning asosiy qismi C/C++ da yozilmoqda. C mashina arhitekturasiga bog'langan tildir. Lekin yahshi rejalashtirish orqali dasturlarni turli kompyuter platformalarida ishlaydigan qilsa bo‗ladi.
1983 yilda, C tili keng tarqalganligi sababli, uni standartlash harakati boshlandi. Buning uchun Amerika Milliy Standartlar Komiteti (ANSI) qoshida X3J11 tehnik komitet tuzildi. Va 1989 yilda ushbu standart qabul qilindi. Standartni dunyo bo‗yicha keng tarqatish maqsadida 1990 yilda ANSI va Dunyo Standartlar Tashkiloti (ISO) hamkorlikda C ning ANSI/ISO 9899:1990 standartini qabul qilishdi. Shu sababli C da yozilgan dasturlar kam miqdordagi o‗zgarishlar yoki umuman o‗zgarishlarsiz juda ko‗p kompyuter platformalarida ishlaydi. C++ 1980 yillar boshida Bjarne Stroustrup tomonidan C ga asoslangan tarzda tuzildi. C++ juda ko‗p qo‗shimchalarni o‗z ichiga olgan, lekin eng asosiysi u ob'ektlar bilan dasturlashga imkon beradi. Dasturlarni tez va sifatli yozish hozirgi kunda katta ahamiyat kasb etmoda. Buni ta'minlash uchun ob'ektli dasturlash g'oyasi ilgari surildi. Huddi 70-chi yillar boshida strukturali dasturlash kabi, programmalarni hayotdagi jismlarni modellashtiruvchi ob'ektlat orqali tuzish dasturlash sohasida inqilob qildi.C++ dan tashqari boshqa ko‗p ob'ektli dasturlshga yo‗naltirilgan tillar paydo bo‗ldi. Shulardan eng ko‗zga tashlanadigani Xerox ning Palo Altoda joylashgan ilmiy-qidiruv markazida (PARC) tuzilgan Smalltalk dasturlash tilidir. Smalltalk da hamma narsa ob'ektlarga asoslangan. C++ esa gibrid tildir. Unda C ga o‗hshab strukturali dasturlash yoki yangicha, ob'ektlar bilan dasturlash mumkin. Yangicha deyishimiz ham nisbiydir. Ob'ektli dasturlash falsafasi paydo bo‗lganiga ham yigirma yildan oshayapti. C++ funksiya va ob'ektlarning juda boy kutubhonasiga ega. Yani C++ da dasturlashni o‗rganish ikki qismga bo‗linadi. Birinchisi bu C++ ni o‗zini o‗rganish, ikkinchisi esa C++ ning standart kutubhonasidagi tayyor ob'ekt/funksiyalarni qo‗llashni o‗rganishdir.
3.C++ tilida ma’lumotlar va ularning turlari. Oʻzgarmaslar. Oʻzgaruvchilar.
Asosiy terminologiya
Keling C++ ning asosiy termenologiyadiga nazar tashlaylik.
Xususiystlarni majmuasi.
Xususiyatlarni majmuasi, bu til anglay oladigan muhim belgilarni o‗rnatishdir. Xususiyat har qanday harfni, bir xonali sonni yoki boshqa belgini namoish etishi mumkin. C++ da ikkita xususiyatlar majmuasi mavjud. Ular:
(i) Ma‟lumot xususiyatlari
(ii) O„tish xususiyatlari / Amalni tugatish xususiyatlari.7
(i) Ma‟lumot xususiyatlari
Ma‘lumot matni ma‘lumot xususiyatlari orqali yaratiladi. Ular: Harflar A to Z, a to z va- (underscore)
Bir xonali sonlar 0 to 9
Maxsus belgilar Space + - * 1 A- % = ! & ( ) { I I I? " ;: \ # ' <> . <= >= @
(ii) O„tish xususiyatlari / Amalni tugatish xususiyatlari
Bu xususiyatlar vaqt bilan bog‟liq jarayonlarda qo„llaniladi.
C++ namoish etilmaydigan yoki yozilmaydigan belgilarga ham ega, masalan; line feed, form feed, tab etc.
Bu belgilar majmuasi o‗zidan keyin backslash ( \ )ni ikta belgi birga kelsa ham bitta belgi deb hisoblanadi. ergashtirgan holda namoyon bo‗ladi.
Masalan:
' \ n' Newline ` \ b Backspace \ \ Backslash
\ t Horizontal tab '\f ' Form feed \? Question mark
'\a1 Bell (beep) `\r ` Carriage return \N Octal constant (where N is an octal constant)
6J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (198-200betlar) 7J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (198-200 betlar)
' \ 0' Null I\" ' Double quote \ xN Hexadecimal constant (whereN is a hexadecimal constant) '\v' Vertical tab '\I I Single quote
Ramzlar yoki mantiqiy qismlar.
Dasturdagi eng kichkina yakka holda keladigan belgilar ramzlar yoki mantiqiy qismlar deyiladi. C++ ning quyidagi belgilari mavjud.
1. kalit so`zlar
2. Aniqlovchilar
3. O„zgarmaslar (literallar)
4. Punktuatorlar (ajratuvchilar)
5. Operatorlar
Barcha C ++ dasturlari belgilar, oq kataklar va tilning sintaksisi (gramatikasi) dan foyd alangan holda yoziladi. Ko‗pgina C++ belgilari C belgilari bilan o‗xshash, faqatgina ba‘zi qo‗shimchalar va kichik o‗zgartirishlar kiritilgan.
Eslatma: C ++ dasturidagi eng kichik individual birlik belgi yoki leksik birlik deb ataladi.
Kalit so„zlar / Zahiradagi so„zlar
Bu so‗zlar, mahsus topshiriqlarni bajarishda va normal identifikator nomlarini qo‗llashda himoyalangan. 4.2-jadval TURBO C++ ning kalit so‗zlarini ko‗rsatadi.8
5.2-jadval. Turbo C++da kalit so‗zlar
Asm
|
auto
|
break
|
case
|
cdecl
|
char
|
Class
|
const
|
continue
|
cs
|
default
|
delete
|
do
|
double
|
ds
|
else
|
enum
|
es
|
extern
|
export
|
far
|
fastcall
|
float
|
for
|
friend
|
goto
|
huge
|
if
|
inline
|
int
|
interrupt
|
loadds
|
long
|
near
|
new
|
operator
|
paskal
|
private
|
protected
|
public
|
register
|
return
|
saveregs
|
seg
|
short
|
signed
|
sizeof
|
ss
|
status
|
struct
|
switch
|
template
|
this
|
typedef
|
union
|
unsigned
|
virtual
|
void
|
volatile
|
while
|
Qo‗shimcha kalit so‗zlarga xususiyatlarini oshirish maqsadida kalit so‗zlar qo‗shilgan. Bu quyida berilgan:
bool static_cast const_cast dynamic_castnomlarni qo‗llagan holda.
Ba'zi amallar va standart kutubxonalar ikkita pastki chiziqni himoyalangan so‗zni belgilash uchun o‗z ichiga oladi. C++ dasturida bu uslub qo‗llanmasligi kerak.
Identifkatorlar
Bular dasturning asosiy qurilma bloklari bo‗lib sinflar, ob'ektlar, massivlar, funksiyalar va o‗zgaruvchilarga nom berish uchun qollaniladi.
C++ identifikatori quyidagi qoidalarga rioya qilish kerak :
(i) Bu harflar, raqamlar va pastki chiziqlar yig'indisdir.
(ii) birinchi belgi harf bo„lishi kerak, (pastki chiziq ham _ harf deb hisoblanadi). (iii) C ++ da katta va kichik harflar har xilqo„llaniladi.
(iv) Barcha belgilar muhim ahamiyatga ega. Ba'zi operatsion tizimlarda identifikatorlarning uzunligi cheklovlariturli versiyalardaturlicha farq qiladi.
(v) zahiradagi so„zlar identifikatorlar / o„zgaruvchilar nomlari sifatida qo„llanilmaydi.
Maqbul identifikatorlarga misollar:
num, sum, average, total-salary, big, SIZE, Value Nomaqbul identifikatorlar quydagilar : Continue (himoyalangan so‗z)
Marks (bo‗sh joy qo‗yish mumkin emas) B, pay (maxsus belgilar ‗,‘ qo‗llanilgan)
8J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (200- bet)
SUM va sum turli xil identifikator nomlaridir
Eslatma: pastki chiziq o‗zgaruvchan nomlarining qismlarini ko‗rsatish uchun qo‗llaniladi. Masalan, avg marks yoki katta harflar uslubida yozishingiz mumkin: avg Marks ikkinchi so‗zning birinchi qismida bosh harf ishlatilgan.
O„zgarmas miqdorlar (literallar)
Dastur amaliyoti vaqtida o‗zgartirilishi mumkin emas bo‗lgan elementlardir. Har bir C ++ dasturida ishlatilgan o‗zgarmas dasturning shakli va qiymatiga asoslangan holda belgilangan turi mavjud. Uning qiymati dastur kodlangan (yozilgan) vaqtida o‗rnatilgan va u dastur amaliyoti davomida mavjud qiymatini saqlab qoladi. C ++ tilida shakli va qiymatiga ko‗ra turli xil o‗zgarmas miqdorlar mavjud. Ular quyida berilgan:
(i) raqamli o‗zgarmas miqdorlar (butun sonli o‗zgarmas miqdor va o‗zgaruvchan nuqtaning o‗zgarmas miqdori).
(ii) belgili o‗zgarmas miqdor.
(iii) bog‘langan o‗zgarmas miqdorlar.
Bu o‗zgarmas miqdorlar haqida keyinroq ma‘lumot beriladi.9 Puntuatorlar (ajratuvchilar)
C++da quyidagi belgilardan ajratuvchi sifatida foydalaniladi:
( ) { } [ ]; : * = #
Qavslar ( ) chaqiruv funksiyalari va parameter funksiyalari uchun ishlatiladi. Bular guruh ifodalari va ajratilgan shart hisobotlaridir.
Sistemalar { } bular oson yoki murakkab amaliyotlarni o‗z ichiga oladigan kodlash uchun qo‗llaniladi
Qavslar [ ] oddiy va ko‗p o‗lchovli massivlarning subscriptlarini yopish uchun qo‗llaniladi. Vergul, bu funksiyadagi argument (parametrlar) ro‗yxatini ajratish uchun qo‗llaniladi. Nuqtali vergul ; bu amaliyot holatida terminator holatini qo‗llash uchun ishlatiladi. Ikki nuqta : bu belgilangan hisobot holatida ishlatiladi.
Yulduz * Bu ko‗rsatgich qo‗llanmasi yoki ko‗paytirish operatori uchun ishlatiladi.
Ko‗p nuqta ... bular miqdorlarning o‗zgaruvchan raqamini o‗z ichiga oluvchi funksiya ko‗rsatmalarining rasmiy parametr jadvallarida ishlatiladi.
Teng belgisi = bu topshiriq va o‗zgaruvchilarning initilizatsiyasida qo‗llaniladi. Panjara belgisi # Bu ko‗rsatmalar preprotsessorlari uchun qo‗llaniladi.
4.C++ tilida ifodalar. Operatorlar.
Operatorlar
Bular shartdagi o‗zgaruvchilar va boshqa obyektlar kiritilganda bazi hisobotlarni bajaradigan belgilardir. C++ operatorlarga boydir. U C dagi barcha operatorlar va bazi qo‗shimcha operatorlarni o‗z ichiga oladi. Yagona operatorlar bu amaliyotda faqat bitta operanddan foydalanuvchi operatordir. Ikkilik operator esa amaliyot uchun ikkita operandni talab qiluvchi operatordir. Uchlik operator (shartli operator) uchta qiymatni bajaradi. Masalan,
- (manfiy birlik )
++ (kattakashtirish yoki ko`paytirish operatori)
- - (kamaytirish operatori)
sizeof
Bular birlik operatorlar. Ikkilik operatorlarning ba`zilari quyida berilgan : +, -, *, /, %
Uchlik operatori (shartli operator) ?:10
Eslatma: C++da ko`rsatkichli operatorlar tushurib qoldirilgan
Ma`lumot turlari haqida tushuncha
9J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (200-201 betlar) 10J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (201-202 betlar)
Dasturlash tilida o`zgaruvchi o`zida saqlashi mumkin bo`lgan ma`lumotlar har xilligiga ma`lumot turli deyiladi. Ma`lumot turlarini bir biridan farqlovchi ikkita asosiy sabablar :
(а) compiler yordamida munosib ichki namoyishdan foydalanishi jihatidan
(б) dasturchi tomonidan har bir tur uchun munosib operatordan foydalanishi jihatidan quyidagi rasmda ma`lumot turlarining turli kategoriyalarini ko`rsatadi:
C++ ma‘lumot
Foydanuvchini farqlovchi turlari Structure Union Class
enumeration
Integral turi
int char
Built-in turi Hosil qilingan
tur
Array
Function
Pointer
Bo‗sh Sezuvchi nuqtali
float doub
Bu yerda, biz asosiy ma'lumotlar turlarini muhokama qilamiz.
Asosiy O`zgaruvchini yozganga qaraganda ikki baravar ko`proq hotirani band etadi. O`zgaruvchi turi juda kichik yoki aniqlik yetarli bo`lmagan holatda qo`llaniladi.
Ikkilik ma`lumot turi o`zgaruvchi ma`lumot turiga qaraganda ancha kattaroq va sekinroqdir. Shunday ekan C++ dasturida qiymatlarni saqlash uchun eng kichik o`zgaruvchi turini qo`llash lozim.
3. Bo`shliq ma`lumot turi
Bo`shliq ma'lumotlar turi qiymatlarning bo`sh to`plamlariga asoslangan. Uning ikkita asosiy maqsadi mavjud :
(i) funksiya qiymatni qaytarmasligiga ishora qilad.
(ii) umumiy ko`rsatkichni aniqlaydi
Bo`shliqning hech qanday obyekt turi ko`rsatilmaydi.
Masalan C++ funksiyasini quyidagicha ko`rsatishimiz mumkin : #include< iostream.h>
Void main ()
{
«««
«««// body of function «««
Bu yerda main () funksiyasi hech qanday foydali qiymatini qaytarmaydi.
O„zgarmaslar
Bu toifadagi ma‘lumotlarning qiymatlari dastur bajarilishi mobaynida mutlaqo o‗zgarmaydi. C++ tilida o‗zgarmaslarning bir qancha turlari mavjud:
(i) Butun o‗zgarmaslar
(ii) Belgili o‗zgarmaslar (iii) Haqiqiy o‗zgarmaslar
(iv) Qatorli o‗zgarmaslar.11
(i) Butun O„zgarmaslar
Bular ixtiyoriy kasr qismlarsiz butun sonlardir. Butun o‗zgarmaslar quyidagi qoidalar asosida aniqlanadi:
(a) eng kamida bitta raqamdan iborat bo‗lishi
(b) o‗nlik kasrlarning ishtirok etmasligi
11J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (203-204 betlar)
(c) + yoki - belgisidan iborat bo‗lishi mumkinligi
(d) ishora belgisi ishtirok etmaganda son musbat deb qaralishi
(e) vergul va probellar qatnashmasligi lozim
C++ tilida butun o‗zgarmaslarning uch turi mavjud: O‗nlik (base or radix 10)
Sakkizlik (base or radix 8) O‗n oltilik (base or radix 16)
O„nlik butun o„zgarmaslar. Bular 0 (nol raqami) dan boshlanmagan raqamlar ketma-ketligidan tashkil topadi. Masalan, 1024, 3313, +275, - 12 va hk.
Butun o„zgarmaslar diapozoni. Kompyuter xotirasi so‗zlar deb nomlangan yacheykalar to‗plamidan tashkil topadi. So‗zdagi bitlar soni so‗z uzunligi deyiladi. Odatda so‗z uzunligi 16 bitdan iborat bo‗ladi (ba‘zilari 32 va undan yuqori bo‗lishi mumkin). Misol uchun so‗z uzunligi n bo‗lsin. U holda butun son diapozoni -2n-1 dan 2n-1-1 gacha bo‗ladi.
Agar n=16 bo‗lsa, butun son sohasi -216-1 dan 216-1-1 gacha bo‗ladi ya‘ni, -32768 dan 32767 gacha.
Agar siz -32768 dan kichkina son olsangiz, u holda qiymat yetishmaslik oqibatida, 32767 dan katta son olsangiz, qiymatning ortib ketishi natijasida xatolik kelib chiqadi.
Sakkizlik butun o„zgarmaslar. Bular 0 (nol raqami) dan boshlangan raqamlar ketma-ketligidir. Masalan, o‗nlik butun 14 soni sakkizlik butun son sifatida 016 korinishida yoziladi (1410=168 kabi).
O„n oltilik butun o„zgarmaslar. Bular0x yoki0X dan boshlangan raqamlar ketma-ketligidir. Masalan, o‗nlik butun 14 soni o‗noltilik butun son sifatida 0XE korinishida yoziladi (1410=E16 kabi). L yoki l, U yoki u suffiksi long va insigned lar bilan ifodalanadigan o‗zgarmaslarni yozishga imkon beradi.
(ii) Belgili O„zgarmaslar
Belgili o‗zgarmaslar bittalik qo‗shtirnoq bilan yozilgan bitta belgini ifodalaydi.
Masalan, 'A', ' ', '\n' va hk. C++ da belgili o‗zgarmaslarni ifodalash qoidalari quyidagicha:
C++ da belgili o„zgarmaslar bitta simvolga ega bo„lishi va bittalik qo„shtirnoqqa olib yozilishi lozim.12
C++ da belgilar uchun ma‘lumotlar turida belgili o‗zgarmaslar char ma‘lumotlar turiga ega. Yagona belgili o‗zgarmas qiymati kompyuter simvollar to‗plami bo‗yicha simvol nomeriga ega. Masalan, 'A' ning qiymati 65 (ASCII dagi 'A' ning qiymati), 'a' ning qiymati 97 va '0' ning qiymati 48 ga teng.
C++ da butun qiymatlar turida ko‗p belgili o‗zgarmaslar int turiga ega bo‗ladi. Ko‗p belgili o‗zgarmaslar qiymati amalga oshiriladigan-bog‘langan hisoblanadi.
Teskari kursiv chiziqli o„zgarmaslar. Bular bajarilish vaqtida izohlanadi. Bu simvollar qiymatlari amalga oshiriladigan-aniqlanadigan hisoblanadi.
C++ da chop qilinmaydigan yoki ekranga chiqmaydigan ba‘zi simvollarni, masalan, chiziq, shakl belgilar, tab va hk.lar ishlatadi. Bu belgilarning har biri yaona belgini bildiruvchi ma‘lum unikal qiymatga ega. Har bir Escape belgilar ketma-ketligi teskari kursiv chiziq (backslash) (\) belgisi bilan boshlanadi, ammo ular bitta belgi hisoblanadi.
6.1-jadvalda ba‘zi Escape belgilar ketma-ketligi keltirilgan:
6.1-jadval. Escape belgilar ketma-ketligi
Escape
|
Ma‟nosi
|
Natijaning bajarilish vaqti
|
\0 String qatorining oxiri Null
\ n Qator oxiri Boshqaruv keyingi qatorgacha olinadi
\r Qatorgaqaytish Boshqaruv keyingi paragrafgacha olinadi
\ f Sahifaga o‗tish Boshqaruv keyingi mantiqiy sahifagacha olinadi
\v vertikal tabulyatsiya
Boshqaruv keyingi pozitsiyasigacha olinadi
vertikal tabulyatsiya
\b Backspace Boshqaruv joriy qatorning oldingi pozitsiyasigacha
12J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (204-205 betlar)
olinadi
\ \ Backslash Backslash belgisini qaytaradi
\a Ovoz Ovoz signalini ta‘minlaydi
\' Bittalik qo‗shtirnoq (apostrof) ' - bittalik qo‗shtirnoq (apostrof) ni chiqarish
\" Qo‗shtirnoq " - qo‗shtirnoq belgisini ni chiqarish
\? So‗roq belgisi ? - so‗roq belgisini chiqarish
\On Sakkizlik son Sonni sakkizlik sistemasida tasvirlash
\xHn O‗n oltilik son Sonni o‗n oltilik sistemasida tasvirlash
Shuningdek, agar chiqarish ifodasida belgi backslash (\) belgisidan keyin kelsa, biz hosil bo‗ladigan natijada ham huddi shu belgini ko‗rishimiz mumkin.
Masalan, cout <<'\ J'; ifodasi natijasida ekranda J belgisi hosil bo‗ladi.13
Bu yerda cout ('see-out' kabi talaffuz qilinadi) identifikatori C++ da standart chiquvchi oqim (ekran) uchun ishlatiladi. <Eslatma: Escape belgilar ketma-ketligi bitta belgini ifodalaydi va ASCII jadvalida bir baytni ifodalaydi.
(iii) Suzuvchi Nuqtali O„zgarmaslar (Haqiqiy O„zgarmaslar)
Ular kasr qismga ega bo‗ladi. Ixtiyoriy kasr ko‗rinishida yoki eksponensial shaklida yozilishi mumkin. Haqiqiy o‗zgarmaslar kasr ko‗rinishida quyidagi qoidalar asosida yoziladi:
(a) Kasr ko„rinishidagi haqiqiqy o„zgarmaslar o„nlik nuqtadan oldin va keyin kamida bittadan raqamga ega bo„lishi lozim.
(b) + yoki - belgisidan iborat bo„lishi mumkin.
(c) Ishora belgisi ishtirok etmaganda son musbat deb qaraladi.
(d) Vergul va probellar qatnashmasligi lozim.
Masalan, 12.5, -18.3, -0.0025
Eksponent ko‗rinish ikkita qismdan iborat: mantissa va exponent. Bu ko‗rinish odatda o‗zgarmas juda katta yoki juda kichik son bo‗ganda foydalaniladi. Ammo undan boshqa haqiqiy o‗zgarmaslarni yozishda foydalanish ham mumkin.
Eksponent ko‗rinishda 'e' dan oldingi qismimantissa va 'e' dan keyingi qismi mantissa exponent deyiladi. Haqiqiy o‗zgarmaslar eksponent ko‗rinishda quyidagilar asosida yoziladi:
(a) Mantissa va exponent 'e' belgisi orqali ajratiladi.
(b) Mantissa butun son yoki mos haqiqiy o„zgarmas bo„lishi lozim.
(c) Mantissa + yoki-ishorali b‟lishi m umkin.
(d) Ishora belgisi ishtirok etmaganda musbat deb qaraladi.
(e) Eksponent kamida bitta butun raqamdan iborat bo„lishi kerak (musbat yoki manfiy). Odatda ishora + deb qaraladi.
Masalan, 2.4e-5, -3.5e-5, -0.6e+5
Haqiqiy o‗zgarmasning eksponent shaklidagi chegarasi 16 bitlik SHKlar uchun 3.4e38 dan 3.4e38 gacha oraliqda bo‗ladi. Xotiradan 4 bayt joy egalaydi.
(iv) Qatorli O„zgarmaslar
“Ko„p belgili” o„zgarmaslar qatorli o„zgarmaslar deb ham yurtiladi. Ular qo„shtirnoq ichiga olingan nol yoki ko„p simvollarni ifodalaydi. Masalan, quyidagi qator:14
"JBD" so‗zi 4 bayt joy egallaydi, chunki qator oxiriga maxsus '\0' simvoli qo‗shiladi. Shuni qayd etish lozimki, '\0' yagona simvol hisoblanadi. Shunday qilib "JBD" xotirada "JBD\0" kabi ifodalanadi, bunda terminator simvoli qator oxirida saqlanadi.
13J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (205-206 betlar) 14J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (207- bet)
Eslatma: Ko„p belgili o„zgarmaslar butun (int) turi kabi alohida ko„rib chiqiladi va bu o„zgarmaslarning qiymatlari ishlab chiqarilishi (versiyasi) ga bog‟liq bo„ladi. Belgili turdagi massivlar qator belgilarini (elementlarini) saqlashga xizmat qiladi. Massiv statik bir turga mansub elementlar to„plami bo„lib, bu haqda to„qqizinchi - Massivlar va Qatorlar bobida batafsil yoritilgan.
Belgili O‗zgarmaslar
Belgili o‗zgarmas nomi va o‗zgaruvchiga ega bo‗lgan o‗zgarmasdir. O‗zgaruvchidan farqli ravishda o‗zgarmas initsializatsiya qilingandan (boshlang‘ich qiymat berilgandan) so‗ng uning qiymatini o‗zgartirib bo‗lmaydi. C++ da belgili o‗zgaruvchilarni ikki usulda hosil qilish mumkin:
1. Const klassifikatoridan foydalangan holda
C++ dao‗zgarmas ifodada const so‗zidan foydalanish mumkin. Masalan, const int SlZE =20;
char string[SIZE];
Agar biz faqatgina const modikatoridan foydalansak, odatda int turi o‗rnatiladi. Masalan, const SlZE =20;
yoki
const int SlZE = 20;
Bu usul sizning dastur kodingizni oson yozishda turli buzulishlar va qo‗llab-quvvatlashda bir qancha afvazlliklarga ega. Asosiy farq shundaki, o‗zgarmas turga ega, demak kompilyator ko‗rsatgan mos turungizdan foydalanishi mumkin bo‗ladi.
Eslatma: Belgili o„zgarmaslar dastur bajarilish vaqtida o„zgarmaydi. Agar siz zarurat sezsangiz SIZE ni o„zgartirishingiz, masalan, dastur kodini o„zgartirishingiz va qayta kompilyatsiya qilishingiz mumkin.
2. Enum kalit so„zi yordamida aniqlanadigan butun o„zgarmaslar to„plami
C++ da siz butun o‗zgarmaslardan sanashda foydalanishingiz mumkin, masalan, enum {red, blue, green, white, black);
Bu ifodadagi red, blue, green, white va black lar o‗zgarmas konstanta sifatida qaralib, mos ravishda 0, 1, 2, 3 va 4 qiymatlarga teng. Bu quyidagiga ekvivalent:
const red = 0;15
const blue = 1; const green = 2; const white = 3; const black = 4;
Har bir sanab o‗tiluvchi o‗zgarmas butun qiymatga ega. Agar siz birinchi o‗zgarmas qiymatini ko‗rsatmagan bo‗lsangiz, u avtomatik 0 qiymatga ega bo‗ladi, qolganlari shu joydan o‗sib boradi. Ixtiyoriy o‗zgarmas aniq qiymat bilan initsializatsiya qilinishi mumkin, initsializatsiya qilinmagan o‗zgarmaslar qiymati o‗zidan oldingi o‗zgarmas qiymatidan bitta katta sonni qabul qiladi. Masalan,
enum {red = 100, blue, green = 500, white, black = 700);
Bu e‘lon qilishdan so‗ng red qiymati 100, blue qiymati 101, green qiymati 500, white qiymati 501 va black qiymati 700 ga teng bo‗ladi.
O‗zgaruvchilarni e‘lon qilish/lnitsializatsiya qilish
O„zgaruvchi xotirada nomlangan pzoitsiya bo„lib, dasturda uning qiymatini o„zgartirish mumkin bo„ladi. Bu barcha til uchun ham amal qiladi. C++ ning barcha o„zgaruvchilari foydalanishdan oldin albatta e‟lon qilinishi zarur. Qiymatlar o„zgaruvchilarga o„zlashtiriladi va uni dastur bajarilishi davomida o„zgartirish mumkin.O‗zgaruvchi nomi do‗stona bo‗lishi lozim. Masalan, agar ikkita sonning yig‘indisini hisoblash kerak bo‗lsa, o‗zgaruvchini 'sum' deb nomlash maqsadga muvofiq, qandaydir 'Zangura' yoki boshqa topishmoq (tushunish qiyin bo‗lgan) so‗z bilan emas.
O‗zgaruvchiga o‗zlashtirilgan yoki kiritilgan qiymat xotirada ajratilgan joyda saqlanadi. Biz o‗zgaruvchilarni char, int va float so‗zlaridan foydalanib hosil qilishimiz mumkin. O‗zgaruvchilar nom va ma‘lumot turi yordamida aniqlanadi.
15J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (208- bet)
Masalan,
char ch; // ch - belgili o‗zgaruvchi int sum; // sum - butun o‗zgaruvchi
float salary; // salary - suzuvchi nuqtali o‗zgaruvchi O‗zlashtirish ifodasi
O„zlashtirish ifodasi o„zgaruvchiga yoki o„zgarmasga qiymat o„zlashtirish uchun foydalaniladi.
Masalan,
int x = 50;
float a = 30.6;16
const float PI = 3.141 59; const char ch = 'A';
Tenglik (=) belgisi o‗ng tomondagi o‗zgaruvchi yoki o‗zgarmas qiymatining chap tomondagi o‗zgaruvchi yoki o‗zgarmasga o‗zlashtirilishini ta‘minlaydi. O‗zlashtirish ifodasining umumiy ko‗rinishi quyidagicha:
lvalue = rvalue;
Bu yerda '=' belgisi o‗zlashtirish operatori deyiladi. C++ da o‗zlashtirishlar birgalikda ketma-ket, ya‘ni seriyali ravishdakelishi mumkin. Bu holat bitta qiymatning o‗zini bir nechtaga o‗zlashtirishda qo‗l keladi. Masalan,
int i, j, k;
i = j = k = 0; yoki(i = (j = (k = 0)));
Bu yerda avvalo, 0 qiymat k ga, so‗ng k ning qiymati j ga, so‗ng j ning qiymati i ga o‗zlashtiriladi. Doimo esda tutish kerakki, bunday ketma-ket o‗zlashtirishdan o‗zgaruvhilarni e‘lon qilish vaqtida foydalanib bo‗lmaydi. Ammo biz quyidagicha yozishimiz mumkin:
int i = 0, j = 0, k = 0;
TURBO C++ ning 3.0 versiyasida ko‗pi bilan 70 ta ketma-ket o‗zlashtirish mumkin. Barcha ko‗p o‗zlashtirishli ifodada qatnashgan barcha o‗zgaruvchilar oldindan e‘lon qilingan bo‗lishi lozim. TURBO C++ ning 3.0 versiyasida 70 tadan ortiq ketma-ket o‗zlashtirish yozishga harakat qilib ko‗rganimizda ekranda quyidagi xatolik xabari paydo bo‗ladi:
Out of memory
C++ da o‗zlashtirishning boshqa ichma-ich o‗zlashtirish usuli mavjud. Masalan, int i, j;
i = (j =20) * 4;
Bu yerda (j = 20)ichma-ich o‗zlashtirishni ifodalaydi. Avvalo 20 qiymat j ga o‗zlashtiriladi va keyin
20 * 4 = 80 natija i ga o‗zlashtiriladi. Bu o‗zlashtirish quyidagi ikki o‗zlashtirishga ekvivalent: j = 20;
i = j * 4 ;
Eslatma: Hech qachon o„zgaruvchiga vergul qatnashgan qiymatni o„zlashtirib bo„lmaydi.
Tur Modifikatori
C++ da asosiy ma‘lumot turlari (voiddan boshqa) bizning talabimizga mos ravishda o‗zgartirilishi mumkin.17
Signed, unsigned, long va boshqa kalit so‗zlaridanturlani aniqlashda foydalanish mumkin. C++ da ma‘lumot turlarini tasvirlash mashinaga bog‘iq bo‗ladi. 6.2-jadvalda 16-bitlk kompyuter uchun ma‘lumot turlari va ularning o‗zgartirilganlari keltirilgan.
6.2-jadval. Ma‘lumot turlari va ularning o‗zgartirilganlari
Tur
|
Chegarasi
|
Baytlar
|
Tasvirlanishi
|
Boshi
|
Oxiri
|
char
|
-128
|
127
|
1
|
belgili
|
signed char
|
- 128
|
127
|
1
|
belgili
|
unsigned char
|
0
|
255
|
1
|
belgili
|
16J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (208-209 betlar) 17J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (210-211 betlar)
int
|
- 32,768
|
32,767
|
2
|
butun sonlar
|
unsigned int
|
0
|
65,536
|
2
|
butun sonlar
|
long int
|
-2,147,483,648
|
2,147,483,647
|
4
|
butun sonlar
|
unsigned long int
|
0
|
4,294,967,295
|
4
|
butun sonlar
|
float
|
-3.4 e 38
|
3.4 e 38
|
4
|
kasrli sonlar
|
double
|
-1.7 e 308
|
1.7 e 308
|
8
|
kasrli sonlar
|
long double
|
-3.4 e 4932
|
3.4 e 4932
|
10
|
kasrli sonlar
|
Signed modifikator turi char va int ma‘lumot turlariga mos keladi. Unda shu so‗z qatnashmaganda ham xuddi shu tur effektlari mavjud. Int va signed int turlari farqlanmaydi.
Unsigned modifikator turi char va int ma‘lumot turlariga mos keladi. U ushbu ma‘lumot turlarining faqatgina musbat qiymatlarini oladi. Unsigned modifikator turi o‗zgaruvchilar diapazonini oshirish va manfiy hosil bo‗lmaydiganlar, masalan, talabalar soni, sportdagi gollar yoki yutuqlar soni kabilarni tasvirlash maqsadida foydalaniladi.
Ba‘zida unsigned qo‗shilish suzuvchi nuqtali turlarda imkoniyat berishi mumkin (unsigned double kabi). Shunday bo‗lsada, bu sizning dasturingizni sekinlashtiradi va odatda kuchsizlantiradi. Long modifikator turi char, int va double ma‘lumot turlariga mos keladi. U ham o‗zgaruvchilar qiymatlari diapazonini oshiradi.
Modifikatorlar turi birgalikda ishlatilishi ham mumkin. Quyidagi misollar sizga modifikatorlar turi haqida tushuncha berishi mumkin.
unsigned int no_of_students; unsigned long int factorial; long double x;18
5.Tarkibiy va boʻsh operator
Arifmetik operatorlar
Arifmetik operatorlararifmetik ifodalarni bajarish uchun ishlatiladi. C++ tilida foydalaniladigan mavjud arifmetik operatorlar 7.1-jadvalda keltirilgan:
7.1-jadval. Arifmetik operatorlar
- Ayirish a-b
+ Qo‗shish a+b
Ko‗paytirish a*b
/ Bo‗lish a/b
% Modul yoki Qoldiq a%b
Masalan, mos ravishda 15 va 7 qiymatlarga ega bo‗lgan ikkita butun qiymatli a va b o‗zgaruvchilar
olaylik. Quyidagi jadvalda turli amallar natijalari olingan:19
Ifoda Natija
a-b 8
a+b 22
a*b 105
a/b 2
a%b 1
Arifmetik operatorlardan foydalanishda quyidagi jihatlarni yodda tuting:
( i ) Butun sonni boshqa butun songa bo„lganda natija doimo butun chiqadi. Masalan, 25/4 ning qiymati
6 ga teng(o‗nlik kasr qismi tashlab yuboriladi).
(ii) Agar operandlardan biri yoki har ikkisi bo„lish amali qatnashganda suzuvchi nuqtali qiymatga ega bo„lsa, natija har doim suzuvchi nuqtali son bo„ladi. Masalan, 25/2.0 ning qiymati 12.5 bo‗ladi.
18J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (212- bet) 19J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (214- bet)
*
(iii) Qoldiqni hosil qiluvchi % - Modulyoki Qoldiq operatori butun sonlar bilan ishlaydi. Masalan, 33% 7 ning qiymati 5. Biz bu operatordan suzuvchi nuqtali sonlarda foydalana olmaymiz.
(iv) Qoldiqni hosil qiluvchi % operatori ikkala operandning ham butun bo„lishini va ikkinchi
operandning noldan farqli bo„lishini talab qiladi.
(v) Bo„lish operatori ikkinchi operandning noldan farqli bo„lishini talab qiladi, shunday bo„lsada operandlar butun bo„lmasligi lozim.
C++ da operandlar butun qiymat, suzuvchi nuqtali son yoki belgi bo‗lishi mumkin. Belgili o‗zgarmaslar ASCII belgilar jadvali bo‗yicha butun qiymatlar bilan tasvirlanadi. Keling, cvar1 va cvar2 lar mos ravishda a va A simvollarga ega bo‗lgan belgili turdagi ozgaruvchilar bo‗lsin. Bir qancha arifmetik ifodalarda shu o‗zgaruvchilardan foydalanilgan. Natijalar quyidagicha:
Ifoda Natija
Char1 97
Char2 65
Char1-Char2 32
Char1+Char2-5 157
Char1+Char2+'5' 215
Qayd etish kerakki, ASCII simvollar jadvalida a belgisi 97, A belgisi 65 va 5 belgisi 53 sifatida kodlangan.
Agar ixtiyoriy operandlar manfiy qiymatga ega bo‗lsa, u holdaalgebraning odatiy qoidalari ixtiyoriy arifmetik amallarni bajarishga taalluqli bo‗ladi. Noldan farqli butun songa bo‗lishda natija sifatida faqat butun qism olinadi, ya‘ni natija doimo haqiqiy bo‗linmadan kichik bo‗ladi.
Operatorlarning ustunlik darajasini qavslardan foydalangan holda o„zgartirish mumkin. Biz ichkima-ichki qavslardan foydalanishimiz ham mumkin, ya‘ni bir juft qavs ichida boshqasini yozish mumkin. Bu holda ichki amallar birinchi bajariladi, so‗ng keyingi ichkisi va hk. Ba‘zida qavslardan foydalanish ifodani tushunishni osonlashtirish uchun juda yaxshi g‘oya hisoblanadi, hattoki qavslarga ehtiyoj sezmasak ham.
Arifmetik ifodalarda amallarni bajarish ustunlik darajasiga asosan bajariladi. Avvalo eng yuqori ustunlik darajasiga ega bo‗lgan amal bajariladi. Ko‗paytirish, bo‗lish va qoldiq amallari qo‗shish va ayirishga nisbatan yuqori ustunlikka ega. Ustunlik darajasi haqida shu bobda keyinroq berilgan.20
Eslatma: C dagi kabi C++ da darajaga ko„tarish amali mavjud emas. Shunday bo„lsada, math.h sarlavha faylidagi pow() kutubxona funksiyai darajaga ko„tarish amalini bajaradi.
Unar Operator: Minus (-)
Bitta operand yoki ma‘lumot birligini talab qiluvchi operator unar operator deyiladi. C++ arifmetik ifodalarida unar minus (-), ++ (inkrement) va --(dekrement) operatorlari joriy etilgan. Binar operatorlar bilan solishtirganda unar operatorlar o‗ng qo‗shiluvchili, ya‘ni o‗ndan chapga baholanuvchi hisoblanadi.
Unar minus raqamli qiymat, o‗zgaruvchi yoki ifoda oldida keladi. Masalan,
(i) -13 (ii) -336 (iii) -a (iv) -(x * y) (v) 5 * (- (x * y))
Unar minus natijasida operand (o‗zgarmas yoki o‗zgaruvchi yoki ifoda) qarama-qarshi ishoraga ega bo‗ladi.
Masalan,
int result, i, j; i = 10;
j = 25;
result = -(i + j)/5;
cout<< "Result = " <Natija Result = -7 shaklida bo‗ladi. Unar minus shunday bajariladi. Inkrement and Dekrement Operatorlari
C++ da boshqa unar operatorlar ++ (Inkrement operator) va -- (Dekrement operator) lardir. Ular faqat bitta operandga qo‗llaniladi (o‗zgarmas yoki o‗zgaruvchi). Inkrement operator (++). U o‗zgaruvchi qiymatini 1 qiymatga oshiradi. Masalan,
20J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (215- 216 betдфк)
int i,j; i = 10; j = i++;
cout<Bu yerda natijada 11 10 shaklida bo‗ladi. Dastlab j ga i o‗zlashtiriladi va keyin i ning qiymati 1 ga oshiriladi, ya‘ni, keyin-qo‗shish (post-increment) bajarilmoqda. Bu jarayon 7.1-rasmda ko‗rsatilgan.21 Postfiks:
j = i ++;
1.
2.
3.
j i
- 10
10 = 10
10 11
O‗zgaruvchilar initsalizatsiyasi
Dastlab bu bajariladi
Keyin qiymat oshiriladi
45 -rasm. Inkrement operatori postfiks ko‗rinishida
Agar bizda
int i,j;
i = 20; j = ++i;
cout<ifodasi bo‗lsa, natija 21 21 ko‗rinishida bo‗ladi. Dastlab i ning qiymati1 ga oshadi va keyin o‗zlashtirish bajariladi, ya‘ni, i avval-oshirilmoqda(pre-increment). Bu jarayon 7.2-rasmda ifoda etilgan. Prefiks:
j = ++ i;
1.
2.
3.
j i
- 20
– = 21
21 21
O‗zgaruvchilar initsalizatsiyasi
Dastlab qiymat oshiriladi
Keyin bu bajariladi
46-rasm. Inkrement operatori prefiks ko‗rinishida
Quyidagi uchta ifoda o‗zaro ekvivalentdir: i = i+1;
i ++;
++ i;
1-misol. Quyidagi dastur qanday natijaga ega bo„ladi? #include< iostream.h >
void main ( )
{
int x=5, y;
y=x++ + ++x; cout << y;
}22
21J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (216-217betlar)
22J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (217- bet)
Natija. Dastur natijasida quyidagi hosil bo‗ladi. 12
Turbo C++ da dastlab ++x hisoblanganligi uchun x ning qiymati oltiga teng bo‗ladi. Bu qiymat ifodadagi barcha x lar uchun qo‗llaniladi va yig‘indi natijasida 12 hosil bo‗ladi. Keyn postfix x++ natijasida x ning qiymati 7 ga teng bo‗ladi. Xullas, y natijasi 12 bo‗ladi.
Dekrement operator (--). U o‗zgaruvchi qiymatini 1 qiymatga kamaytiradi. Masalan,
int i,j;
i = 10; j = i --;
cout<Bu yerda natijada 9 10 shaklida bo‗ladi. Dastlab j ga i o‗zlashtiriladi va keyin i ning qiymati 1 ga kamayadi, ya‘ni, keyin-kamayish (post-decrement) bajarilmoqda. Bu jarayon 7.3-rasmda ko‗rsatilgan.
j = i --;
1.
2.
3.
j i
- 10
10 = 10
10 9
O‗zgaruvchilar initsalizatsiyasi
Dastlab bu bajariladi
Keyin qiymat kamayadi
47 -rasm. Dekrement operatori postfiks ko‗rinishida
Postfiks:
Agar bizda int i,j;
i = 20; j = -- i;
cout<ifodasi bo‗lsa, natija 19 19 ko‗rinishida bo‗ladi. Dastlab i ning qiymati1 ga kamayadi va keyin o‗zlashtirish bajariladi, ya‘ni, i avval-kamaymoqda(pre-decrement). Bu jarayon 7.4-rasmda ifoda etilgan.23
Prefiks:
j = -- i;
j i
1. - 20 O‗zgaruvchilar initsalizatsiyasi
2. – = 19 Dastlab qiymat kamayadi
3. 19 19 Keyin bu bajariladi
48-rasm. Dekrement operatori prefiks ko‗rinishida
Quyidagi uchta ifoda o‗zaro ekvivalentdir: i = i-1;
i --;
-- i;
23J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (218- bet)
Yuqoridagi muhokamadan kuzatishimiz mumkinki, ++ va -- operatorlarining prefiks va postfiks ko‗rinishlari o‗rtasida farq bor. Kamaytirish yoki dekrement operatori o‗zining operandidan oldin kelganda kamayish yoki dekrement amali ifodada operand qiymatidan foydalanishdan oldin bajariladi. Agar bu operator o‗z operandidan keyin kelsa, ifodada operand qiymati kamayish yoki dekrement
amalidan oldin qo‗llaniladi.
Eslatma: 1. Aksariyat C++ kompilyatorlari inkrement va dekrement amallarini bu amallarga teng kuchli o„zlashtirish ifodasidan foydalanishdan ko„ra juda tez, samarali bajaruvchi ob‟ekt kodiga ega. Shu sababdan ham, agar imkon topsangiz inkrement va dekrement amallaridan foydalanishingiz maqsadga muvofiq.
2. C++ asoschisi Bern Stroustrup o„zining C++ dasturlash tili kitobida postfiks
operatori prefiks operatoriga nisbatan yuqori ustunlik darajasiga ega ekanligini eslatadi. Ammo Turbo C++ aksincha, ya‟ni prefiks operatori postfiks operatoriga nisbatan yuqori ustunlik darajasini ta‟minladi.
2-misol. Quyidagi dastur natijasini toping. #include < iostream.h >
void main( )
{
int x=5, y=5; cout<cout<Natija. Dastur bajarilganda quyidagi hosil bo‗ladi: 5, 7, 6, 624
3-misol. Quyidagi dastur natijasini yozing. #include< iostream.h >
void main( )
{
int x=5, y=5; cout << x--; cout << ","; cout <<--x; cout << ",";
cout<Natija. Dastur bajarilganda quyidagi hosil bo‗ladi: 5, 3, 4, 4
5.Ma‘lumotlarni kiritish va chiqarish operatorlari (protseduralari).
Boshqa ba‟zi operatorlar
Keling, bir qancha foydali operatorlarni ko‗rib chiqamiz:
sizeof Kompilyatsiya-Vaqt Operatori
sizeof unar kompilyatsiya-vaqt operatori bo‗lib, biriktirilgan o‗zgaruvchi yoki qavsga olingan tur-tavsif o‗lchamini baytlarda qaytaradi. Masalan, butun turi 2 bayt, double turi 8 bayt hisoblanadi. int i;
24J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (218-219betlar)
cout<<"Int o‗zgaruvchi o‗lchami: " << sizeof i;
cout<<"\nDouble o‗zgaruvchilar o‗lchami: "<< sizeof(doub1e);
Yuqoridagi kod natijasida alohida qatorlarda 2 va 8 sonlari hosil bo‗ladi. sizeof dan foydalanishda tur nomi qavs ichiga olingan bo‗lishi lozim, ammo o‗zgaruvchilar nomi uchun shart (zarur) emas. sizeof birinchi navbatda fundamental turlar o‗lchami bilan bog‘liq xcham kodni hosil qilishga yordam beradi.25
Shuni esda tutish lozimki, sizeof kompilyatsiya vaqtidahisoblanadi va hisoblash natijasi sizning dasturingiz ichida o‗zgarmas sifatida qatnashadi.
Eslatma:sizeof operatori prefiks inkrement/dekrement operatorlari bilan bir xil ustunlik darajasiga ega .
Vergul Operatori
Vergul Operatori bir qancha ifodalar qatoridir. Bergul operatorining chap tomoni har doim void kabi hisoblanadi. Bu esa ifodaning o‗ng tomoni umumiy vergul-ajratilgan ifoda qiymatidan tashkil topishini bildiradi. Masalan,
y = (x = 5, x + 2);
Dastlab x ga 5 qiymatni o‗zlashtirish, keyin y ga 7 qiymatni o‗zlashtirish bajariladi. Qavs bu yerda kerak, chunki vergul operatori o‗zlashtirish operatoriga qaraganda quyi ustunlik darajasiga ega.
Eslatma: (,) vergul operatori C++ ning barcha operatorlariga nisbatan quyi ustunlik darajasiga ega .
Operatorlarning ustunlik darajalari va assotsiativligi (bajarilish yo„nalishi)
Turbo C++ operatorlari 7.2-jadvalda keltirilganidek 16 ta toifaga bo‗linadi.
Ular yuqori ustunlik darajasidan quyi ustunlik darajasiga qarab tartiblangan.
Har bir toifadagi operatorlar teng ustunlik darajasiga ega. C++ da teng ustunlik darajasiga ega operatorlar darajasiga ko‗ra chapdan o‗ngga yoki o‗ngdan chapga qarab hisoblanadi. Bu operatorning assotsiativlik xossasi deb ham ataladi.
Unar, Shart va O„zlshtirish operatorlari o„ngdan-chapga, qolgan barcha operatorlar chapdan-o„ngga yo„nalish bo„yicha bajariladi.26
7.2-jadval
Toifa
|
Operator
|
Nima ish bajaradi?
|
1. Eng yuqori
|
()
[]
->
::
|
Funksiyani chaqirish
Massiv indeksi
C++ ga qo‗shimcha komponent selektor
C++ sohasida ruxsat/yechim
C++ga bevosita komponent selektor
|
2. Unar
|
!
~
+
-
++
--
&
sizeof
new
delete
|
Mantiqiy inkor (NOT)
Razryadli qo‗shish
Unar plyus
Unar minus
Pre-inkrement yoki post-inkrement
Pre-dekrement yoki post-dekrement
Manzil
Qo‗shimcha
(operand o‗lchamini baytlarda qaytarish)
(C++ xotirasini dinamik taqsimlash)
(C++ xotirasini dinamik tozalash)
|
3. Ko‗paytirish
|
/
%
|
Ko‗paytirish
Bo‗lish
Qoldiq (modul)
|
4. Elementga ruxsat
|
.*
->*
|
C++ elementlariga yo‗l
C++ elementlariga yo‗l
|
25J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (223- bet) 26J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (224- bet)
*
*
5. Qo‗shish
|
+
-
|
Binar plyus
Binar minus
|
6. Surish
|
<<
>>
|
Chapga surish
O‗ngga surish
|
7. Taqqoslash
|
<
<=
>
>=
|
Kichik
Kichik yoki teng
Katta
Katta yoki teng
|
8. Tenglik
|
==
!=
|
Teng
Teng emas
|
9.
|
&
|
Razryadli VA
|
10.
|
^
|
Razryadli ISTISNO
|
11.
|
|
|
Razryadli YOKI
|
12.
|
&&
|
Mantiqiy VA
|
13.
|
||
|
Mantiqiy YOKI
|
14. Shart
|
?:
|
(ifoda ? x:y ma‘nosi "if ifoda then x, else y")
|
15. O‗zlashtirish
|
=
*=
/=
%=
+=
-=
&=
^=
|=
<<=
>>=
|
Oddiy o‗zlashtirish
Ko‗paytmani o‗zlashtirish
Bo‗limani o‗zlashtirish
Qoldiqni o‗zlashtirish
Yig‘indini o‗zlashtirish
Ayirmani o‗zlashtirish
Razryadli VAni o‗zlashtirish
Razryadli ISTISNOni o‗zlashtirish
Razryadli YOKIni o‗zlashtirish
Chapga surishni o‗zlashtirish
O‗ngga surishni o‗zlashtirish
|
16. Vergul
|
,
|
Hisoblash
|
Yuqoridagi jadvalda C++ dagi mavjud barcha operatorlar keltirilgan. Biz bu bo‗limda faqatgina arifmetik operatorlar (-, +, *, /, %), unary operator (-), Inkrement and Dekrement operatorlari (++, --), Taqqoslash operatorlari (>, >=, <, <=, ==, !=), Mantiqiy operatorlar (!, &&, || ) va Shart operatori (?:) ni ko‗rib chiqamiz.
Shunday qilib, turli operatorlarning ustunlik darajalarini diqqat bilan ko‗rib chiqdik.
Ifodalar
Operand yoki operandlar kombinatsiyasi va hisoblaganda bitta qiymat hosil bo„ladigan operatorlar ifodalar deb ataladi. C++ da ifodalar quyidagi turlarga bo‗linadi:
(i) Arifmetik ifoda
(ii) Mantiqiy (yoki taqqoslash ifodasi)27
(iii) Aralash ifodalar (yoki murakkab ifodalar)
(i) Arifmetik ifoda
U ixtiyoriy butun ifoda yoki haqiqiy ifoda bo‗lishi mimkin. Haqiqiy va butun ifodalar kombinatsiyasi aralash ifoda hisoblanadi.
Butun ifodalar butun arifmetik operatorlardan foydalanilgan butun o‗zgarmaslar va/yoki butun o‗zgaruvchilar birikmalaridan tashkil topadi. Butun ifodalar natijasi har doim butun bo‗ladi. Masalan, int a= 13, b=5, q;
q=a/b;
q ning natijasi 2 bo‗ladi (butunga bo‗linganligi uchun).
Haqiqiy ifodalar haqiqiy arifmetik operatorlardan (shuni unutmangki, % haqiqiy arifmetik operator emas) foydalanilgan haqiqiy o‗zgarmaslar va/yoki haqiqiy o‗zgaruvchilar birikmalaridan tashkil topadi. Haqiqiy ifodalar natijasi har doim haqiqiy bo‗ladi. Masalan,
float x = 13.0, y= 5.0, q;
q = x/y;
q ning natijasi 2.6 bo‗ladi (suzuvchi nuqtali songa bo‗linganligi uchun).
27J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (225- bet)
Arifmetik ifoda hattoki o‗zgaruvchilar, o‗zgarmaslar va arifmetik operatorlar bilan birga kelgan C++ ning matematik funksiyalaridan tashkil topishi mumkin. Bu funksiyalar C++ standart kutubxonasining qismlari hisoblanadi va math.h sarlavha faylida joylashgan bo‗ladi. Shunday ekan math.h sarlavha fayli matematik funksiyalardan foydalanish uchun dasturingizda ko‗rsatilgan bo‗lishi lozim. Matematik funksiyalar keyinroq batafsil keltiriladi.
(ii) Mantiqiy ifoda
It may contain just one signed or unsigned variable or a constant, or it may have two or more variables orland constants, or two or more expressions connected by valid relational and 1 or logical operators. For example,
U oddiy bir ishorali yoki ishorasiz o‗zgaruvchi yoki o‗zgarmasdan iborat bo‗lishi, yoki u ikki yoki ko‗p o‗zgaruvchilar yoki/va o‗zgarmaslarga, yoki to‗g‘ri taqqoslash va/yoki mantiqiy operatorlar bilan bog‘langan ikki yoki ko‗p ifodalarga ega bo‗lishi mumkin. Masalan,
int a,b,c;
Endi to‗g‘ri mantiqiy ifoda quyidagicha bo‗ladi: a < b, (a-c) > = b, -c
(iii) Aralash Ifoda
U haqiqiy va butun ifodalar kombinatsiyasidan iborat bo„ladi. Masalan, int a=13, b=5, c;
float x = 4.0, y; c = a*x;
y = b/x;28
Yuqoridagi ifoda bajarilish natijasida aralash o‗zgaruvchilardan foydalanilganligi uch un c ning qiymati 52 ga va y ning qiymati 1.25 ga teng bo‗ladi.
C++ tilida ifodani tasvirlash qoidalari:
1. Ishorali yoki ishorasiz o‗zgarmas yoki o‗zgaruvchi ifodadir
2. C++ to‗g‘ri operatori yoki o‗zgarmas bilan bog‘langan ifoda ifodadir.
3. Ikki yoki ko‗p ifodalar operator yoki operatorlar bilan bog‘langanda boshqa ifodani tashkil etadi.
4. Ikki yoki ko‗p operatorlar ketma-ket kelmaydi.
Ifodalar operatorlaning asosiy ustunlik darajalariga ko‗ra chapdan o‗ngga qarab hisoblanadi.Shunga qaramay operatorlaning ustunlik darajalarini qavslardan foydalangan holda o‗zgartirish mumkin. Shunday qilib, ifodada qavs ichida qatnashgan tarkibiy ifodalar birinchi navbatda bajariladi. Shuni qayd qilish lozimki, xuddi shu ustunlik darajasiga ega bo‗lgan *, /, % kabi operatorlar chapdan o‗ngga qarab, ammo -, ++ kabi unar operatorlar o‗ngdan chapga qarab bajariladi.
Ifodalarni Hisoblash
C++ operatorlari ustunlik darajalariga ko‗ra ierarxik shaklda guruhlanadi. Yuqori ustunlik darajasiga ega bo‗lgan amallar boshqa quyi ustunlik darajasiga ega bo‗lgan amallarga nisbatan oldin bajariladi. Hisoblanishning tabiiy tartibi qavslar yordamida o„zgartiriladi.
Boshqa muhim e‘tiboga molik jihat shuki, amallar ketma-ketligi tartibida shu ustunlik darajasiga ega bo‗lganlarini alohida hisoblash mumkin. Bu holat assotsiativlik deyiladi. C++ da ifoda avvalo ikkita operand va operatordan tashkil topgunga qadar tarkibiy-qismiy ifodalarga bo‗linadi. Hisoblash qoidalari qismiy ifodaga (zarur holda) tadbiq etiladi. Qismiy ifoda natijasi asosida keyingi yuqoriroq darajadagi ifoda hisoblanadi va uning turi hosil qilinadi. Bu jarayon oxirgi natija hosil bo‗lgunga qadar davom etadi. Masalan, quyidagi arifmetik ifodani qaraylik:
int i = 12, j =20, k= 7, result;
result = 6* ((i%5) * (9 + (j-3) / (k + 1))); Bu ifoda quyidagicha bajariladi:
result = 6 * ((12%5) * (9 + (20 - 3) / (7 + 1))) = 6 * (2 * (9 + (17/8)))
= 6 * (2 * (9 + 2)) = 6 * (2 * 11) = 6*22
= 132
Bu odatda uzun arifmetik ifodani quyidagidek bir nechta mayda bo‗laklarga bo‗lish yaxshiroq: 29 int a = i%5;
28J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (225-226betlar) 29J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (226-227betlar)
int b = 9 + ( j - 3 ) / ( k + 1 ) ; int result = 6*(a * b);
Bu ekvivalent ifoda katta ehtimol bilan asl uzun ifodaga ko‗ra to‗g‘riroq yozilgan.
Ifodalarda turlarni avtomatik tarzda o„zgartirish
Turni o„zgartirish biror aniqlangan turni boshqasiga o„zgartirish jarayonidir. Turni avtomatik o„zgartirish kompilyator tomonidan avtomatik tarzda bajariladi. Odatda u kerakli axborotli aralash ifoda hisoblanganda amalga oshiriladi. C++ kompilyatori barcha operandlarni eng katta turdagi operandgacha o‗zgartiradi, bu shuningdek turni yuqoriga surish deb ham ataladi.
Ma‘lumot turlari 7.3-jadvalga ko‗ra "yuqoriroq" yoki "quyiroq" hisoblanadi.
7.3-jadval. Ma‘lumot turlari tartibi
Ma‟lumot turi Tartibi
long doubIe Yuqorisi
double float
unsigned long int long int
unsigned int
char Quyisi
Masalan, int n = 25;
float avg_height = 160.5; double tot_height;
tot_height = avg_height*n;
cout << "\n\nTotal height = " << tot_height 30
Nazorat savollari
1. C++ da fundamental ma’lumotlar turlariga misollar yordamida qisqacha tushuncha yozing.
2. C++ da void ma’lumot turi ilovasi nima?
3. O‘zgarmas nima? C++ da o‘zgarmaslar turlarini kerakli misollar yordamida bayon qiling.
4. C++ da 'A' va "A" o‘rtasida qanday farq bor?
5. C++ da \n va \t simvolli o‘zgarmaslar ma’nosi nima?
6. Modifikator nima? Bitta misol ayting.
7. C++ fundamental ma’lumot turlari haqida izoh yozing. Yaroqli misollar keltiring.
8. C++ dao‘zgaruvchilarni e’lon qilish / lnitsializatsiya qilishni yaroqli misollar yordamida
tavsiflab bering.
9. C++ da o‘zlashtirish ifodasining ma’nosi nima?
10. O‘zgaruvchilarni dinamik lnitsializatsiya qilish degani nima? Misollar keltiring.
11. Modifikator turi nima?
12. Quyidagi modifikator turlarini yaroqli misollar yordamida tushuntirib bering: signed, unsigned, long.31
13. C++ dasturida o‘zgaruvchini ixtiyoriy joyda e’lon qilish mumkin. Bu izohning ma’nosini tushuntirib bering.
14. C++ o‘zgaruvchilarini e’lon qilish qoidalarini tushuntiring. O‘zgaruvchi bilan bog’liq nechta qiymat bor?
15. Modifikator ma’lumot turlariga qanday ta’sir qiladi? Misollar keltiring.
a. Type casting deganda nimani tushundingiz? Uning aniq va noaniq turiga misol keltiring.
16. Type conversionni maqsadi qanday?
17. automatic type conversion and type castingni bir-biridan qanday farqlash mumkin? Ikkalasini ko‘rsatish uchun C++ da mos misol keltiring.
18. Optrator tushunchasi? Ta’rifi?32
30J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (228- bet) 31J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (213- bet)
32J.B.Dixit. Fundamentalsofcomputer programmingandInformation texnology. India. 2009 (232- bet)
Dostları ilə paylaş: |