• II Bob. Dasturni yaratishda qo‘llanilgan dasturiy vositalar va tizim interfeysi. 2.1. C dasturlash tili
  • Anders Hejlsberg
  • 2.1.1-chizma. C tili oilasi
  • Buxoro davlat universiteti




    Download 186.04 Kb.
    bet4/5
    Sana10.04.2017
    Hajmi186.04 Kb.
    1   2   3   4   5

    Birinchi bob xulosasi.

    Malakaviy bitiruv ishining birinchi bob mavzusi dasturlash tarixi va uning istiqboli haqida. Ushbu bobda dasturlash tillari va ularning kelib chiqishi, оbyеktgа mo‘ljаllаngаn dаsturlаsh hamda fayl tizimlari: afzalliklari va kamchiliklari bo’limlarida to’xtalib o’tilgan. Bunda birinchi bo’limda birinchi EHM lar uchun dasturlarni dasturchilar mashina kodi tilida yozilganligi. Bu juda qiyin va uzoq vaqt talab etadigan jarayon edi. Dastur tuzishni boshlash va ishlatib ko’rish orasida ancha vaqt o’tar edi. Bunday muammolarni еchish faqatgina dasturlash jarayonini rivojlantirish, optimizatsiya qilish orqaligina bajarilishi mumkin edi. Dasturchilar mеhnatini iqtisod qiluvchi bunday “jixoz” o’rnini qism dasturlari egalladi. 1944 yil avgustida rеlеli “Mark-I” mashinasi uchun Grеys Xoppеr (dasturchi ayol, AQSh ning dеngiz ofitsеri) boshchiligida sin x ni hisoblovchi qism dasturi yozilganligi haqida so’z yuritilgan. Ikkinchi bo’limda funksiyalar nima uchun kerakligi, funksiya o‘zi nima ekanligini tushuntirib o’tilgan. Dasturlashda, xuddi matematikadagi kabi, unga bog‘liq ko‘pgina argumentlarning uning ko‘pgina ma’nolarida aks etilishi, funksiya argumentning har bir ma’nolari jamlanmasi uchun uning bajargan ishi natijasi sifatida qandaydir ma’no qaytarishi, funksiyalar o’zi nima uchun kerakligi misollar bilan oydinlashtirib o’tilgan. Uchinchi bo’limda esa fayl tizimlari haqida so’z yuritilgan bo’lib, bunda hozirgi operatsion tizmlarda ishlatiluvchi fayllar haqida. Ushbu fayl tizimlaring asosiy yutug’i, uning standart strukturaga ega ekanligi haqida so’z yuritilgan.



    II Bob. Dasturni yaratishda qo‘llanilgan dasturiy vositalar va tizim interfeysi.

    2.1. C# dasturlash tili

    C# dasturi 90 yillarning oxirida ishlab chiqilib Microsoft. NET ning bir qismiga aylandi. Al`fa versiya sifatida 2000 yildan boshlab ishlatila boshladi. C # bosh arxitektori butun dunyo dasturchilari ichida birinchilar qatorida turgan va butun dunyo tomonidan tan olingan Anders Hejlsberg bo`ldi. Uning 1980 yillarda chiqarilgan Turbo Paskal dasturi orqali ham tanishimiz mumkin.

    C# bevosita C, C va Java bilan bog`liq. Chunki bu uchta til dasturlash olamida eng mashhur tillardir. Bundan tashqari professional dasturchilar C va C ni va juda ko`pchilik Java tilida ish yuritadi.

    Biz C# ning kelib chiqish genealogik daraxtini ko`rib chiqsak.



    frame1

    frame2
    frame3 frame4

    2.1.1-chizma. C tili oilasi

    Rasmda C va C tillari C# ning asosini tashkil qilishini ko`rib turibmiz. Lekin C# va Java o`zaro o`zgacha ravishda bog`langan. Ularning kelib chiqishi C va C bo`lsada o`zaro bir-biridan farq qiladi . C# tili ham obyektga mo`ljallangan tillar sirasiga kiradi.



    C# dasturlash tilining asosiy operatorlari. C# sistemasi asosan quyidagi qismlardan iborat. Bular dasturni yozish redaktori, C# tili va standart kutubxonalardir. C# dasturi ma'lum bir fazalardan o'tadi. Birinchisi dasturni yozish va tahrirlash, ikkinchisi preprosessor amallarini bajarish, kompilyatsiya, kutubxonalardagi obyekt va funksiyalarni dastur bilan bog'lash (link), xotiraga yuklash (load) va bajarish (execute).

    //C# dagi ilk dasturimiz

    /*Ekranga yozuv chiqarish*/

    using System;

    namespace ConsoleApplication1

    { class Program

    { static void Main(string[] args)

    { Console.WriteLine("HELO WORLD!");}

    } }

    Ekranda: Hello World!

    Dasturni satrma-satr tahlil qilaylik. C# da ikki tur sharhlar mavjud. /* bilan boshlanib, */ bilan tugaydigani bir necha satrni egallashi mumkin.Ya’ni bu belgilar orasida qolgan hamma yozuv sharh hisoblanadi. Bu tur sharh C dan qolgan. C# yangi ko'rinishdagi sharhlar ham kiritilgan. Bu // bilan boshlanadi va kuchi shu satr oxirigacha saqlanadi. Sharhlar yoki boshqacha qilib aytganda kommentariylar kompilyator tomonidan hisobga olinmaydi va hech qanday mashina ijro kodiga aylantirilmaydi. Sharhlar kerakli joyda, funksiyalardan oldin, o'zgaruvchilar e'lonidan keyin yozilganda, dasturni tushunish ancha osonlashadi va keyinchalik programma ishlash mantig'ini esga solib turadi. using System; Bu juda katta kutubxona bo’lib unda har xil funksiyalar va klasslar mavjud. namespace ConsoleApplication1 esa ushbu klass qaysi nom ichida joylashganligini bildirish uchun mo’ljallangan.Void main() har bir C# dasturining qismidir. main dan keyingi () qavslar C# ning funksiya deb ataluvchi blokining boshlangangini bildiradi. C# dasturi bir yoki bir necha funksiyalardan iborat. Va shulardan aniq bitta funksiya main deb atalishi shart. Bunda main dastur ichida keladigan birinchi funksiya bo'lmasligi ham mumkin. Operatsion sistema dastur ijrosini main() funksiyasidan boshlaydi. main() dan oldin kelgan int esa main funksiyasidan qaytish qiymati tipini belgilaydi. Bunda int integer, ya’ni butun son deganidir. main() ning qaytargan qiymati operatsion sistemaga boradi. { qavs funksiya va boshqa bloklar tanasini boshlaydi. Blokni yopish uchun } qavsi ishlatilinadi.

    Console.WriteLine("HELO WORLD!");satri C# da ifoda deb ataladi. C# dagi har bir ifoda; (nuqta-vergul) bilan tugatilishi shart. Ortiqcha; bo'sh ifoda deyiladi. Uni qo'yish dastur tezligiga ta'sir qilmaydi. Kirish va chiqish (Input/Output), ya’ni dasturga kerakli ma'lumotlarni kiritish va ular ustida dastur tomonidan bajarilgan amallar natijalarini olish C# da oqim obyektlari orqali bajarilishi mumkin. Lekin kirish/chiqishni C dagi kabi funksiyalar bilan ham amalga oshirsa bo'ladi. C# falsafasiga ko'ra har bir kirish/chiqish jihozi (ekran, printer, klaviatura...) baytlar oqimi bilan ishlagandek qabul qilinadi.

    Yuqoridagi ifoda bajarilganda bizning "Hello World!" gapimiz standart chiqish oqimi obyekti writeline ga (writeline - console out) jo'natiladi. Normal sharoitda bu oqim ekranga ulangandir. C# da satrlar (string) qo'shtirnoqlar (") orasida bo'ladi. Bitta harfli literalar esa bitta tirnoq - apostrof (') ichiga olinadi. Misol uchun: 'A','$'. Bitta harf yoki belgini qo'shtirnoq ichiga olsa u satr kabi qabul qilinadi. Console.Writeline operatori oqimga kiritish operatori deyiladi. Programma ijro etilganda Console.Readline operatorining o'ng tomonidagi argument ekranga yuboriladi. Bunda ekranga qo'shtirnoq ("...") ichidagi narsa bosib chiqariladi. Lekin e'tibor bersak, \n belgisi bosilmadi. \ (teskari kasr - backslash) belgisi maxsus ma'noga ega. U o'zidan keyin kelgan belgi oqim buyrug'i yoki manipulyatori ekanligini bildiradi. Shunda \ belgisi bilan undan keyin kelgan belgi buyruq ketma-ketligida aylanadi.

    Bularning ro'yxatini beraylik.

    \n - Yangi satr. Kursor yangi qator boshidan joy oladi.

    \t - Gorizontal tabulyatsiya (kursor bir-necha harf o'nga siljiydi).

    \v - Vertikal tabulyatsiya (bir-necha satr tashlanib o'tiladi).

    \r - Qaytish. Kursor ayni satr boshiga qaytadi, ya’ni yangi satrga o'tmaydi.

    \a - Kompyuter dinamiki chalinadi.

    Kompyuter (ing . computer - hisoblayman), EHM (Elektron Hisoblash Mashinasi) - oldindan berilgan dastur (programma) boʻyicha ishlaydigan avtomatik qurilma. Elektron hisoblash mashinasi (EHM) bilan bir xildagi atama.

    \\ - Ekranga teskari kasr belgisini bosish uchun qo'llaniladi.

    \" - Ekranga qo'shtirnoq belgisini bosish uchun qo'llaniladi.

    return 0; (return - qaytmoq) ifodasi main() funksiyasidan chiqishning asosiy yo'lidir. 0 (nol) qiymatining qaytarilishi operatsion sistemaga ushbu dastur normal bajarilib tugaganini bildiradi. return orqali qaytadigan qiymat tipi funksiya e'lonidagi qaytish tipi bilan bir xil bo'lishi kerak. Bizda bu e'lon int main(){...} edi va 0 int tipiga mansubdir. Bundan keyin return orqali qaytarilayotgan ifodani qavs ichiga olamiz. Misol uchun return (6). Bu qavslar majburiy emas, lekin bizlar ularni programmani o'qishda qulaylik uchun kiritamiz.



    C# da arifmetik amallar. Ko'p programmalar ijro davomida arifmetik amallarni bajaradi. C# dagi amallar quyidagi jadvalda berilgan. Ular ikkita operand bilan ishlatiladi. C# dagi amal arifmetik operator algebraik ifoda C# dagi ifodasi

    Qo'shish h 19 h 19

    Ayirish - f-u f-u

    Ko'paytirish * sl s*l

    Bo'lish / v/d, vod v/d

    Modul olish % k mod 4 k%4

    Bularning ba'zi birlarinig xususiyatlarini ko'rib chiqaylik. Butun sonli bo'lishda, ya’ni bo'luvchi ham, bo'linuvchi ham butun son bo'lganda, javob butun son bo'ladi. Javob yaxlitlanmaydi, kasr qismi tashlanib yuborilib,butun qismining o'zi qoladi.

    Modul operatori (%) butun songa bo'lishdan kelib chiqadigan qoldiqni beradi. x%y ifodasi x ni y ga bo'lgandan keyin chiqadigan qoldiqni beradi. Demak, 7%4 bizga 3 javobini beradi. % operatori faqat butun sonlar bilan ishlaydi. Vergulli (real) sonlar bilan ishlash uchun "math.h" kutubxonasidagi f mod funksiyasini qo’llash kerak.C# da qavslarning ma'nosi xuddi algebradagidekdir. Undan tashqari boshqa boshqa algebraik ifodalarning ketma-ketligi ham odatdagidek. Ko'paytirish, bo'lish va modul olish operatorlari ijro ko'radi. Agar bir necha operator ketma-ket kelsa, ular chapdan o'nga qarab ishlanadi. Bu operatorlardan keyin esa qo'shish va ayirish ijro etiladi.

    MANTIQIY SOLISHTIRISH OPERATORLARI

    C# bir necha solishtirish operatorlariga ega.

    Algebraik ifoda C# dagi operator C# dagi ifoda Algebraik ma'nosi:

    tenglik guruhi (==) x==y x tengdir y ga;

    teng emas (!=) x!=y x teng emas y ga;

    solishtirish guruhi (>) x>y x katta y dan (<) < x

    katta-teng (>=) x>=y x katta yoki teng y ga;

    kichik-teng (<= ) x<=y x kichik yoki teng y ga;

    ==, !=, >= va <= operatorlarni yozganda oraga bo'sh joy qo'yib ketish sintaksis xatodir. Ya’ni kompilyator dasturdagi xatoni ko'rsatib beradi va uni tuzatilishini talab qiladi. Ushbu ikki belgili operatorlarning belgilarining joyini almashtirish, masalan <= ni =< qilib yozish ko'p hollarda sintaksis xatolarga olib keladi. Gohida esa != ni =! deb yozganda sintaksis xato vujudga ham, bu mantiqiy xato bo'ladi. Mantiqiy xatolarni kompilyator topa olmaydi. Lekin ular programma ishlash mantig'ini o'zgartirib yuboradi. Bu kabi xatolarni topish esa ancha mashaqqatli ishdir (! operatori mantiqiy inkordir). Yana boshqa xatolardan biri tenglik operatori (==) va tenglashtirish, qiymat berish operatorlarini (=) bir-biri bilan almashtirib qo'yishdir. Bu ham juda ayanchli oqibatlarga olib keladi, chunki ushbu xato aksariyat hollarda mantiq xatolariga olib keladi.

    Boshqaruv ifodalari. Bu bo'limda biz strukturali dasturlashning asosiy prinsip va qismlarini ko'rib chiqamiz. Ma'lum bir dasturni yozish uchun belgilangan qadamlarni bosib o'tish kerak. Masala aniqlangandan so'ng uni yechish uchun mo'ljallangan algoritm tuziladi. Keyin esa psevdokod yoziladi. Psevdokod algoritmda bajariladigan qadamlarni ko'rsatadi. Bunda faqat bajariladigan ifodalar ko'rib chiqiladi. Psevdokodda o'zgaruvchi e'lonlari yoki boshqa ma'lum bir dasturlash tiliga mansub bo'lgan yordamchi amallar bo'lmaydi. Psevdokodni yozish dasturlashni ancha osonlashtiradi, algoritm mantig'ini tushunishga va uni rivojlanritishga katta yordam beradi. Misol uchun bir dasturning rejasi va psevdokodi 3-4 oy yozilgan bo'lsa va yuqori darajada detallashtirilgan bo'lsa, ushbu dasturning C# yoki boshqa tildagi kodini yozish 2-3 hafta vaqt oladi xolos. Bu yozilgan programmada xato ancha kam bo'ladi, uni keyinchalik takomillashtirish arzonga tushadi. Hozirgi paytda dastur o'zgarishi favqulotda hodisa emas, balki zamon talabidir.

    Dastur ijro strukturalari. Asosan dasturdagi ifodalar ketma-ket, navbatiga ko'ra ijro etiladi. Gohida bir shart bajarilishiga ko'ra, ijro boshqa bir ifodaga o'tadi. Navbatdagi emas, dasturning boshqa yerida joylashgan ifoda bajariladi. Ya’ni sakrash yoki ijro ko'chishi vujudga keladi. 60-chi yillarga kelib, dasturlardagi ko'pchilik xatolar aynan shu ijro ko'chishlarining rejasiz ishlatilishidan kelib chiqishi ma'lum bo'ldi. Bunda eng katta aybdor deb bu qo'shishlarni amalga oshiruvchi goto (...ga bor) ifodasi belgilandi. goto dastur ijrosini deyarli istalgan yerga ko'chirib yuborishi mumkin. Bu esa programmani o'qishni va uning strukturasini murakkablashtirib yuboradi. Shu sababli "strukturali dasturlash" atamasi "goto ni yo'q qilish" bilan tenglashtirilardi. Shuni aytib o'tish kerakki, goto kabi shartsiz sakrash amallarini bajaruvchi ifodalar boshqa dasturlash tillarida ham bor. Tadqiqotlar shuni ko'rsatdiki, istalgan programma goto siz yozilishi mumkin ekan. goto siz yozish uslubi strukturali dasturlash deb nom oldi va bunday dastur yozish metodi katta iqtisodiy samara beradi.

    Uslub - tilning inson faoliyatining muayyan sohasi bilan bogʻliq vazifalariga koʻra ajratilishi. Kishilar faoliyatning barcha sohalarida aloqa qilish jarayonida tildagi leksik, frazeologik, grammatik va fonetik vositalarni tanlash va ishlatishda birbirlaridan maʼlum darajada farq qiladilar.
    Samara (1936-91-yillarda Kuybishev "Куйбышев") - Samara (rus. Самара) Rossiya Federatsiyasidagi shahar, Samara viloyati markazi. Volga daryosining chap sohilidagi port shahar. Volgaga Samara daryosi quyilgan joyda joylashgan.
    Strukturali dasturlash asosi shundan iboratki, har bir programma faqatgina uch xil boshqaruv strukturalaridan iboratdir. Bular ifodalarni ketma-ket ijro etish strukturasi (sequence structure), tanlash strukturasi (selection structure) va amalni qayta ijro etish strukturasidir (repetition structure). Ifodalarni ketma-ket ijro etish strukturasi C# tomonidan ta'minlanadi. Normal sharoitda C# ifodalari dasturdagi navbatiga ko'ra bajariladi. Tanlash buyruqlari uchtadir. Bular if, if/else va switch dir. Qayta ijro etish buyruqlari guruhiga ham uchta a'zo bor, bular while, do/while va for. Bularni har birini keyinroq tahlil qilib chiqamiz.

    Yuqoridagi buyruqlar nomlari C# dasturlash tilining maxsus so'zlaridir. Dasturchi bu so'zlarni o'zgaruvchi yoki funksiyalar nomi sifatida qo'llashi ta'qiqlanadi. Quyida C# ning ajratilgan so'zlarining to'liq ro'yxati berilgan.

    C# va C ga tegishli:

    auto do goto signed unsigned

    break double if sizeof void

    case else int static volatile

    char enum long struct while

    const extern register switch

    continue float return typedef

    default for short union

    Faqat C# ga qarashli:

    asm explicit operator this virtual

    bool false private throw wchar_t

    catch friend protected true

    class inline public try

    const_cast mutable reinterpret_cast typeid

    delete namespace static_cast typename

    dynamic_cast new template using

    C# dagi yettita boshqaruv strukturasini aytib o'tdik. Ular bittagina boshlanish nuqtasiga va bittagina chiqish nuqtasiga egadirlar. Demak biz bu dastur bo'laklarini ketma-ket ulab ketishimiz mumkin. Boshqaruv strukturalarining bu kabi ulanishini devorning g'ishtlarini ustma-ust qalashga ham taqqoslasak bo'ladi. Yoki biz bu bloklarni bir-birining ichiga joylashtirishimiz mumkin. Bu kabi qo'llashish ikkinchi uslub bo'ladi. Mana shu ikki yo'l bilan bog'langan yettita blok yordamida biz istalgan dasturimizni yoza olamiz.



    If strukturasi. Biz shartga ko'ra bir necha harakat yo'lidan bittasini tanlaymiz.
    Harakat - borliqnint ajralmas xususiyati boʻlgan oʻzgaruvchanlikni (q. Barqarorlik va oʻzgaruvchanlik) ifodalovchi falsafiy kategoriya. H. tushunchasi imkoniyatlarning voqelikka aylanishini, roʻy berayotgan hodisalarni, olamning betoʻxtov yangilanib borishini aks ettiradi.
    Misol uchun

    agar bolaning yoshi 7 ga teng yoki katta bo'lsa u maktabga borishi mumkin bo'lsin.

    Buni C# da if ni qo'llab yozaylik.

    if (yosh >= 7)

    maktab();

    Bu yerda shart bajarilishi yoki bajarilmasligi mumkin. Agar yosh o'zgaruvchisi 7 ga teng yoki undan katta bo'lsa shart bajariladi va maktab() funksiyasi chaqiriladi. Bu holat true (to'g'ri) deyiladi. Agar yosh 7 dan kichik bo'lsa, maktab() tashlab o'tiladi. Ya’ni false (noto'g'ri) holat yuzaga keladi. Biz shart qismini mantiqiy operatorlarga asoslanganligini ko'rib chiqqan edik. Aslida esa shartdagi ifodaning ko'rinishi muhim emas – agar ifodani nolga keltirish mumkin bo'lsa false bo'ladi, noldan farqli javob bo'lsa, musbatmi, manfiymi, true holat paydo bo'ladi va shart bajariladi.

    Bunga qo'shimcha qilib o'tish kerakki, C# da maxsus bool tipi mavjud. Bu tipdagi o'zgaruvchilarning yordamida bul (mantiqiy) arifmetikasini amalga oshirish mumkin. bool o'zgaruvchilar faqat true yoki false qiymatlarini olishlari mumkin.

    if/else STRUKTURASI if ni qo'llaganimizda ifoda faqat shart haqiqat bo'lgandagina bajariladi, aks holda tashlanib o'tiladi. if/else yordamida esa shart bajarilmaganda (false natija chiqqanda) else orqali boshqa bir yo'ldan borishni belgilash mumkin. Misolimizni takomillashtirsak. Bola 7 yosh yoki undan katta bo'lsa maktabga, 7 dan kichkina bo'lsa bog'chaga borsin.



    if (yosh >= 7)

    maktab(); //nuqta-vergul majburiydir

    else

    bogcha();

    Yuqorida if ga tegishli bo'lgan blok bitta ifodadan (maktab()) iborat. Shu sababli nuqta-vergul qo'yilishi shart. Buni aytib o'tishimizning sababi, masala Pascalda hech narsa qo'yilmasligi shart.

    C# da bitta ifosa turgan joyga ifodalar guruhini {} qavslarda olingan holda qo'ysa bo'ladi. Masalan:

    if (yosh >= 7){

    console.writeline("Maktabga!\n");

    maktab();

    }

    else{

    console.writeline( "Bog'chaga!\n" );

    bogcha();

    }

    Aslida har doim {} qavslarni qo'yish yaxshi odat hisoblanadi,keyinchalik bir ifoda turgan joyga qo'shimcha qilinganda qavslardan biri unutilib qolmaydi. Strukrurali dasturlashning yana bir harakterli joyi shundaki tabulyatsiya, bo'sh joy va yangi satrlar ko'p qo'llaniladi. Bu programmani o'qishni osonlashtirish uchun qilinadi. C# uchun bo'sh joyning hech ahamiyati yo'q, lekin dasturni tahrir qilayatgan odamga buyruqlar guruhini, bloklarni tabulyatsiya yordamida ajratib bersak, unga katta yordam bo'ladi. Yuqoridagini quyidagicha ham yozish mumkin:



    if(yosh>=7){ console.writeline ("Maktabga!\n");

    maktab()}else{ console.writeline

    ("Bog'chaga!\n");bogcha()};

    Biroq buni o'qish ancha murakkab ishdir.

    C# da if/else strukturasiga o'xshash ?: shart operatori (conditional operator) ham bordir. Bu C# ning bittagina uchta argument oluvchi operatori. Uch operand va shart operatori shart ifodasini beradi. Birinchi operand orqali shartimizni beramiz. Ikkinchi argument shart true (haqiqat) bo'lib chiqqandagi butun shart ifodasining javob qiymatidir. Uchinchi operand shartimiz bajarilmay (false) qolgandagi butun shart ifodasining qiymatidir. Masalan:

    bool bayroq;

    int yosh = 10;

    bayroq = ( yosh >= 7 ? true : false );

    Agar yosh 7 ga teng yoki katta bo'lsa, bool tipidagi o'zgaruvchimiz true qiymatini oladi, aks taqdirda false bo'ladi. Shart operatori qavslar ichida bo'lishi zarur, chunki uning kuchi katta emas. Javob qiymatlar bajariladigan funksiyalar ham bo'lishi mumkin:

    yosh >= 7 ? maktab() : bogcha();

    if/else strukturalarini bir-birining ichida yozishimiz mumkin. Bunda ular bir-biriga ulanib ketadi.



    switch strukturasi. if-else-if yordami bilan bir necha shartni test qilishimiz mumkin. Lekin bunday yozuv nisbatan o'qishga qiyin va ko'rinishi qo'pol bo'ladi. Agar shart ifoda butun son tipida bo'lsa yoki bu tipga keltirilishi mumkin bo'lsa, biz switch (tanlash) ifodalarini ishlata olamiz. switch strukturasi bir necha case etiketlaridan (label) va majburiy bo'lmagan default etiketidan iboratdir. Etiket bu bir nomdir. U dasturnig bir nuqtasidaga qo'yiladi. Programmaning boshqa yeridan ushbu etiketga o'tishni bajarish mumkin. O'tish yoki sakrash goto bilan amalga oshiriladi, switch blokida ham qo'llaniladi. 5 lik sistemadagi bahoni so'zlik bahoga o'tkazadigan blokni yozaylik.

    int baho;

    baho = 4;

    switch (baho) {

    case 5: console.writeline ("A'lo");break;

    case 4: console.writeline( "Yahshi");break;

    case 3: console.writeline( "Qoniqarli");break;

    default: console.writeline( "Baho xato kiritildi!";break

    }

    switch ga kirgan o'zgaruvchi (yuqorigi misolda baho) har bir case etiketlarining qiymatlari bilan solishtirilib chiqiladi. Solishtirish yuqoridan pastga bajariladi. Shartdagi qiymat etiketdagi qiymat bilan teng bo'lib chiqqanda ushbu case ga tegishli ifoda yoki ifodalar bloki bajariladi. So'ng break (buzmoq, tugatmoq) sakrash buyrug'i bilan switch ning tanasidan chiqiladi. Agar break qo'yilmasa, keyingi etiketlar qiymatlari bilan solishtirish bajarilmasdan ularga tegishli ifodalar ijro ko'raveradi. Bu albatta biz istamaydigan narsa. default etiketi majburiy emas. Lekin shart chegaradan tashqarida bo'lgan qiymatda ega bo'lgan hollarni diagnostika qilish uchun kerak bo'ladi. case va etiket orasida bo'sh joy qoldirish shartdir. Chunki, masalan, “case 4:” ni case4: deb yozish oddiy etiketni vujudga keltiradi, bunda sharti test qilinayotgan ifoda 4 bilan solishtirilmay o'tiladi.

    while takrorlash strukturasi. Takrorlash strukturasi bir ifoda yoki blokni ma'lum bir shart to'g'ri (true) bo'lishi davomida qaytarish imkonini beradi. Qaytarilayatgan ifoda shartga ta'sir ko'rsatishishi kerak. Ma'lum bir vaqt o'tgandan keyin shart false ga o'zgartilishi kerak. Bo'lmasa while (davomida) tugatilmaydi. while faqat o'zidan keyin kelgan ifodaga ta'sir qiladi. Agar biz bir guruh amallarni qaytarmoqchi bo'lsak, ushbu blokni {} qavslar ichiga olishimiz kerak. Shart takrorlanuvchi blokning boshida tekshirilgani sababli, agar shart noto'g'ri bo'lib chiqsa, blokni hech ijro ko'rmasligi ham mumkin.

    while (shart) {

    ifoda1;

    ifoda2;

    .}

    do/while takrorlash strukturasi. do/while ifodasi while strukturasiga o'xshashdir. Bitta farqi shundaki while da shart boshiga tekshiriladi. do/while da esa takrorlanish tanasi eng kamida bir marta ijro ko'radi va shart strukturaning so'ngida test qilinadi. Shart true bo'lsa blok yana takrorlanadi. Shart false bo'lsa do/while ifodasidan chiqiladi. Agar do/while ichida qaytarilishi kerak bo'lgan ifoda bir dona bo'lsa {} qavslarning keragi yo'qdir. Quyidagicha bo'ladi:

    do

    ifoda;


    while (shart);

    Lekin {} qavslarning yo'qligi dasturchini adashtirishi mumkin. Chunki qavssiz do/while oddiy while ning boshlanishiga o’xshaydi. Buni oldini olish uchun {} qavslarni har doim qo'yishni tavsiya etamiz.



    do {

    ifoda1;

    ifoda2;

    } while (shart);

    Qiymat berish operatorlari. Bu qismda keyingi bo'limlarda kerak bo'ladigan tushunchalarni berib o'tamiz. C# da hisoblashni va undan keyin javobni o'zgaruvchiga beruvchi bir necha operator mavjuddir. Misol uchun:



    k = k * 4; ni

    k *= 4; deb yozsak bo'aladi.

    Bunda *= operatorining chap argumenti o'ng argumentga qo'shiladi va javob chap argumentda saqlanadi. Biz har bir operatorni ushbu qisqartirilgan ko'rinishda yoza olamiz ( =, -=, /=, *= %=). Ikkala qism birga yoziladi. Qisqartirilgan operatorlar tezroq yoziladi, tezroq kompilyatsiya qilinadi va ba'zi bir hollarda tezroq ishlaydigan mashina kodi tuziladi.

    Oshirish va kamaytirish operatorlari (increment and decrement)

    C# da bir argument oluvchi inkrenet ( ) va dekrement (--) operatorlari mavjuddir. Bular ikki ko'rinishda ishlatilinadi, biri o'zgaruvchidan oldin ( f - preinkrement, --d - predekrement), boshqasi o'zgaruvchidan keyin (s - postinkrement, s-- - postdekrement) ishlatilgan holi. Bularning bir-biridan farqini aytib o'taylik. Postinkrementda o'zgaruvchining qiymati ushbu o'zgaruvchi qatnashgan ifodada ishlatilinadi va undan keyin qiymati birga oshiriladi. Preinkrementda esa o'zgaruvchining qiymati birga oshiriladi, va bu yangi qiymat ifodada qo'llaniladi. Predekrement va postdekrement ham aynan shunday ishlaydi lekin qiymat birga kamaytiriladi. Bu operatorlar faqatgina o'zgaruvchining qiymatini birga oshirish/kamaytirish uchun ham ishlatilinishi mumkin, ya’ni boshqa ifoda ichida qo'llanilmasdan. Bu holda pre va post formalarining farqi yo'q. Masalan:



    r;

    r ;

    Yuqoridagilarning funksional jihatdan hech qanday farqi yo'q, chunki bu ikki operator faqat r ning qiymatini oshirish uchun qo'llanilmoqda. Bu operatorlarni oddiy holda yozsak:



    r = r 1; d = d - 1;

    Lekin bizning inkrement/dekrement operatorlarimiz oddiygina qilib o'zgaruvchiga bir qo'shish/ayirishdan ko'ra tezroq ishlaydi.

    Mantiqiy operatorlar. Bosqaruv strukturalarida shart qismi bor dedik. Shu paytgacha ishlatgan shartlarimiz ancha sodda edi. Agar bir necha shartni tekshirmoqchi bo'lganimizda ayri-ayri shart qismlarini yozardik. Lekin C# da bir necha sodda shartni birlashtirib, bitta murakkab shart ifodasini tuzishga yordam beradigan mantiqiy operatorlar mavjuddir. Bilar mantiqiy VA - && (AND), mantiqiy YOKI - || (OR) va mantiqiy INKOR - ! (NOT). Bular bilan misol keltiraylik. Faraz qilaylik, bir amalni bajarishdan oldin, ikkala shartimiz (ikkitadan ko'p ham bo'lishi mumkin) true (haqiqat) bo'lsin.

    if (i < 10 && l >= 20){}

    Bu yerda {} qavslardagi ifodalar bloki faqat i 10 dan kichkina va l 20 dan katta yoki teng bo'lgandagina ijro ko'radi.

    AND ning (&&) jadvali:

    ifoda1 ifoda2 ifoda1 && ifoda2

    false (0) false (0) false (0)

    true (1) false (0) false (0)

    false (0) true (1) false (0)

    true (1) true (1) true (1)

    Bu yerda true ni yeriga 1, false ni qiymati o'rniga 0 ni qo'llashimiz mumkin.

    for takrorlash strukturasi. for strukturasi sanovchi (counter) bilan bajariladigan takrorlashni bajaradi. Boshqa takrorlash bloklarida (while, do/while) takrorlash sonini kontrol qilish uchun ham sanovchini qo'llasa bo'lardi, bu holda takrorlanish sonini oldindan bilsa bo'lardi, ham boshqa bir holatning vujudga kelish-kelmasligi orqali boshqarish mumkin edi.Ikkinchi holda ehtimol miqdori katta bo'ladi. Masalan qo'llanuvchi belgilangan sonni kiritmaguncha takrorlashni bajarish kerak bo'lsa biz while li ifodalarni ishlatamiz. for da esa sanovchi ifodaning qiymati oshirilib (kamaytirilib) borilaveradi va chegaraviy qiymatni olganda takrorlanish tugatiladi. for ifodasidan keyingi bitta ifoda qaytariladi. Agar bir necha ifoda takrorlanishi kerak bo'lsa, ifodalar bloki {} qavs ichiga olinadi. for strukturasi uch qismdan iboratdir. Ular nuqta-vergul bilan bir-biridan ajratiladi. for ning ko'rinishi:

    for( 1. qism ; 2. qism ; 3. qism ){

    takror etiladigan blok }

    1. qism - e'lon va initsalizatsiya.

    2. qism - shartni tekshirish (oz'garuvchini chegaraviy qiymat bilan solishtirish). 3.qism - o'zgaruvchining qiymatini o'zgartirish.

    Qismlarning bajarilish ketma-ketligi quyidagichadir:

    Boshida 1. qism bajariladi (faqat bir marta), keyin 2. qismdagi shart tekshiriladi va agar u true bo'lsa takrorlanish bloki ijro ko'radi, va eng ohirda 3. qismda o'zgaruvchilar o'zgartiriladi, keyin yana ikkinchi qismga o'tiladi.



    Download 186.04 Kb.
    1   2   3   4   5




    Download 186.04 Kb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    Buxoro davlat universiteti

    Download 186.04 Kb.