“Dasturlash I” fanidan yakuniy nazorat savollari
Kompyuter haqida asosiy tushunchalar (hardware, software).Protsessor (CPU).
Kompyuter – ma’lumotlarni saqlovchi va qayta ishlovchi elektron qurilma.Kompyuter apparat (hardware) va dasturiy (software) ta’minotlardan tashkil topgan. Apparat ta’minotini kompyuterning fizik elementlari tashkil qilsa, dasturiy ta’minotini fizik elementlar faoliyatini amalga oshiruvchi va topshiriqlarning bajarilishini nazorat qiluvchi dasturlar to`plami tashkil etadi. Kompyuterning markaziy protsessor bloki (CPU) uning bosh miyasi hisoblanadi, xotiradan yuborilgan masalalar unda bajariladi.
Ichki va tashqi xotira qurilmalari(RAM, saqlash qurilmalari).Bitlar va baytlar.
Dastur xotirada yaxshi yozilishi va xotiradagi ma’lumotlar bilan yaxshi ishlashi uchun kompyuter xotirasida baytlar tartiblangan ketma-ketliklarda joylashtiriladi. Xotirani kompyuterning dasturni ishga tushirishi uchun ishchi maydon sifatida qarash mumkin. Bitta bayt xotirada o`zining unikal (yagona, alohida) manziliga ega. Manzillar ma’lumotlarni yozish va qaytarish uchun baytlarni bog`lashda ishlatiladi. Shu o`rinda baytlar xotirada ixtiyoriy tartib raqamni egallashi mumkin, o`z navbatida xotira ham turli tartibli xotira (Random Access Memory, RAM) ko`rinishida namoyon bo`ladi. Kompyuter xotirasi ishlatilayotgn ma’lumotlarni vaqtinchalik ular saqlangan joydan oladi va tizim ishi tugatilganda u xotiradan o`chirib yuboriladi. Dasturlar va ma’lumotlar saqlash qurilmalarida doimiy saqlanadi va kompyuter ulardan foydalanishni faollashtirganda saqlash qurilmalariga qaraganda tezroq ishlovchi xotira qurilmasiga vaqtincha ko`chiriladi.Saqlash qurilmalarining uchta asosiy turlari mavjud: disk qurilmalari,optic disk qurilmalari (CD va DVD),USB xotira qurilmalariюQattiq disklar ma’lumotlar va dasturlarni doimiy saqlash uchun ishlatiladi.CD qurilmalarining ikki turi mavjud: CD-R va CD-RW. CD-R lar faqat ma’lumotni yozish uchun ishlatiladi. Unda bir marta yozilgan ma’lumotni o`zgartirish, o`chirish yoki unga qaytadan ma’lumot yozish imkonsiz. CD-RW dan qattiq disk kabi foydalanish mumkin, ya’ni unga yozilgan ma’lumotni o`zgartirish yoki unga qaytadan ma’lumot yozish mumkin bo`ladi.DVD – (Digital Versatile Disc) raqamli ko`pmuhitli disk yoki (Digital Video Disk) raqamli video disk ma’nolarida keladi. CD va DVD o`zaro juda o`xshash bo`lib, har ikkalasidan ham ma’lumot saqlashda foydalaniladi. DVD CDga qaraganda ko`proq ma’lumot saqlay oladi. USB (Universal Serial Bus – universal seriyali tashish) bog`lovchilari turli xildagi periferiya qurilmalarini kompyuterga bog`lash imkonini beradi. USBli bog`lash orqali printer, raqamli kamera, sichqoncha, tashqi qattiq disk kabi qurilmalarni kompyuterga ulash mumkin.Kompyuterda yoziladigan eng kichik bo`lak – bayt deb ataladi. Bir bayt 8 bitdan iborat. Mayda raqamlar, masalan 3 raqami kompyuterda bir bayt bo`lib yoziladi. Lekin kompyuterda faqat bitta bayt bilan ma’lumot yozilmaydi, balki, bir vaqtda bir nechta baytlar bilan ishlaydi. Raqamlar va belgilar kabi turli xildagi ma’lumot turlari baytlar seriyasi ko`rinishida shifrlanadi.
3.Dasturlash tillari(mashina tili, assembler tili, yuqori darajali tillar).
Yuqori darajali tillar. 1950-yilga kelib yuqori darajali tillar nomi bilan nom qozongan dasturlash tillari yaratildi. Ular dastur yozish uchun mustaqil muhitga ega bo`lib, ularda turlicha toifadagi mashinalar uchun dastur yozish imkoniyati mavjud bo`lgan. Dasturlash tillari ingliz tili asosida ishlab chiqilgan bo`lib, o`rganishga va foydalanishga qulay hisoblanadi.Yuqori darajali dasturlash tillarida yozilgan dastur dastur kodi deb yuritiladi. Chunki, dastur kodini kompyuter to`g`ridan-tog`ri ishlata olmaydi. Buning uchun dastur kodi mashina kodiga o`girilishi lozim. Dastur kodining o`girilishi boshqa bir dasturiy vosita yordamida amalga oshirilishi mumkin. Bunday dasturiy vosita interpretator yoki kompilyator deb ataladi.
Mashina tili.Hozirgi kunda kompyuterlarning juda ko`p turlari mavjud, ammo, ular yagona tilni tushunishadi – mashina tilini. Mashina tili dasturlash tillariga qaraganda soddalashtirilgan ko`rsatmalardan iborat bo`ladi. Ya’ni undagi barcha ko`rsatmalar ikkilik kodda yoziladi. Misol uchun, agar kompyuterga ikkita sonni kiritmoqchi bo`lsak, unga quyidagicha ikkilik kodni yozish lozim bo`ladi:
1101101010011010
Yuqori bosqichli programmalashda, mashina tillariga qaraganda mashinaga moslashgan (yo‘naltirilgan) belgili kodlardagi tillar hisoblanadi. Belgilar kodlashtirilgan tillarning asosiy tamoyillari shundaki, unda mashina kodlari ularga mos belgilar bilan belgilanadi, hamda xotirani avtomatik taqsimlash va xatolarni tashhis qilish kiritilgan. Bunday mashina moslashgan til - ASSEMBLER tili nomini oldi.EHM faqat mashina tilini-buyruqlar, operand va sonlarning ikkilik sanoq, sistemasidagi ko‘rinishini «tushinadi». Shu sababli, Assembler tilida yozilgan programmalar uchun ularni mashina tiliga o‘tkazuvchi «tarjimon» kerak bo‘ladi.
Assembler tilidagi programmani mashina tiliga o‘tkazuvchi maxsus programma translyator deyiladi, ayrim hollarda uni Assembler deb ham atashadi.
C++ tarixi(BCPL, B, C, C++).
C, C++, Java va C# o`zaro bog`liq tillar. C++ C dan olingan. Java C++ dan keyin ishlab chiqilgan. C# C++ ning ichki tizimini o`zlashtirgan holda, Javaning ba’zi imkoniyatlarini o`zida mujassamlashtirgan. Agar mazkur tillarning bittasi o`rganilsa, qolganlarini o`rganish qiyin bo`lmaydi.
C BCPL (Basic Combined Programming Language – Asosiy kombinatsiyalanuvchi dasturlash tili) asosida ishlab chiqilgan B tilida yaratilgan.C++ 1983-1985-yillar davomida “Bell Laboratories”da Bjarne Stroustrup tomonidan kengaytirilgan C ko`rinishida ishlab chiqilgan. Bunda C++ning eng muhim jixati shundan iboratki, u ob’yektga yo`naltirilgan dasturlashda sinf (class)lardan foydalanish imkonini beradi. Ob’yektga yo`naltirilgan dasturlash orqali dastur tuzish, uni qayta qo`llash va rivojlantirish mumkin. C++ C dasturlash tili bilan mustaxkam bog`liqlikda tuzilgan. C dastur kodini C++ kompilyatorida ham to`g`ridan-to`g`ri mashina tiliga o`girish mumkin. C++ dasturlash tilini o`rgangan dasturchi C tilini ham yaxshi tushuna oladi.
C++ da eng sodda dastur (konsol, konsoldan kiritish, konsolga chiqarish, main funksiyasi, izohlar).
C++ da eng sodda dasturlar bu konsolga biror bir matnni chiqaruvchi dasturlar hisoblanadi.Konsol bu eski termin hisoblanib malumotlarni korsatuvchi oynadir.cin obyekti konsoldan kiritish uchun ishlatiladi.Konsolga chiqarish uchun esa cout obyektidan foydalaniladi.Hamma bajariladigan amallarimiz main funksiyasi ichida bajariladi.Izohlar bir satrli yoki ko`p satrli izohlarga bo`linadi. Bir satrli izohlarni // operatoridan so`ng yoziladi .Ko`p satrli izoh yozish uchun /* izoh */ shu operatordan foydalanamiz.
Sintaktik xatoliklar(sintaksis xatolik, kompilyatsion xatolik).
Kompilyator tomonidan aniqlangan xatoliklar sintaksis xatoliklar yoki kompilyatsiya xatoliklari deyiladi. Sintaksis xatolik dastur kodini mashina kodiga kompilyatsiya qilish jarayonida kompilyator tomonidan aniqlanadi
Dastur bajarilish vaqtidagi va mantiqiy xatoliklar(runtime error, logic error).
Bajarilishdagi xatolik dastur dasturlash va hisoblash qoidalariga nomutanosib ravishda tuzilganda sodir bo`ladi. Bunda, masala bajarilishi uchun kiritilgan qiymatlar turi natijaviy qiymat turiga mos kelmay qoladi va odatda, dasturning natijani chiqarish vaqtida bajarilish (Runtime)dagi xatolik yuz beradi.
Mantiqiy xatoliklar. Dasturda mantiqiyxatoliklar kutilgan natija olinmaganda sodir bo‘ladi.
Bajarilishdagi xatoliklar. Bajarilishdagi xatolik dastur dasturlash va hisoblash qoidalariga nomutanosib ravishda tuzilganda sodir bo‘ladi.
Sodda dastur yozish (masalaning qo‘yilishi, algoritm, psevdokod). Klaviaturadan o‘qish (kiritish, foydalanuvchini undash).
Dastur yozish mos algoritmni loyihalash va uni dastur buyruqlari yoki kodlariga o`tkazishni talab etadi. Algoritm dastur tarkibidagi ko`rsatmalarning qanday harakatlanishi va bajarilish tartiblarini belgilash orqali masalani yechishni tavsiflaydi. Algoritm dasturchiga dasturlash tilida dastur yozishdan oldin uni rejalashtirishda yordam beradi. Algoritmlar tabiiy tilda yoki psevdokodlar (tabiiy tilning ba’zi dasturlash kodlari bilan kombinatsiyalangan ko`rinishi) orqali tasvirlanadi.Klaviaturadan ma’lumot kiritish vositasida dastur foydalanuvchisidan ma’lumot qabul qilib olinadi. Biz dasturga ma`lumotni klaviaturadan kiritish uchun cin obyektidan foydalanamiz. Foydalanuvchini ma`lumot kiritishga undash uchun (cout<<”Malumotni kiriting:”<
Identifikatorlar(nomlash, nomlash qoidalari).O’zgaruvchilar(o‘zgaruvchini e’lon qilish, birdan ortiq so‘zlarni bog‘lab nomlash).
Identifikatorlar(Ismlar) – dasturning o`zgaruvchilar, funksiyalar va shu kabi bosha elementlarning nomlaridir.Barcha ismlar quyidagi qoidalarga binoan tuzilishi kerak.Ism – bu harflar, raqamlar va tag chiziq belgilarining ketma-ketligidir,ism harf yoki tag chiziq bilan boshlanishi mumkin, raqam bilan boshlanishi mumkin emas,ism maxsus vazifali so`z bo`lishi mumkin emas (C++ tilining maxsus vazifali so`zlar ro`yxati ilovada keltirilgan),ismlar ixtiyoriy uzunlikda bo`lishi mumkin; C++ kompilyator ularni dastlabki 31 tagacha belgi bilan farqlaydi.Dasturda o`zgaruvchan qiymatlarni tavsiflash uchun o`zgaruvchi tushunchasi shakllantiriladi. O`zgaruvchilar belgilangan tur bo`yicha qayta-qayta qiymatlar berish uchun qo`llaniladi. O`zgaruvchidan foydalanish uchun dasturga kiritilishi mumkin bo`lgan mos ma’lumot turi bo`yicha o`zgaruvchiga berilgan nom orqali kompilyator chaqiriladi. O`zgaruvchini e’lon qilishda - o`zgaruvchi unga belgilangan ma’lumot turiga mos miqdorda xotiradan joy olishi uchun kompilyator chaqiriladi.O`zgaruvchilarning nomlari birdan ortiq so`zlar bilan ifodalayotkan bo`lsa bu so`zlarni bog`lab nomlanadi.Agar bu nomlar bog`lab yozilmasa dastur kompilyatsion hatolik beradi.Chunki dastur bu nomlarni bir nechta o`zgaruvchi deb qaraydi. Odatda o`zgaruvchilar kichik harflar bilan beriladi. Agar o`zgaruvchilar bir nechta so`zlardan iborat bo`lsa, unda oraliq so`zlarning bosh harflari bosh harflarda beriladi. Masalan, radius va foydaMiqdori o`zgaruvchilari.
Ta’minlash operatorlari va ta’minlash ifodalari(ta’minlash operatori, ifoda, ta’minlash qoidalari).Nomlangan konstantalar(o‘zgarmas, const kalit so‘zi, o‘zgarmaslarning afzalliklari).
С++ muhitida ta`minlash operatori sifatida ikkita tenglik belgisi ya`ni (==) belgisi ishlatiladi.Misol tariqasida a o`zgaruvchini b ga ta`minlamoqchi bo`lsak a==b ko`rinishida ta`minlaymiz. Taqqoslash jarayonida ikki tomonning tengligini tekshirish uchun ikkita tenglik belgisi (==)dan foydalanish zarur.
Nomli o`zgarmas (Named Constant) – o`zgarmas qiymatni ta’minlovchi identifikatordir. O`zgarmasni e’lon qilish tartibi quyidagicha:const [ma’lumot turi] [o`zgarmas nomi] = [qiymat]; O`zgarmas yagona ko`rsatma orqali e’lon qilinishi va yuklanishi lozim. const so`zi C++ ning kalit so`zi bo`lib, o`zgarmaslarni e’lon qilish uchun ishlatiladi Odatda o`zgarmaslar katta harflar bilan nomlanadi: Pi yoki pi emas.O`zgarmaslardan foydlanishning uchta afzallik tomoni bor: 1) dasturda bitta qiymat hadeb qaytadan yozilavermaydi; 2) Agar o`zgarmasning qiymatini o`zgartirmoqchi bo`lsangiz, uni dastur kodiga murojaat orqali amalga oshirish mumkin bo`ladi; 3) O`zgarmasni tavsiflovchi so`zlar dastur tomonidan qiymatni oson ta’minlanishi va o`qilishiga zamin yaratadi.
Sonli ma’lumotlar turlari va ular ustida amallar(int, float, double).
Har bir ma’lumot turi qiymatlar sohasiga ega. Kompilyator har o`zgaruvchi va o`zgarmasga uning turiga qarab xotiradan joy ajratadi. C++ odatiy qoidalariga ko`ra raqamli qiymatlar, belgilar va mantiqiy qiymatlar bilan ishlaydi.C++ butun qiymatlarning 3ta turini qo`llaydi: short, int va long. Har bir butun tur ikki xil xususiyat bilan keladi: ishorali va ishorasiz. Butun qiymatli sonlarning yarmini manfiy ishorali, qolgan yarmini esa nomanfiy (musbat) ishorali sonlar tashkil etadi. Ishorasiz berilgan intlarning barchasi musbat ko`rinishda kiritiladi. C++ haqiqiy sonlarning uch turi bilan ishlaydi: float, double, va longdouble. double turi odatda float turidan ikki marta katta bo`ladi. Shuningdek, double ikkilik aniqlikda, float esa bir birlik aniqlikda hisoblanadi.Sonli ma`lumotlar ustida+, -, *, /, % shu amallarni bajarish mumkin.Bulardan tashqari ildiz,kvadratga oshirish ,log ifodalarni,trigonametrik ifodalarni qo`llash mumkin.
Sonli literallar. Arifmetik amallarni bajaruvchi operatorlar(literallar,operatorlar, operandlar, butun bo‘lish, qoldiqli bo‘lish).
Raqamli literallar dastur qismlarida o`zgarmas qiymat sifatida keladi.Quyidagi ko`rsatmada 34 va 0.305 lar literallar:
inti = 34;doublefootToMeters = 0.305; Odatda butun turli literallar o`nli butun son ko`rinishda ifodalanadi. Sakkizlik butun literaldan foydalanish uchun 0 (nol)dan oldin yoziladi. Oltilik o`lchamdagi butun literalni yozish uchun esa 0x yoki 0X ifodalari qo`llaniladi. Haqiqiy turli literallar shakl ko‘rinishidagi ilmiy ifodalar yordamida yozilishi mumkin. Misol uchun, 123.456 uchun va 0.0123456 uchun shakllari o‘rinlidir. Buni dasturlash tillarida 1.23456E-[-2] kabi yozilishini dastur qiymat (natija) chiqarganda ko‘rish mumkin. Bu yerda E (yoki e) lar – eksponenta belgisi bo‘lib, katta yoki kichik harflarda yozilishi mumkin.Raqamli ma’lumot turlari uchun standart operatorlar tayinlangan: qo`shish (+), ayirish (-), ko`paytirish (*), bo`lish (/) va foiz(%).Qo`shish ikkita raqamli ma`lumot turini qo`shadi,ayirish ikkita ma`lumot tuini ayiradi,ko`paytirish ikkita ma`lumot turini ko`paytiradi,bo`lish ikkita raqamli ma`lumot turini bo`ladi,foiz ikkita raqamli ma`lumot turini bo`lib qoldiqni hisoblaydi.INT turida bo`lish amalini bajarilganda natija albatta butun turda chiqadi.O`nli kasr ko`rinishida qiymat olish uchun haqiqiy turdan foydalanish tafsiya etiladi . % operatori qoldiqni hisoblash operatori sifatida tanilgan va faqat butun turlar uchun ishlaydi. Unda sonning butun qismidan keying (ya’ni verguldan keyingi) qoldiq qismi olinadi.
Darajaga ko‘tarish amallari(pow(a,b)).Arifmetik ifodalarda amallarning bajarilish tartibi(operator precedence rule (+,-,*,/,% amallari misolida)).
ni hisoblash uchun pow (a, b) funksiyasidan foydalaniladi. Pow ni cmath (yoki math.h) kutubxonasi darajaga ko‘tarish funksiyasi sifatida aniqlaydi. ko‘rinishidagi darajaga ko‘tarish funksiyasi orqali ifodani pow (2.0, 3) deb yoziladi. Bu yerda a va b lar pow funksiyasining parametrlari, 2.0 va 3 lar esa, pow funksiyasini qo‘llash uchun qiymatlar. Qavs ichidagi sonlar oralig‘idagi operator birinchi hisoblanadi. Qavslar ichma-ich bo‘lishi mumkin. Bunda eng ichki qavlardagi operatorlar birinchi bajariladi. Agar ifodada bir neha xil operatorlar bo‘lsa, ular quyidagicha qoidalarga asosan bajariladi.Qavslardan keyin ko‘paytirish, bo‘lish va qoldiqni hisoblash operatorlari ishlaydi. Agar ifodada bir nechta ko‘paytirish, bo‘lish va qoldiqni hisoblash operatorlari mavjud bo‘lsa, u holda ular chapdan – o‘ngga qoidasi bo‘yicha bajariladi.Qo‘shish va ayirish operatorlari oxirida bajariladi. Agar ifodada bir nechta qo‘shish va ayirish operatorlari bo‘lsa, ular ham chapdan – o‘ngga qoidasi bo‘yicha bajariladi.
Inkrement va decrement operatorlari(++, --, postincrement, preincrement).Sonli ma’lumot turlarini o‘girish(raqamli turni o‘girish, static_cast operatori).
Inkrement (++) va dekrement (– –) operatorlari o‘zgaruvchini birlikka oshirish yoki kamaytirish uchun ishlatiladi. i++ operatori “i plyus plyus” deb, i—-operatori esa “i minus minus” - deb o‘qiladi. Bu operatorlar postfiks inkrement (postinkrement) va postfiks dekrement (postdekrement) nomlari bilan tanilgan. Chunki bunda operatorlar o‘zgaruvchidan keyin keladi. ++ii ni bittaga oshiradi, --jj ni bittaga kamaytiradi. Bu operatorlar prefiks inkrement (preinkrement) va prefiks dekrement (predekrement) deb nomlanadi.Ko‘rib turganimizdek, i++ va ++i yoki i-- va --i operatorlari bir xil vazifalarni bajarisadi. Ammo biz ulardan hisoblash jarayonidan foydalanganimizda ularning effektlar turlicha bo‘ladi.
Haqiqiy turli sonlar butun turga ochiq taqsimlash orqali o‘tkaziladi. C++ bir turdagi sonli qiymatni taqsimlash operatori (casting operator)dan foydalangan holda boshqa turdagi sonli qiymatga o`ztkazishga ruxsat beradi.Uning qo`llanilish qoidasi quyidagicha: static_cast(qiymat)
Bu yerda qiymat o`zgaruvchi, tur biz o`tkazmoqchi bo`lgan sonli tur.
Kichik hajmdagi turni kattaroq hajmdagisiga o`tkazish turni kengaytirish deb ataladi. Kattaroq hajmdagi turni kichik hajmdagisiga o`tkazish turni toraytirish deb ataladi. Turni toraytirish (masalan double dan int ga o`tkazish) aniqlikni kamaytirishi mumkin. Axborot qismining zararlanishi esa sifatsiz natija beradi. static_castdan foydalanib turni toraytirganingizda kompilyator sizni ogohlantiradi.
Dasturni ishlab chiqishda talablarni aniqlash, tizimli tahlil va loyihalash bosqichlari(requirements specification, system analysis, system design).
Dasturiy ta’minotni ishlab chiqish jarayonining hayot sikli qo`yilgan talablar, tahlil qilish, loyihalash, amalda qo`llash, testlash, tayyorlash va tuzatishni qamranoluvchi ko`p bosqichli jarayon. . Dasturdagi xatoliklarni tuzatish yoki uning vazifalariga o`zgartirishlar kiritish uchun dasturiy ta’minotni ishlab chiqish jarayoni hayot siklining ixtiyoriy bosqichida orqaga – bitta avvalgi bosqichga qaytish imkoniyati mavjud.
Qo`yilgan talab bosqichi – dasturning aynan qanday vazifalarni bajarishi lozimligini ko`rsatuvchi hujjatlar asosida o`rganishga harakat qilinuvchi rasmiy jarayon. Tizimli tahlil ma’lumotlar oqimini tahlil qilishga va tizimning chiqish va kirish ma’lumotlarini aniqlash uchun qo`llaniladi. Amalda qo`llash deganda, tizim dizaynini dasturga o`girish tushuniladi. Har xil dasturlar ma’lum bir ichki komponenta uchun tuziladi va ular birgalikda ishlashlari uchun birlashtiriladi.
Testlash koddagi talab etilgan qoidalarni ko`rib chiqadi va chiqishdagi xatoliklarni yo`qotadi. Tayyorlash jarayoni dasturni foydalanishga tayyorgarligini ishlab chiqadi. Dasturni turini tayyorlash foydalanuvchi mashinasi yoki internetdagi server tizimga bog`liq bo`ladi. Tayyorlash jarayoni dasturni foydalanishga tayyorgarligini ishlab chiqadi. Dasturni turini tayyorlash foydalanuvchi mashinasi yoki internetdagi server tizimga bog`liq bo`ladi.
Tuzatish jarayoni dastur va uning bazasini yangilash va unga o`zgartirishlar kiritish bilan bog`liq. Dasturiy mahsulot doimiy ravishda shakllanib va o`sib borishi zarur. Bunday davriy yangilanish talablari dasturni yangicha muammolar va yangicha imkoniyatlarga yetaklaydi.
Dasturni ishlab chiqish jarayonida kod yozish va tekshirish bosqichlari(implementation, testing).
17.boolma’lumot turi (bool data type, mantiqiy o‘zgaruvchi, sonlarning mantiqiy turga konvertatsiyasi);
bool ma’lumot turi o`zgaruvchini true (rost) yoki false (yolg`on) qiymatlari bilan e’lon qiladi. true va false – mantiqiy qiymatlar bo`lib, xuddi 1 va 0 ga o`shaydi. Ular dasturlash tilida kalit so`zlardir va ulardan ismlar sifatida foydalanib bo`lmaydi.
Ichki fonda C++ true qiymati o`rniga 1 ni va false qiymati o`rniga 0 ni ishlatadi. Agar konsol oynada mantiqiy qiymat kiritsak, agar u rost (true) bo`lsa dastur ekranga 1 ni chiqaradi, agar yolg`on (false) bo`lsa, 0 ni chiqaradi. Dasturda bool o`zgaruvchiga sonli qoymatlarni ham berish mumkin. Bunda 0 dan boshqa ixiyoriy son true qiymat, 0 ning o`zi false qiymat qabul qiladi.
if– shart operatori (ifoperatori, blok-sxemasi);
if – shart operatori dasturga hisoblash uchun maxsus alternative tanlov qismni belgilovchi tuzilma. Dastur tuzish davomida ko`p hollarda masalani yechimini topish bir nechta holatlar uchun bajarilishiga duch kelamiz. C++ da tanlash operatorlarining bir necha xili mavjud: bir yo`nalishli if operatori, ikki yo`nalishli if-else operatori, ichma-ich if operatorlar, switch operatori va shartli ifodalar. Bir yo`nalishli if operatori shart faqat bitta (true) bo`lgan holatlarda ishlaydi.
if (mantiqiy ifoda)
{
ko`rsatma satri (s);
Agar mantiqiy ifoda true qiymat qabul qilsa, blok ichidagi ko`rsatmalar bajariladi. Mantiqiy ifoda qavslar ichida yozilishi kerak. Shart operatorining bajarilishida uning tanasini belgilash uchun figurali qavslar ({ va })dan foydalanish mumkin. Agar dasturda faqat bir yoqlama shart operatori bo`lsa va undan keyin ushbu shartga tegishli bo`lgan boshqa bajariluvchi ifodalar bo`lmasa bu qavslardan foydalanish shart emas
Ikki tarmoqli if-else operatori (ikki tarmoqliif-else operatori, blok-sxemasi).
Ikki tarmoqli if-else operatori berilgan mantiqiy ifodaning true yoki false qiymat qabul qilganda operatsiya bajarishga mo`ljallangan.
Bir tarmoqli if operatori agar mantiqiy ifoda rost qiymat qabul qilsa, dastur bosqichini operatsiya bajarishga yo`naltiradi. Mantiqiy ifoda yolg`on qiymat qabul qilganda esa hech qanday operatsiya bajarilmaydi. Ammo qo`yilgan shartning bajarilmagan holatida ham biror operatsiya amalga oshirilishi lozim bo`ladigan masalalar ham bor. Bunda ikki tarmoqli if - else operatoridan foydalanishimiz mumkin. Bu operator mantiqiy turning true yoki false qiymati uchun dastur oqimini bir-biridan farq qiluvchi ikki xil vazifaning bajarilishiga yo`naltiradi.
Quyida ikki tarmoqli if - else operatorining yozilish qoidasi keltirilgan:
if(mantiqiy ifoda)
{
mantiqiy ifoda rost qiymat olgandagi operatsiya;
}
else
{
mantiqiy ifoda yolg`on qiymat olgandagi operatsiya;
}
if - else operatori mantiqiy turning true yoki false qiymati uchun dastur oqimini bir-biridan farq qiluvchi ikki xil vazifaning bajarilishiga yo`naltiradi
Ichma-ich joylashgan if va ko‘p tarmoqli if-else operatorlari (nested if statement, multi way if statement);
Ichma-ich joylashgan if operatorini shakllantirish uchun if operatorini boshqa bir if operatori ichiga joylashtirish mumkin. if yoki if-else operatorlari tarkibida boshqa if yoki if-else operatorlarini ishlatgan holda istalgancha C++ tiliga muvofiq ko`rsatma satrlarini yozish mumkin. Ichkarida yozilgan if operatorini tashqi if uchun ichki deb atash mumkin. Ichki if da yana boshqa ichki if operatori bo`lishi mumkin. Shu narsa aniqki, bu yerda ichki if operatorlarning soni chegaralanmagan.Ko`p tarmoqli if-else operatoridan foydalangan holda ko`p sonli tanlovlar (alternativlar) uchun maqbul format keltirilgan.
Mantiqiy operatorlar (Logical operators – !, &&, and ||);
Mantiqiy operatorlar (!,&& va | |)dan qo`shma mantiqiy ifodalar hosil qilishda foydalanish mumkin. Ba’zida dasturlash davomida hisoblashlarni amalga oshirish uchun bir nechta shartlar kombinatsiyasini qo`llashga to`g`ri keladi. Ushbu kombinatsiyalarni qo`llash uchun mantiqiy operatorlardan foydalanish mumkin. Mantiqiy operatorlar shuningdek, Booleanoperatorlar deb ham tanilgan. U Boolean qiyatlar ustida operatsiya bajarib, yangi Boolean qiymat hosil qiladi. Yo`q (!) operatori true ni false ga, false ni esa true ga o`zgartirib ta’minlaydi, va (&&) operatori tavsiflangan. Bunda har ikkala mantiqiy operandlar bir vaqtda true qiymatga ega bo`lsagina true qiymat qabul qiladi,yoki (||) operatori tasvirlangan. Bu operator ikki operandning ixtiyoriy bittasi true qiymatga ega bo`lsa true qiymat qabul qiladi.
Switchoperatori (switch statement);
Switch operatori o`zgaruvchi yoki ifoda qiymatiga asoslangan ko`rsatmani bajarish uchun ishlatiladi. if operatori o`qishda qiyinchilik tug`diradi. C++ ko`p sonli tanlashlarni oddiy usul bilan hal qiluvchi switch operatorini taqdim etadi. Switch operatori barcha holatlarni tekshiradi va ma’qul holatdagi ko`rsatmani bajaradi. Bu operator status (holat)ning shunday tartibda 0, 1, 2 yoki 3 qiymatlariga mos kelish-kelmasligini tekshiradi. Agar moslik mavjud bo`lsa, unga tegishli ko`rsatma hisoblanadi, agar aksi bo`lsa, shu haqda xabar chiqariladi. Quyida switch ning yozilish qoidasi to`liq ko`rsatilgan:
switch(switch-ifoda)
{
caseqiymat1: ko`rsatma satri 1;
break;
caseqiymat2: ko`rsatma satri 2;
break;
...
caseqiymatN: ko`rsatma satri N;
break;
default: dastlabki holat uchun ko`rsatma satri
switch operatorida quyidagi qoidalar kuzatiladi:
switchifodasiintegral qiymat berishi kerak va har doim qavslar orasiga olinadi;
qiymat1, qiymat1, … qiymatN lar integral o`zgarmas ifodalar bo`lib, o`zgaruvchilardan iborat bo`lishi ko`zda tutilmaydi (xuddi 1+x kabi). Bu qiymatlar butun turdagi sonlar va ular suzuvchi-nuqtali sonlar bo`la olmaydi.
case (moslik qatori) operatoridagi qiymat switch-ifoda qiymatiga mos kelganda, o`sha case ga tegishli ko`rsatmalar bajarilishni boshlaydi va bu jarayon break (to`xtatish) operatori bajarilganda yoki switch operatorining so`nggi qismi bo`lgan holatda to`xtaydi;
default case – shunday xususiyatga egaki, yuqoridagi case lardan birortasining qiymati switch-ifoda qiymatiga mos kelmaganda bajariluvchi amalni belgilaydi;
break operatorini qo`llash majburiy emas. U switch operatorining ishini darhol to`xtatish uchun ishlatiladi.
Zaruriy hollarda break operatoridan foydalanishni unutmang! Bitta case qiymati mos kelsa, unga tegishli ko`rsatma bajarilishi boshlanadi va u break operatoriga qadar bajariladi yoki switch operatorining so`nggi qismiga qadar bajarilishda davom etib ketadi.
Shartli operatorlarda ko‘p uchraydigan xatoliklar;
if operatorida figurali qavslarni unutib qoldirish, nuqtali vergulni xato qo`yish, == o`rniga = ni qo`yish, else blokini umumiy blokdan chiqarib qo`yish – tanlov ko`rsatmalaridagi xatoliklardir. Ikki tarmoqli if-else va o`zgaruvchilarni double turida e’lon qilish – xatolikning oldini olishdir. Bir tarmoqli tanlov operatori tarkibida figurali qavslarni qoldirib yozish xato hisoblanmaydi. Bordiyu, agar figurali qavslar ko`p tarmoqli shart operatorlarida unutib qoldirilsa, dasturlashdagi asosiy xatolikka olib keladi. Agar if operatori tarkibiga yangi ko`rsatma satrini joylashtirmoqchi bo`lsak, shartlarni guruhlashtirishdagi xatolik yuzaga keladi. Dastur kodida if operatori ishlatilganda aynan u yozilgan satr so`ngida “;” - belgisi qo`yilmasligi lozim. Bunda dastur bajarilishi shartning qabul qilgan qiymatiga ko`ra shart tanasining tegishli qismiga o`tishi lozim. Nuqtali vergulning qo`yilishi shart operatori ishini shu joyda to`xtatib qo`yadi. Dasturlashda if operatori tarkibida tenglik shartini tekshirish uchun ikkita tenglik belgilarini ketma-ket yozish kerak. Aks holda, ya’ni bitta tenglik belgisi ishlatilsa mantiqiy xatolikka yo`l qo`yilgan bo`ladi. Bilamizki bitta tenglik “=” belgisi C++da ta’minlash (o`zgaruvchiga qiymatni ta’minlash) operatori sifatida qo`llaniladi. Shart operatorida tenglik shartini tekshirish uchun bitta tenglik belgisidan foydalanilsa, shart tekshirilayotgan o`zgaruvchiga qiymat ta’minlanib qoladi va bu mantiqiy xatolik hisoblanadi.
Tasodifiy sonlarni hosil qilish (rand () funksiyasi, srand (seed) funksiyasi).
Tasodifiy sonni hosil qilish kutubxonasidagi rand () funksiyasini qo`llagan holda amalga oshiriladi. Bu funksiya 0 va RAND_MAX oralig`idan olingan biror tasodifiy sonni qaytaradi. RAND_MAX belgilab olingan o`zgarmas platformasi. Uning qiymati C++ da 32767 ga teng.
rand () sonlari oldindan aniqlangan tasodifiy sonlardir. Ya’ni, unda har doim bir xil tizim ishlaydi, rand () bir xil ketma-ketlikdagi sonlarni har gal chiqaraveradi. Shaxsiy kompyuterda, masalan, ushbu ko`rsatma satri har doim 130, 10982, va1090 sonlarini hosil qiladi. random () funksiyasi algoritmi tasodifiy sonlarni hosil qilishda saralangan deb nomlanuvchi qiymatlardan foydalanadi.Odatga ko`ra saralangan qiymat 1 ga teng. Agar saralangan qiymatni turli sonlar uchun aniqlasak, turli tasodifiy sonlar chiqadi. Saralangan sonni tanlash uchun kutubxonasidan srand(seed) funksiyasidan foydalaniladi. Shuning uchun har safar har xil saralangan qiymatlarni olish uchun time (0) funksiyasidan foydalanib, dasturni turli vaqtlar oraliqlarida ishga tushirish mumkin.
Amallarning bajarilish tartibi va assotsiativligi (operator precedence, operator associativity (+,-,*,/,%,||,&,!,<,> amallari misolida)).
Dasturlash tillarida amallar huddi hayotdagidek ketma-ketlikda bo’ladi. Dastur kodni o’qishda tepadan pastga qarab o’qiydi, chapdan o’ngga qarab o’qiydi va shunday amallarni ham birinchi tepadagisini va chapdan eng birinchisidan boshlab bajarishni boshlaydi. Matematik amallar Matematika qonunlariga binoan bajariladi, ya’ni birinchi qavs ichi, ko’paytirish, bo’lish, qo’shish va ayirish.
Matematik funksiyalar (Trigonometrikfunksiyalar, Exponent funksiyalar);
Funksiya – muayyan masalani yechuvchi ko`rsatmalar majmuidir. Ularni trigonometric funksiyalar, eksponent funksiyalar va xizmatchi funksiyalar turlariga tasniflash mumkin.
C++ trigonometrik funksiyalarni hisoblash uchun cmath kutubxonasi tarkibidagi quyidagi funksiyalarni taqdim etadi:
Cmath kutubxonasidagi trigonometrik funksiyalar
Funksiya
|
Qo`llanilishi
|
sin(radians)
|
Burchakning trigonometrik sinusining radianlardagi qiymatini qaytaradi
|
cos(radians)
|
Burchakning trigonometrik kosinusining radianlardagi qiymatini qaytaradi
|
tan(radians)
|
Burchakning trigonometrik tangensning radianlardagi qiymatini qaytaradi
|
asin(a)
|
Radianlardagi burchakni sinusga teskari quymatda qaytaradi
|
acos(a)
|
Radianlardagi burchakni kosinusga teskari quymatda qaytaradi
|
atan(a)
|
Radianlardagi burchakni tangensga teskari quymatda qaytaradi
|
Quyidagi beshta funksiya cmath kutubxonasidagi exponentlash funksiyalari hisoblanadi:
cmath kutubxonasidagi exponentlash funksiyalari.
Funksiya
|
Qo`llanilishi
|
exp(x)
|
e ni x qiymatdagi darajaga ko`taradi ( )
|
log(x)
|
x ning natural logarifmini hisoblaydi ( )
|
log10(x)
|
x ning o`nli logarifmini hisoblaydi ( )
|
pow(a,b)
|
A ni b darajaga ko`taradi ( )
|
sqrt(x)
|
x>=0 bo`lgan holat uchun x ning kvadrat ildizini aniqlaydi
|
Matematik funksiyalar (Yaxlitlash funksiyalari, min, max va abs funksiyalari);
min va max funksiyalari ikki son (int, double, long, yoki float)ning minimumini yoki maxsimumini qaytaradi. abs funksiyasi esa sonning modul qiymatini qaytaradi.
Ceil bu sonni bitta kata butun songa yaxlitlaydi.Floor esa sonni bitta kichik songa yaxlitlaydi.
Belgili ma’lumot turi, belgilar jadvali, belgini klaviaturadan o‘qish va maxsus birikmalar (char turi, ASCII, belgini o‘qitish, maxsus birikmalar);
C++ da sonli qiymatlarni qo`shishda belgilarni ham ishlatish mumkin.Belgili ma’lumot turi (char) o`zida faqat bitta belgini saqlaydi. Belgili literallar bittalik qo`shtirnoqlar (‘ ’) orasiga olib yoziladi.
Ko`pchilik kompyuterlarda kata va kichik harflar, raqamlar, tinish va boshqaruvchi belgilarni ifodalash uchun 8 bitli ASCII (American Standard Code for Information Interchange – Axborot almashish uchun amerikacha standart kod)shifrlash sxemasidan foydalaniladi.
Kompyuter tomonidan belgini klaviaturadan o`qilishi quyidagi dastur kodida berilgani kabi amalga oshiriladi:
cout<< "Belgini kiriting: ";
char ch;
cin>> ch; // belgini o`qish
cout<< "O`qilgan belgi: " << ch << endl;
Maxsus belgilarni anglatuvchi maxsus birikmalar
Belgilar ustida sonli va munosabat amallari (belgilar ustida sonli hisoblash amallari, belgilarni taqqoslash va tekshirish);
Belgilar ustida sonli amallar – Bunaqa amallarga belgilarni bir-biriga qo’shish ASCII kodidagi raqamiga qarab ish yuritish kabilar kiradi. Bir necha belgilar ketma-ketligi satr deb ataladi. Satrlar ustida ham sonli amallar bajarilishi mumkin.Satrlarni bir biriga qo’shish mumkin.Belgilar ustida Munosabat amallari – Bunaqa amallarga belgilarni taqqoslash (Masalan: A
Satrli ma’lumot turi, satr funksiyalari (string turi uchun qo‘llaniluvchi nusxa funksiyalar, at(index), length(), size());
Satrli ma’lumot turi – Bu string turidir bunda bir necha belgilar ketma – ketligi orqali satr hosil bo’ladi.string Satr = “So’zlar “;string ma’lumot turidan foydalanish uchun kutubxonasini chaqirish kerak;
string turi uchun asosiy funksiyalar:
Funksiya
|
Qo`llanilishi
|
length()
|
Satrdagi belgilar sonini qaytaradi
|
size()
|
length() bilan bir xil vazifa bajaradi
|
at(index)
|
Ushbu satrda joylashgan maxsus indeksdagi belgini qaytaradi
|
Satrdan belgini ajratib olish. Satrlarni qo‘shish (subscript operator, string concatenation);
C++ ikki satrni birlashtirish uchun + operatorini taqdim etadi. Quyida keltirilgan misolda s1 va s2 satrlarini birlashtirib, s3 satriga ta’minlanishini ko`rish mumkin: string s3 = s1 + s2;
O`rnatilgan qoidali ta’minlash operatorini ham satrlarni birlashtirishda qo`llash mumkin. Masalan, quyidagi kod xabar nomli, “C++ ga xush kelibsiz!” qiymatga ega bo`lgan satrga “ va dasturlash – qiziqarli” satrini qo`shib ta’minlaydi:
xabar += “ va dasturlash – qiziqarli”;
Bunda xabar ning yangi qiymati “C++ ga xush kelibsiz va dasturlash – qiziqarli” ga teng bo`ladi. Shuningdek, satrga belgini ham qo`shib ta’minlashimiz mumkin:
string s = "ABC";
s += 'D';
Yangi s ning qiymati – “ABCD”.
Eslatma. Yangi satrga ikkita satrli ma’lumotni qo`shib ta’minlash xato hisoblanadi. Masalan quyidagi kabi:
string shaharlar = "London" + "Parij";
Quyida berilgan kod esa to`g`ri, chunki bunda avvaldan qiymatga ega s satriga “London” satri va keyin “Parij” satri qo`shilyapti.
string s = "Nyu York";
string shaharlar = s + "London" + "Parij";
32.Satrlarni taqqoslash. Satrni klaviaturadan o‘qish (comparing strings, read a string);Satrlarni taqqoslashda satrdagi belgilar ketma – ketlikda taqqoslanadi. Misol uchun :
string s1 = "ABC";
string s2 = "ABE";
s1 > s2 holatni ko`rib chiqamiz. Dastlab s1 va s2 lardan birinchibelgilar (A bilan A)ning tengligi tekshiriladi. Tenglik o`rinli. Keyin ikkinchi belgilar (B bilan B) ning tengligi tekshiriladi. Tenglik o`rinli. Keyingi qadamda ikkinchi belgilar (C bilan E) ning tengligi tekshiriladi. Tenglik 0 qiymat qaytaradi. Chunki, C belgisi E belgisidan kichik.
Satr ma’lumotni klaviatura orqali, cin ob’yektini qo`llagan holda o`qishi mumkin. Misol sifatida quyidagi kodni ko`rishimiz mumkin:
1 string shahar;
2 cout << "Shaharni kiriting: ";
3 cin >> shahar; // shahar satrini o`qish
4 cout << "Sizning kiritgan satringiz: " << shahar << endl;
Uchinchi satrda shahar ga satrli ma’lumot klaviatura orqali o`qiladi. Satrni o`qish uchun bunday yo`l tutish oson. Lekin bu yerda bir muammo bor. Kiritish bo`sh joyli belgi bilan tugaydi. Agar biz Nyu York satrini kiritmoqchi bo`lsak, boshqa bir alternative yo`lni tanlashimiz kerak. C++ string kutubxona faylida getline funksiyasini taqdim qiladi. Uning yozilish sintaksisi quyidagicha:
getline(cin, s, belginingDelimitlanishi)
Bunda funksiya belgining delimitlanishiga kelganda o`qishni to`xtatadi. Belgini delimitlovchi o`qiladi, ammo satrga yozilmaydi. Uchinchi argument, belginiDelimitlovchi‘\n’asl holatqiymati (default value)ga ega.
Quyidagi kodda satrni o`qish uchun ge
Satrli ma’lumotni konsol oynaga chiqarilishini formatlash (format console output);
Oqim manipulyatorlaridan foydalanib, ekranda chiqarilishni formatlash mumkin.
Biz ko`p hollarda ko`ramizki, sonlar konsol oynada aniq qiymatda chiqariladi. Masalan, quyidagi dastur kodi omonatdan tushgan daromadni hisoblaydi:
double daromad = 12618.98;
double omonatUlushi = 0.0013;
double omonatFoyda = daromad * omonatUlushi;
cout << " omonatFoyda = " << omonatFoyda << endl;
Bu qiymatni yaxlitlab chiqarish mumkin. Buning uchun quyidagicha yo`l tutish lozim:
double daromad = 12618.98;
double omonatUlushi = 0.0013;
double omonatFoyda = daromad * omonatUlushi;
cout <<" omonatFoyda = " << static_cast( omonatFoyda * 100) / 100.0 << endl;
Aslida bu noto`g`ri, chunki unda qo`zg`aluvchi nuqtadan keyin ikkita raqam bo`lishi kerak (M.: 16.40). Buni formatlash funksiyalari yordamida quyidagi kabi to`grilash mumkin:
double daromad = 12618.98;
double omonatUlushi = 0.0013;
double omonatFoyda = daromad * omonatUlushi;
cout <<" omonatFoyda = " << fixed << setprecision(2) << omonatFoyda << endl;
Biz konsol oynaga ma’lumotlarni cout ob’yektidan foydalanib chiqarishni juda yaxshi bilamiz. C++ da oynaga chiqarishni formatlovchi funksiyalar ishlab chiqilgan. Bu funksiyalar oqim manipulyatorlari deb ataladi va iomanip kutubxonasini chaqirish orqali qo`llaniladi.
Fayldan kiritish (stream manipulator,reading from a file);
Dasturlashda ma’lumotni faylga saqlash va keyin ma’lumotni fayldan o`qish mumkin.Shu vaqtgacha biz ma’lumotlarni kiritish uchun ci nob oyektidan, konsol oynaga chiqarish uchun esa cout ob’yektidan foydalanib kelganmiz. Bundan tashqari, ma’lumotni fayldan o`qish va uni faylga yozish imkoniyati ham bor. Faylga yozish ma’lumotni faylga yozish uchun birinchi navbatda ofstream turida o`zgaruvchini e’lon qilib olish kerak:
ofstream chiqarish;
chiqarish ob’yektidan maxsus open funksiyasini quyidagicha tartibda chaqirib olamiz:
chiqarish.open("sonlar.txt");
Bu ko`rsatma satri sonlar.txt deb nomlangan fayl yaratadi. Agar bunday fayl tarkibda avvalroq yaratilgan bo`lsa, uni qayta quradi va yangisi bilan almashtiradi. open funksiyasining chaqirilishi faylni oqim bilan bog`laydi.
Optimal holatda, bir vaqtning o`zida chiqarish ob’yektining faylini yaratish va o`sha faylni ochish quyidagi ko`rsatma satri orqali amalga oshiriladi:
ofstream chiqarish("sonlar.txt");
Faylga ma’lumot yozish uchun xuddi cout ob’yekti kabi “<<” – oqim operatoridan foydalaniladi:
Fayl bilan bog`liq operatsiyalar bajarib bo`lingandan so`ng chiqarish ob’yektidan close funksiyasi chaqirib olinadi.
chiqarish.close();
Faylga chiqarish (stream manipulator, writing to a file);
Ma’lumotni faylga yozish uchun birinchi navbatda ifstream turida o`zgaruvchini e’lon qilib olish kerak:
ifstream kiritish;
kiritish ob’yektidan maxsus open funksiyasini quyidagicha tartibda chaqirib olamiz:
kiritish.open("sonlar.txt");
Bu ko`rsatma satri sonlar.txt deb nomlangan faylni ochadi. Agar bunday fayl tarkibda avval yaratilmagan bo`lsa xatolik berishi mumkin.
Optimal holatda, bir vaqtning o`zida kiritish ob’yektining faylini yaratish va o`sha faylni ochish quyidagi ko`rsatma satri orqali amalga oshiriladi:
ofstream kiritish("sonlar.txt");
Fayldan ma’lumotni o`qish uchun xuddi cin ob’yekti kabi “>>” – oqim operatoridan foydalaniladi:
kiritish >> score1;
kiritish >> score2;
kiritish >> score3;
yoki kiritish >> score1 >> score2 >> score3;
Fayl bilan bog`liq operatsiyalar bajarib bo`lingandan so`ng kiritish ob’yektidan close funksiyasi chaqirib olinadi. kiritish.close();
while sikl operatori (while sikli, sikl tanasi, iteratsiya, sikl sharti);
while sikl operatori o`zining shart qismi rost qiymat qabul qilganda tana qismidagi ko`rsatmalarni bajaradi.
while sikl operatorining sintaksisi quyidagiicha:
while (sikl davom etish sharti)
{
// sikl tanasi
Ko`rsatmalar (s);
}
While siklining blok-sxemasi berilgan. “Sikl tanasi” deb nomlanuvchi sikl bloki takrorlanuvchi ko`rsatma satrlaridan tashkil topgan. Sikl tanasining bir marta bajarilishi siklning iteratsiyasini (yoxud takrorlanishini) anglatadi. Har qanday sikl tana qismining bajarilishini nazorat qiluvchi siklning-davom-etish-sharti – mantiqiy ifodadan tashkil topadi.Bu mantiqiy ifoda har safar sikl tanasining hisoblanishi uchun ishga tushiriladi. Agar u true qiymat qabul qilsa, tana qismi bajariladi; Agar u false qiymat qabul qilsa, butun boshli sikl operatorining ishi to`xtatiladi va dastur o`sha vaqtdagisiklning tana qismini bajarlmaydi.
While sikl operatori siklning-davom-etish-sharti true qiymat qabul qilganda sikl tanasida ko`rsatilgan ko`rsatma satrlarini takroran bajaradi.Siklning-davom-etish-sharti har doim qavslar orasiga olib yozilishi lozim. Siklning tana qismini ifodalovchi figurali qavslar esa, sikl tanasi faqat bitta ko`rsatma satridan iborat bo`lganda turshirib qoldirilishi mumkin. Siklning-davom-etish-sharti u false qiymat qabul qilgunga qadar aniq bajariladi. Dasturlashda ko`p uchraydigan xatoliklardan biri – cheksiz sikllar(bunda sikl tugatilmasdan, sikl tanasidagi ko`rsatma satrlari bajarilaveradi).Agar dasturingiz odatdagidan ko`proq vaqt davomida bajarilish jarayoni (run time)da qolsa va to`xtamasa, unda cheksiz sikl yozilgan bo`lishi mumkin. Agar dastur komanda oynasida ishga tushirilgan bo`lsa, uni Ctrl+C– tugmalar kombinatsiyasi orqali to`xtatish mumkin.
While siklini tashkil etish strategiyasi (step1, step2, step3);
Dasturchilar uchun siklni to`g`ri yozish oson masala emas. Sikl yozishda uchta bosqich ko`rib chiqiladi:
1-bosqich: Takrorlanishi lozim bo`lgan ko`rsatma satrlarini belgilab olish;
2-bosqich: Ko`rsatma satrlarini quyidagi ko`rinishda sikl tanasiga biriktirish:
while (true)
{
Ko`rsatma satrlari;
}
3-bosqich: Sikl-davomiyligi-sharti ni kiritib, siklni nazorat qiluvchi qo`shimcha korsatma satrlarini kiritish:
while (Sikl-davomiyligi-sharti)
{
Ko`rsatma satrlari;
siklni nazorat qiluvchi qo`shimcha korsatma satrlari;
}
Foydalanuvchi tasdig‘iga yoki nazoratchi o‘zgaruvchi qiymatiga ko‘ra while siklini tashkil etish (controlling a loop with user confirmation, controlling a loop with a sentinel value).
Siklni boshqarishniing ko`p tarqalgan usullaridan yana biri – o`qish va qiymat ta’minlash jarayonlarida maxsus qiymatni tayinlashdir. Bu maxsus kiritiluvchi qiymat “Nazoratchi qiymat” nomini olgan bo`lib, kiritishlarning so`ngida belgilanadi. Nazoratchi qiymat qo`llanilgan sikl “Nazoratchi qiymat orqali boshqariluvchi sikl” deb yuritiladi.
Quyida keltirilgan namunada, agar biz ko`p qiymatlar kiritishimiz kerak bo`lsa, bu qiymatlarni klaviaturadan kiritish anchayin malol keladi. Buning uchun oddiy matnli faylda qiymatlarni bo`shliqlar bilan ajratib kiritib olishimiz va dasturni quyidagicha kod orqali ishga tushirishimiz mumkin:
NazoratchiQiymat.exe < kiritish.txt
Bu ko`rsatma kiritishni qayta yo`naltirish deb yuritiladi. Dastur qiymatlarni klaviaturdan kiritishga qaraganda biroz qulayroq bo`lgan – qiymatlarni “kiritish.txt” faylidan kiritish imkonini beradi.
do-while sikl operatori (do-sikli, sikl tanasi, iteratsiya, sikl sharti).
do-while – sikl operatori ham while – sikl operatoriga o`xshaydi, farqli tomoni, u birinchi sikl tanasini hisoblaydi, keyin shartni tekshiradi.do-while – sikl operatorining tuzilishi while – sikl operatorining tuzilishidan farq qiladi. Uning snintaksisi quyidagicha:
do
{
// Sikl tanasi;
Ko`rsatmalar(s);
} while (siklni-davom-ettirish-sharti);
do-while – sikl operatori birinchi sikl tanasini hisoblaydi, keyin hisoblashni davom ettirish yoki to`xtatish uchun shartli ifodani tekshiradi.do-while – sikl operatori birinchi sikl tanasini hisoblaydi. Keyin esa siklni-davom-ettirish-sharti tekshiriladi. Agar shartning qiymati true bo`lsa, sikl tanasi yana hisoblanadi; aks holda, sikl ishi to`xtatiladi.
Ichma-ich sikl operatorlari (nested loop).
Sikl boshqa bir sikl tarkibida kelishi mumkin.
Ichma-ich sikl operatorlari tashki sikl operatori va bir, yoki bir nechta ichki sikl operatorlaridan tashkil topadi. Har safar tashqi sikl bir marta bakarilganda, ichki sikl to`liq bajariladi va ularga yangidan start beriladi.
break va continue kalit so‘zlari (keywords break and continue).
break va continue – kalit so`zlari siklda qo`shimcha boshqaruv imkoniyatlarini taqdim etadi.Avvalroq break kalit so`zini switch operatorida qo`llashni ko`rganmiz. Bundan tashqari, break ni sikl tarkibida ham, siklni darhol to`xtatish uchun qo`llashimiz mumkin. Shuningdek, sikl tarkibida continue ni ham qo`llash mumkin. Bunda hisoblash bajarilgandan so`ng, sikl boshqaruvi, sikl tanasining tugash qismiga yuboriladi. Boshqacha qilib aytganda, break sikl ishini to`xtatsa, continue sikl davomiyligini to`xtatadi.
Funksiyaning aniqlanishi (funksiyaning aniqlanishi, qiymat qaytaruvchi funksiya, void funksiya).
Funksiya qiymat qaytarishi mumkin. Qaytariluvchi qiymat turi – bu o`sha qaytariluvchi qiymatning ma’lumot turi. Ba’zi hollarda funksiya tomonidan qiymat qaytarmasligi talab qilinadi. Bundan hollarda qaytariluvchi qiymat turi void – kalit so`zi orqali ifodalanadi. Misol uchun, qaytariluvchi qiymat turi srand funksiyasida void hisoblanadi. Bajarilishdan so`ng qiymat qaytaruvchi funksiyalar qiymat qaytaruvchi funksiyalar, qiymat qaytarmaydigan funksiyalar esa, void funksiyalar deb ataladi. Funksiya tarkibida e’lon qilingan o`zgaruvchilarni formal parametrlar yoki oddiy qilib, parametrlar deb atash mumkin. Parametr o`rin egallovchiga o`xshaydi. Funksiya chaqirilganda parametrlarga qiymat kiritamiz. Bu qiymat faol parametr yoki argument sifatida kiritiladi. Funksiyaning parametrlar ro`yxati turni, tartibni va funksiyadagi parametrlar sonini ifodalaydi. Funksiya nomi va parametrlar ro`yxati birgalikda funksiya bosh qismi ni tashkil etadi. Funksiyada parametrlarni ishlatish majburiy emas, funksiya parametrlarga ega bo`lmasligi ham mumkin.
Funksiyani chaqirish(funksiyani chaqirish, stek, yozuvni faollashtirish).
Funksiya chaqirilganda uning tana qismidagi ko`rsatmalar bajariladi.Funksiyani yaratishda uning nima ish qilishi belgilab olinadi. Funksiyani ishlatish uchun uni chaqirishimiz yoxud jalb etishimiz lozim. Funksiyani chaqirish uning qiymat qaytarishi yoki qaytarmasligiga qarab ikki xil yo`l bilan amalga oshirilishi mumkin. Agar funksiya qiymat qaytaradigan bo`lsa, unga qiymat kiritgan holda chaqiriladi. Dasturda funksiya chaqirilganda dastur nazorati funksiyani chaqirishga yo`naltiriladi va funksiya hisoblanadi. Funksiya o`z tarkibidagi ko`rsatmalar bajarilganidan so`ng, yoki funksiyaning yakunlanganligini bildiruvchi yopiluvchi figurali qavsdan so`ng dastur nazoratini chaqiruvchiga qaytaradi. Bu dastur max va main funksiyalaridan tashkil topgan. main funksiyasining boshqa funksiyalardan jixati – u operatsion tizim tomonidan chaqiriladi va ishga tushganda dasturdagi hisoblash jarayonlarini amalga oshiradi. Qolgan barcha funksiyalar chaqirish ko`rsatmalari funksiyasi orqali chaqiriladi va ishga tushiriladi.Har safar funksiya chaqirilganda, tizim funksiyaning o`zgaruvchilarini va argumentlarini yozish uchun faollashtirish yozuvi (activation record) (shuningdek, u faollashtirish qobig`i (activation frame) - deb ham ataladi)ni yaratadi va uni chaqiruv steki (call stack) – xotira maydoniga joylashtiradi. Shuningdek, chaqiruv steki ham hisoblash steki (execution stack), bajarilish steki (runtime stack), yoxud mashina steki (machine stack) nomlarini ham olgan bo`lib, odatda, qisqacha qilib “stek” deb ataladi. Funksiya boshqa bir funksiyani chaqirganda, chaqiruvchining faollashtirish yozuvi tegilmasdan ushlab turiladi va yangi funksiya uchun yangi faollashtirish yozuvi yaratiladi. Funksiya ishini tugatganda va boshqaruv nazoratini chaqiruvchisiga qaytarganda, uning faollashtirish yozuvi stekdan olinadi. Chaqiruv steki faollashtirish yozuvlarini “oxirgi kelgan birinchi chiqadi” qoidasiga muvofiq xotiraga yozadi. Oxirgi chaqirilgan funksiyaning faollashtirish yozuvi stekdan birinchi bo`lib olib tashlanadi. Faraz qilaylik, m1 funksiyasi m2 funksiyasini chaqiradi va keyin m2 funksiyasi m3 funksiyasini chaqiradi. Real vaqt tizimi dastlab m1 funksiyasining faollashtirish yozuvini, so`ngra, m2 va m3 larnikini mos ketma-ketlikda stekka kiritadi. m3 bajarilib bo`lgandan so`ng, uning faollashtirish yozuvi stekdan olinadi. m2 bajarilib bo`lgandan so`ng, uning faollashtirish yozuvi stekdan olinadi. m1 bajarilib bo`lgandan so`ng, uning faollashtirish yozuvi stekdan olinadi.
Funksiyaga argumentlarni qiymatlar bilan yuborish (passing arguments by value)
Funksiya argumentlariga qiymat yuborish uchun funksiya chaqirilayotgan joyga funksiya qavslari ichiga yuborilishi kerak bo’lgan qiymatlar joylashtiriladi.
Masalan:
int funk(int a, int b){
return a+b;
}
Int main(){
Cout<
Return 0;
}
Konsolda: 11;
Modulli dasturlash (modularizing code).
Modulli dasturlash bu dasturni har xil modullarga ajratishdir. Masalan dasturinggizni har bir ishini alohida funksiyalar bajaradigan qilib yozish dasturni modullarga ajratishga misol bo’ladi, yoki Dasturni har xil qismlarga ajratib chiqish ham.
Funksiyalarni qayta yuklash (overloading funkstions).
Funksiyani e’lon qilishda bir vaqtning o’zida ikkta har xil o’zgaruvchi qaytaruvchi yoki argumentlari har xil bo’lgan ammo ismlari bir xil qilib e’lon qilish mumkin.
Funksiya qiymat qaytaradigan qismiga yana o’sha funksiyani chaqirish funksiyani qayta yuklash deyiladi.
Funksiya prototiplari (function prototypes, function implementation).
Funksiya prototipi funksiyani bajarilmagan holda e’lon qiladi.
Bilamizki, funksiya chaqirilishidan oldin uning bosh qismi e’lon qilingan bo`lishi kerak. Buning buning yana bir yo`li – barcha funksiyalarning chaqirilishlaridan oldin e’lonni joylashtirishdir. Boshqacha qilib aytganda, funksiya chaqirilishidan oldin uning prototipini e’lon qilish. Shuningdek, funksiya prototipi funksiya e’loni deb ham yuritiladi, ya’ni, tana qismga ega bo`lmagan bosh qism sifatida qaraladi. Funksiyaning to`liq qo`llanilishi esa, keyinroq, dasturda tarkibida beriladi. Prototipda parametrlar nomlari emas, faqatgina parametrlar turlari kerakli. C++ kompilyatori parameter nomlarini inobatga olmaydi. Prototip kompilyatorga funksiya nomi, u qaytaruvchi turi, parametrlar soni va har bir parametrlarning turlari haqida ma’lumot beradi. Funksiyani e’lon qilish deganda uning amalga hisoblashga ega bo`lmagan, faqat bosh qismi tushunilsa, funksiyaning aniqlanishi deganda hisoblashlarni amalga oshirish orqali fuksiyani amalga oshiruvchi funksiya tanasi tushuniladi.
“Jimlik holati” argumnetlari (default arguments).
Funksiya tarkibidagi parametrlarga jimlik qoidasi qiymatlarini ta’minlash mumkin. C++ funksiyalarni e’lon qilishda uning parametrlarini jimlik qoidasi bo`yicha qiymatlar bilan ta’minlashga ruxsat beradi. Funksiyalarga jimlik qoidasi qiymatlari funksiya argumentlarsiz chaqirilganda ta’minlanadi. Funksiya jimlik qiymatiga ega bo`lgan va ega bo`lmagan parametrlardan tashkil topganda, jimlik qiymatiga ega bo`lgan parametrlar oxirida e’lon qilinishi kerak.
Lokal va global o‘zgaruvchilar (local and global variables).
Lokal o’zgaruvchilar dasturda biror funksiyani ichida e’lon qilingan o’zgaruvchilar ular faqat funksiya ichida taniladi va boshqa funksiyalar ularni taanimaydi.
Global o’zgaruvchilar dastur kodi yozilishida tashqarida e’lon qilingan o’zgaruvchidir (hech qanday funksiya ichida emas) va bu o’zgaruvchi dasturning butun qismida taniladi.
Argumentlarni havolalar orqali uzatish (passing arguments by reference).
O'zgarish qiymati ko'p hollarda mos bo'lsa ham, bir nechta cheklovlarga ega. Birinchidan, biror funktsiyaga katta struktura yoki klassni o'tkazishda, qiymat bo'yicha o'tish argumentning nusxasini funktsiya parametriga o'tkazadi. Ko'p hollarda, bu keraksiz ishlash demakdir, chunki asl o’zgaruvchi etarli edi. Ikkinchidan, argumentlarni qiymat bo'yicha uzatish paytida, chaqirilgan joyga qiymatni qaytarishning yagona usuli - funktsiyaning return qiymati orqali. Ko'pincha bu mos bo'lsa-da, argumentni o'zgartirish funktsiyasi aniqroq va samaraliroq bo'lishi mumkin bo'lgan holatlar mavjud.
O'zgaruvchini havola oraqli uzatish uchun, biz oddiy parametrlarga emas, balki parametrlar parametrlariga murojaat qilamiz.
1
2
3
4
|
void addOne(int &ref) // ref is a reference variable
{
ref = ref + 1;
}
|
Funktsiya chaqirilganda, ref argumentga havola bo'ladi. O'zgaruvchiga havola o'zgaruvchining o'zi bilan bir xil bo'lganligi sababli, havolaga kiritilgan har qanday o'zgartirish argumentga o'tkaziladi!
Quyidagi misol buni amalda ko'rsatmoqda:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
void addOne(int &ref)
{
ref = ref + 1;
}
int main()
{
int value = 5;
cout << "value = " << value << '\n';
addOne(value);
cout << "value = " << value << '\n';
return 0;
}
|
Ushbu dastur qiymati havola orqali o'tish uchun ishlatgan dasturimiz bilan bir xil, ammo &ref parametri bundan mustasno, endi oddiy o'zgaruvchining o'rniga havola mavjud. AddOne (value) deb chaqirganinggizda, ref asosiyning o'zgaruvchisiga mos keladi.Ushbu parcha quyidagi ma’lumotni chiqaradi chiqaradi:
Value = 5
Value = 6
Konstanta havola parametrlari (constant reference parameter).
Do'stlaringiz bilan baham: |