• Mavzu:Turlarning dinamik tarifi. Turlarni almashtirish operatorlari.
  • Kompyuter injenering




    Download 0,59 Mb.
    Pdf ko'rish
    bet1/4
    Sana24.05.2024
    Hajmi0,59 Mb.
    #252847
      1   2   3   4
    Bog'liq
    DASTURLASH 2.MUSTAQIL ISH 1. RAHMATULLOYEV JAVLONBEK


    O’ZBEKISTON RESPUBLIKASI RAQAMLI TEXNOLOGIYALAR VAZIRLIGI


    MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT AXBOROT
    TEXNOLOGIYALARI UNIVERSITETI QARSHI FILIALI

    KOMPYUTER INJENERING
    FAKULTETI
    1

    BOSQICH “KI 12
    -
    23”
    - GURUH 
    TALABASINING 
    “D
    ASTURLASH 2
    ” 
    FANIDAN TAYYORLAGAN 
     
    Mustaqil ishi 1 
    Bajardi: Rahmatulloyev J 
    Qabul qildi: Nosirov B 
    QARSHI 2024 


    Mavzu:Turlarning dinamik tarifi. Turlarni almashtirish operatorlari. 
    REJA:
    1.
    Turlarni tarfi. 
    2.
    Turlarni almashtirish. 
    3.
    Dasturdagi ma’lumot strukturalari. 
    4.Ikki o’lchamli massivlar. 
    5.
    Konstruktorni asosiy qoidalari
    .
    Turlarni dinamik tarifi C++ dasturlash tilida alohida tur klasslari orqali yaratiladi. Klasslar 
    orqali tur obyektlari yasab, ularning xususiyatlariga murojat qilish, ularning qiymatlarini 
    o'zgartirish va obyektlar orasida aloqa yaratish mumkin. 
    Bu kodda "Student" klassining obyekti uchun xotira ajratish uchun new operatori 
    foydalaniladi. Xususiyatlar esa -> operatori arqali yoziladi. Klass obyektining xususiyatlari 
    dastur bajarilishida aniqlanmaydi, chunki klass o'zining xususiyatlarini aniqlash unvoniga ega. 


    Turlarni almashtirish operatorlari 
    Turlarni dinamik tarifi C++ dasturlash tilida alohida tur klasslari orqali yaratiladi. Klasslar 
    orqali tur obyektlari yasab, ularning xususiyatlariga murojat qilish, ularning qiymatlarini 
    o'zgartirish va obyektlar orasida aloqa yaratish mumkin. 
    Quyidagi misol C++ dasturlash tili yordamida tur klassi yaratishni ko'rsatadi: 
    - = - almashtirish operatori 
    - += - qo'shishga almashtirish operatori 
    - -= - ayirishga almashtirish operatori 
    - *= - ko'paytirishga almashtirish operatori 
    - /= - bo'lishga almashtirish operatori 
    - %= - qoldiqni hisoblashga almashtirish operatori 
    - <<= - bitni chapga surishga almashtirish operatori 
    - >>= - bitni o'ngga surishga almashtirish operatori 
    - &= - bit ko'paytirish va yig'ishga almashtirish operatori 
    - ^= - bit xor operatoriga almashtirish operatori 
    - |= - bit yig'ish va ko'paytirishga almashtirish operatori 
    Quyidagi misol kod almashtirish operatorlarini ko'rsatadi: 
    int main () { 
    int a = 10, b = 4; 
    a += b; 
    cout << "a += b: " << a << endl; 
    a -= b; 
    cout << "a -= b: " << a << endl; 
    a *= b; 
    cout << "a *= b: " << a << endl; 


    a /= b; 
    cout << "a /= b: " << a << endl; 
    a %= b; 
    cout << "a %= b: " << a << endl; 
    return 0; 

    Bu misolda, a va b nomli o'zgaruvchilar yaratilgan. a va bning qiymatlari belgilangan, 
    keyinchalik aga bni qo'shish uchun += operatori ishlatilgan. So'ng adan bni ayirish uchun -= 
    operatori foydalanilgan. *= operatori ko'paytirish amalini bajaradi, /= operatori bo'lish 
    amalini bajaradi va %= operatori esa qoldiqni hisoblash uchun ishlatiladi. 
    Shuningdek, boshqa almashtirish operatorlari ham shu usul bilan foydalaniladi. 
    yangi nomlar fazosi uchun joy yaratish 
    Nomlar fazosi
    Ma’lumki, programmaga qo‘shilgan sarlavha fayllarida e’lon
    qilingan identifikator va o‘zgarmaslar kompilyator tomonidan yagona
    global nomlar fazosiga kiritiladi. Agar programma ko‘p miqdordagi
    sarlavha fayllami ishlatsa va undagi identifikatorlar (funksiya nomlari va
    o‘zgaruvchilar nomlari, sinflar nomlari va hakozalar) va o‘zgarmaslar
    nomlari turli programma tuzuvchilar tomonidan mustaqil ravishda
    aniqlangan bo4sa, bir xil nomlami ishlatish bilan bog‘liq muammolar


    yuzaga kelish ehtimoli katta bo4adi. Nomlar fazosi tushunchasini kiritilishi
    mazkur muammoni ma’lum bir ma’noda hal qilishga yordam beradi. Agar
    programmada yangi identifikatomi aniqlash kerak bo‘lsa va xuddi shu
    nomni boshqa modullarda yoki kutubxonalarda ishlatishi xavfi boMadigan
    boMsa, bu identifikatorlar uchun o‘zining shaxsiy nomlar fazosini aniqlash
    mumkin. Bunga namespace kalit so‘zidan foydalanilgan holda erishiladi:
    namespace
    {
    // e’lonlar
    }
    Nomlar fazosi ichida e’lon qilingan identifikatorlar faqat fazosining nomi> ko‘rinish sohasida bo'ladi va yuzaga kelishi mumkin
    bo‘lgan kelishmovchiliklaming oldi olinadi.
    Misol tariqasida quyidagi nomlar fazosini yarataylik:
    namespace Shaxsiy_nomlar
    {
    int x,y,z;
    void Mening_funksiyam(char belgi);
    }
    Kompilyatorga konkret nomlar fazosidagi nomlami ishlatish
    kerakligini ko‘rsatish uchun ko‘rinish sohasiga ruxsat berish amalidan
    foydalanish mumkin:
    Shaxsiy_nomlar::x =5; 
    #include  
    #include  
    using namespace std; 


    int main() { 
    vector names; 
    names.push_back("John"); 
    names.push_back("Jane"); 
    names.push_back("Alice"); 
    names.push_back("Bob"); 
    for (auto name : names) { 
    cout << name << endl; 

    return 0; 

    Bu misolda, std::vector turidan yangi nomlar fazosini saqlash uchun names nomli obyekt 
    yaratilgan. push_back() funksiyasi yordamida, yangi nomlar ro'yxati namesga qo'shilgan. for 
    tsikli yordamida names ichidagi barcha nomlar chiqarilgan. 
    4-mavzu: buferlashtirilgan kiritish va chiqarish 


    Bu kod yordamida, std::cout obyektiga "Bu xat konsoldan chiqadi." matni kiritiladi va 
    std::cerr obyektiga esa "Bu xat konsoldan xatoliklar uchun chiqadi." matni kiritiladi. 
    std::cout obyektidan chiqarish avtomatik ravishda amalga oshiriladi, lekin std::cerr 
    obyektidan chiqarish ishlatilgan qurilma xatolariga qarshi xabar berish uchun ishlatiladi. 
    Buferlashtirilgan kiritish va chiqarishni o'chirish uchun, quyidagi kod yordamida 
    std::ios::sync_with_stdio(false) va std::cin.tie(nullptr) funksiyalari ishlatiladi:stl 
    kutubxonalari 
    STL (Standard Template Library) C++ dasturlash tilining standart kutubxonalaridan biridir. 
    Bu kutubxonada, qo'shimcha ko'p qatlamli ma'lumot tuzilmalari, algoritmik operatsiyalar va 
    moslashuvchanlik qurilmalari mavjud. 
    STL kutubxonasi qo'shimcha biznes loyihalari va yuqori darajadagi to'lovli dasturlar 
    yaratishda keng qo'llaniladi. Bu kutubxonada odatda, quyidagi to'plamlar mavjud: 
    Containers (Tuzilma toplamlari): STL kutubxonalarida ko'p qatlamli to'plamlar, masalan, 
    vector, list, deque, set, map va boshqalar, kiritish va chiqarish uchun mo'ljallangan. 
    Algorithms (Algoritmik operatsiyalar): STL kutubxonalarida ko'p qatlamli ma'lumotlar 
    uchun algoritmik operatsiyalar, masalan, sorting, searching, shuffling va boshqalar, mavjud. 
    Iterators (Tartibga solish): STL kutubxonalarida, tuzilma to'plamlari bilan ishlashda, tartibga 
    solish uchun iteratorlar ishlatiladi. 
    Functors (Funksiyalar): STL kutubxonalarida funksiyalar va obyektlar, ko'p qatlamli 
    ma'lumotlar uchun ishlatiladi. Bu funksiyalar, algoritmik operatsiyalarni amalga oshirish 
    uchun ishlatiladi. 
    Adapters (Moslashuvchanlik qurilmalari): STL kutubxonalarida, moslashuvchanlik 
    qurilmalari, masalan, stack, queue va priority_queue, mavjud. 
    Quyidagi misolda, std::vector kutubxonasi va std::sort algoritmi yordamida o'lchamlari va 
    tartiblari berilgan sonlar to'plamini tartibga solish keltirilgan: 


    Bu kod yordamida, std::vector kutubxonasi yordamida numbers nomli o'lchamlari va 
    tartiblari berilgan sonlar to'plami yaratiladi. std::sort algoritmi yordamida, numbers to'plami 
    tartibga solinadi. Keyin, to'plamda bo'lgan sonlar for sikli yordamida chiqariladi. 
    Quyidagi kodda std::map va std::pair kutubxonalaridan foydalanilgan: 



    Bu kod yordamida, std::map kutubxonasi yordamida, ismi va yoshi berilgan insonlarning 
    ma'lumotlari tuzilgan. std::pair kutubxonasi yordamida, insonning ismi va yoshi bir xil 
    juftlikda saqlanadi. ages.insert yordamida, ma'lumotlar mapga saqlanadi. for sikli yordamida, 
    mapdagi ma'lumotlar chiqariladi. 
    STL kutubxonalarini o'rganish, dasturlashda ishlatishda va yuqori darajadagi dasturlar 
    yaratishda juda muhimdir. 
    Dasturlash jarayonini tushunish uchun kompyuterni tashkil etgan qurilma bloklarini 
    tushunishingiz kerak. Shaxsiy kompyuterni ko’rib chiqsak. Katta kompyuterlarni boshqa 
    kompyuterlarnikidek dizayndagi ammo tezroq, kattaroq, yoki kuchliroq qislmari mavjud. 
    Kompyuterning yuragi Markaziy Protsessor(CPU) (1.01-rasmga qarang) Markaziy Protsessor 
    yagona chipdan yoki kichik birlikdagi chiplardan iborat. Kompyuter chipi metal yoki plastik 
    komponentli korpusdan,metal ulagichlardan iborat, uzatkichlar ichki qismi esa kremniydan 
    iborat. Protsessor ichki qismi juda murakkab tuzilgan. MISOl uchun, Pentium chipi 
    (qo’llanma yozilayotgan vaqtda shaxsiy kompyuterlar uchun mashxur protsessor sanalgan) bir 
    qancha millionli tranzistor deb nomlanadigan tuzilma elementlaridan tashkil topgan. Markaziy 
    Protsessor dastur nazorat qilinadi va ma’lumot qayta ishlanadi. Bunda kompyuter dastur 
    nazoratini amalga oshiradi va turgan o’rnini aniqlaydi; u yana qoshish, ayirish, ko’paytirish 
    va bo’lish kabi arifmetik amallar ham bajaradi; tashqi xotira yoki qurilmadagi ma’lumotlarni 
    orqaga qaytarib yozib saqlay oladi. Kompyuter ma’lumot va dasturlarni saqlaydi. Ikki xil 
    turdagi xotira mavjud. Xotira chiplaridan iborat, elektr quvvati bilan ta’minlangan o’zida 
    ma’lumot saqlay oladigan elekr zanjirdan iborat xotira Birlamchi xotira deyiladi. Qoshimcha 
    xotira esa, kamroq qiymatga ega elekts sarflamaydigan Qattiq diskdir. Qatti disk aylanuvchi 
    plastinkaan iborat, magnit material bilan qoplangan, plastinka oqimini aniqlab va o’zgartira 
    oladigan o’quvchi/yozuvchi muhim qismlardan iborat (1.02 rasmga qarang). 1.01-rasm. 
    Markaziy prosessor. 1.02-rasm. Qattiq disk. Dasturlar va ma’lumotlar odatda qattiq diskda 
    saqlanadi va dastur ishga tushganda xotiradan olinadi. Dastur xotiraagi ma’lumotlarni 
    yangilangandan so’ng o’zgartirilgan ma’lumotlar qayta qattiq diskka yoziladi. Insonlar bilan 
    muloqotga kirihganda kompyuter qo’shimcha qurilmalarni talab qiladi.Kompyuter insonga 
    ma’lumotni ekran, ovoz qurilmasi va printer orqali uzatadi. Inson ma’lumotni klaviatura yoki 
    ko’rsatuvchi qurilma sichqoncha bilan kiritadi. Ayrim kompyuterlar qismlari o’zida tashkil 
    topgan, qolganlari bo’lsa tarmoq bilan bog’langan. Tarmoq kabellari sababli, komyuter 
    markaziy xotiradan dastur va ma’lumotlarni o’qiydi va boshqa kompyuterlarga jo’nata oladi. 


    Tarmoqqa ulangan komyuter foydalanuvchisi qaysi ma’lumot kompyuterda o’zi bo’lgani va 
    qaysi biri tarmoqdan olingani aniq bo’ladi. 1.03-rasm. Shaxsiy kompyuterning sxematik 
    tuzilishi 1.03-rasmda shaxsiy kompyuterning sxematik ko’rinish arxitekturasi berilgan. Dastur 
    ko’rsatmalari va ma’lumotlari (matn, son, audio va videolar) qattiq diskda, optik disk DVD da 
    yoki tarmoqning boshqa biror joyida saqlanadi. Dastur ishga tushganda u xotiradan olinadi va 
    Markaziy protsessor uni o’qiydi. Markaziy Protsessor bir vaqtda bitta dastur ko’rsatmasini 
    o’qiydi. Shu ko’rsatmaga binoan, Markaziy Protsessor ma’lumotni o’qiyd, qayta ishlaydi va 
    saqlaydi. Ayrim dastur ko’rsatmalari Markaziy Protsesorga ekranda qayerga nuqta qo’yishni, 
    bosib chiqarishni va ovoz qurilmasini ishga tushirishga buyruq beradi. Bu holatlar ko’p 
    marotaba va yuqori tezlikda amalga oshgani sababli inson faqatgina ovoz va rasmlarni 
    anglaydi. Ayrim dastur ko’rsatmalari klaviatura va sichqoncha orqali kiritilgan ma’lumot 
    orqali o’qilinad. Dastur bu kiritilgan ko’rsatmalarni tahlil qiladi va kerakli ko’rsatmalarni 
    amalga oshiradi. Tasodifiy Fakt 1.1. ENIAK va hisoblashlar ibtidosi ENIAK (yelektron 
    nomerlovchi nomerlovchi integrator va kompyuter) birinchi elektron kompyuterlar bo’lgan. U 
    J.Presper va Jon Mauchliy tomonidan Pensilvaniya Universitetida 1946 yil tranzistorlar kashf 
    qilinishidan 2 yil oldin kashf qilingan. Kompyuter katta honaga joylashtirilgan va 18000 ga 
    yaqin vakuumdan tashkil topgan kichkina shkaflardan tashkil topgan.(1.02 rasmga qarang) 
    Vakuum trubalar kuniga bir nechtalab yonib ketgan. Maxsus shaxs trubalar to’ldirilgan idish 
    bilan ishdan chiqqan trubalarni almashtirib turgan. 1.04-rasm. ENIAK Kompyuter 
    panellardagi birlashtiruvchi simlar bilan dasturlangan. Xar bir sim konfiguratsiasi tegishli 
    kompyuter muammosi uchun o’rnatilgan. Kompyuter turli xil muammlor ustida ishlashi uchun 
    simlar qayta ulangan. Qo’shma Shtatlar Armiyasi ENIAKni ballistik jadvallar hisobi 
    uchun,shamolga qarshi tezlik trayektoriyasi va atmosfera holatini aniqlab berishda 
    foydalangan. Trayektoriyani hisoblash uchun ma’lum bir differensial tenglaman raqamli 
    yechimini topish shart edi. Shu sababli ham “raqamli integrator” deb nomlangan. ENIAK kabi 
    mashinalar ixtiro qilinmasdan avval insonlar bu ishlarni qilishgan va 1950 yilgacha 
    “kompyuter” so’zi ular uchun ishlatilgan. ENIAK keyinchali tinchlik yo’lida, Qo’shma 
    Shtatlarda aholini ro’yxatga olishda ishlatilgan. Tasodifiy Fakt 1.2 standardlovchi Tashkilotlar 
    2 ta standardlovchi tashkilotlar Amerika Milliy Standardlash Instituti (ANSI) va Xalqaro 
    Standardlovchi Tashkilot (ISO) hamkorlikda C++ tili uchun eng to’g’ri standard vujudga 
    keltirishdi. Nima uchun standard kerak? Siz standardlashni foydasi bilan har kuni to’qnash 
    kelasiz. Lampochka sotib olayotganda u uyingizdagi lampochka chanog’iga mos kelishini 


    bilasiz. Fakt shuki, siz qachondir nostandard fonar, lampochkalarini xarid qilsangiz 
    standardlash qanchalik muhimligini bilib olasiz. Fonar Lampochkalarni qayta almashtirish 
    qiyin va qimmat bo’lishi mumkin. ANSI and ISO standardlash tashkilotlari mashina balonlari 
    va kredit kartalari shaklidan to C++ dasturlash tiligacha xamma narsalarni standardlashni 
    yo’lga qo’ygan ishlab chiqarish mutaxassislari birlashmasidir. Bu siz bir sistemada o’rnatgan 
    dasturni boshqa ishlab chiqaruvchi to’plamidagi boshqa dasturga qo’yganingizda u ishlashiga 
    amin bo’lishingizdir. 1.3 Dasturlash muhiti bilan tanishish Ko’p studentlar dasturchilarga 
    kerak bo’ladigan qurilmalar ularga tanish bo’lgan dasturiy taminot qurilmalaridan faqr 
    qilishini bilishadi. Siz alohida vaqt ajratib dasturiy muhit bilan tanishib chiqing. Chunki 
    kompyuter tizimi keng farqlanadi, bu kitob sizga amal qilishingiz kerak bo’lgan bosqichlar 
    yo’riqnomasini beradi.Amaliy labaratoriya ishlarida qatnashish yoki bilimga ega do’stingiz 
    yo’rig’ini tinglash ham samaralidir. 1-bosqich. C++ yaralish muhitini boshlang. Kompyuter 
    tizimlari bu borada katta farq qiladi. Ko’p kompyuterlarda yozish va dasturlarni sinash 
    mumkin bo’lgan bir integratsiya ishlab chiqish muhiti bor. Boshqa kompyuterlarda esa C++ 
    yo’riqnomalarini kiritish uchun avval so’z muharririni ishga tushirish lozim, keyin esa konsol 
    oynasi- ni ochish va bajarilishi kerak bo’lgan buyruqni kirgizishingiz kerak. Suiz muhit bilan 
    ishlashni o’rganishingiz lozim. 2-bosqich. Oddiy dastur yozing. Yangi dasturlash tilini 
    yaratishdagi ilk dasturda ekranda oddiy salomlashuv so’zi “Hello, World!”. Keling, bu an’ana 
    amal qilaylik. Bu erda C++ “Hello, World!” dasturi: #include using namespace std; int main() 
    { cout << "Hwllo, World!" << endl; return 0; } Biz keyingi bo’limda ushbu dasturni ko’rib 
    chiqamiz. Qanday dasturiy muhitdan foydalanmang, dastur holatini muharrir oynasiga 
    kiritishdan boshlaysiz. Yangi fayl oching va uni hyello.cpp, deb nomlang, yo’riqnomangiz 
    uchun zarur bosqichlardan foydalaning. (Agar sizning muhitingiz loyiha nomini fayl nomiga 
    qo’shib yozishni talab qilsa u holda siz hyello so’zini loyiha nomi deb olinng.) Dastur 
    buyruqlarini tepada berilgandek aniq kirg’izing. Shu bilan bir qatoda, dasturdagi manbaa 
    fayllarini elektron nusxasini toping va muharriringizga qo’ying. Siz shu dasturni yozar 
    ekansiz, turli belgilarga yaxshilab e’tibor bering, C++ nozik ish sanaladi. Siz xarflarni dastur 
    satrida ko’ringanidek bosh va kichik xarflarda kirg’izishingiz shart. main yoki endl yoza 
    olmaysiz. Agar siz e’tiborli bo’lmasangiz xatoga yo’l qo’yasiz. 3-bosqich. Kompilyatsialash 
    va dasturni ishga tushirish. C++ dasturini yaratish va ishga tushirish jarayoni sizning 
    dasturlash muhitingizga bog’liq. Ayrim kompleks rivojlantirish muhitida, siz oddiygina 
    tugmachani bosasiz. Boshqa muhitda esa, siz buyruqlar kirg’izishingiz lozim. Siz 


    dasturingizni sinovdan o’tkazishda Hello world! ekranni qaysi joyidadir paydo bo’ladi (1.05 
    va 1.06 rasmga qarang). 1.05-rasm. hello dasturini ishga tushirish jarayoni 1.06-rasm. hello 
    dasturini window oynasida kompilyasiyalash va ishga tushirish Dasturingiz tuzilayotganda 
    uning negizida nima borligi muhimdir. Birinchidan, First, kompilyator C++ manbaa kodini 
    (siz kiritgan so’zlar) mashina ko’rsatmalariga o’girib beradi. Mashina kodi siz yozgan so’zni 
    kodga o’girib berilgan shaklidir. Dasturni faqatgina ishga tushirish yetarli bo’lmaydi. 
    Kompyuter oynasida bir tizimni ko’rinishi uchunham, kam darajada bo’lsa ham faollik 
    muhim. C++ rivoj- lantirihs muhiti amaliyotchilari cout va uning vazifalarini o’z ichiga olgan 
    kutub- xona bilan ta’minlab beradi. Kutubxona bu bowqa bir inson tomonidan dastur- langan 
    va tarjima qilingan, siz qo’llashingiz uchun tayyor dastur kodlar va jamlanmasidir. 
    (Qo’shimcha murakkab dasturlar 1 dan ortiq mashina kodi fayli va ku- tubxonadan iborat) 
    Birlashtirgich nomli dastur mashina kodini va C++ kutubxonasidan kerakli qismlarni 
    birlashtirib amalga oshgan faylni yuzaga keltiradi. (1.07-rasmda bu boshqichlarni ko’rinishi 
    tsvirlangan) Amalga oshgan fayl kompyuter tizimiga bog’liq ravishda hyello.yexe yoki hyello 
    deb nomlanadi. Siz amalga oshgan faylni C++ rivojlantirish dasturidan chiqib ketganingizda 
    ham ishga tushirishingiz mumkin. 4-bosqich. Ishingizni tashkillashtiring. Dasturchi sifatida, 
    siz dastur tuzasiz, sinaysiz va takomillashtirasiz Siz dasturlaringizni fayllarda saqlaysiz. 
    Fayllarni nomlari va qonuniy nomlari qoidalar tizimi biri ikkinchisidan farq qiladi. Ayrim 
    tizimlar fayl nomlari orasida bo’sh joy qoldirishga ruxsat beradi ayrimlari esa yo’q. 
    Ayrimlarida kat- ta va kichik harflar farqlanadi, ayrimlarida esa yo’q. Ko’p C++ 
    kompilyatorlar C++ fayllari .cpp, .cxx, .cc, yoki .c bilan tugashi talab qilinadi, masalan 
    test.cpp. Papkalar o’z ichiga fayllarni oladi va yana ichida fayllar va papkalar bor boshqa 
    fayllarni ham saqlay oladi. (1.08-rasm) Bu iyerarxia katta bo’lishi mumkin, va siz uning 
    barcha bo’limlari bilan tanish bo’lmasligingiz mumkin. 1.07-rasm. Amalga oshgan fayl manba 
    kodi. Biroq siz ishingizni tashkil qilishingiz uchun papkalar yaratishingiz mumkin. Har bir 
    dasturlash darsi uchun alohida papka ochish to’g’ri fikrdir. Papka ichida esa, xar bir topshiriq 
    uchun alohida papka oching. Ayrim dasturlash muhiti papkani o’zingiz joylashtirmasangiz 
    standart manzilga saqlaydi. U holda siz papka joylashgan joyini aniqlashingiz kerak bo’ladi. 
    Iyerarxia papkasida faylingiz qayerga joylashganini bilishingizga ishonch hosil qiling. Bu 
    ma’lumot papkalarni guruhlayotganingizda va zahira nusxa olayotganingizda muhimdir. 1.08-
    rasm. Ierarxiya fayli 1.4 Ilk dasturingiz tahlili Bu bo’limda ilk C++ dasturini batafsil tahlil 
    qilamiz. Quyida yana manbaa kodi: ch01/hello.cpp #include using namespace std; int main() 


    { cout << "Hello, World!" << endl; return 0; } using namespace std; kompilyatorga "standart 
    nomlanish joyi" ishlatish kerakligini aytadi. Nomlanish joyi katta dasturlarda nomlanishdagi 
    nizolarni bartaraf etadi. Siz nomlanish joyidan xavotir olmasangiz ham bo'ladi. Bu kitobda 
    ishlab chiqadigan dasturingiz uchun standart nom qo'yasiz. xar bir yzadigan dasturingiz 
    boshiga using namespace std; ni yozing va oxirida esa #include ko'rsatmasini yozing. Tuzilishi 
    int main() { ... return 0; } main deb nomlanuvchi funksiasi butun sonni 0 qiymatda qaytaradi 
    (bunda C++ int da deb nomlanuvchi bo'laklanmagan butun son) Bu qiymat dastur 
    muvaffaqiyatli yakunlanganini ifodalaydi. Funksia bu belgilangan vazifani bajaruvchi 
    dasturlash yo'riqnomasidir. Har bir C++ dasturini asosiy funksiasi bor. Ko'p C++ dasturlari 
    dan tashqari boshqa funksilarga ham ega buni keyinroq 5 Bobda funsialar va qiymatlarda 
    ko'rib chiqamiz. Xozir esa, oddiy dastur yozish uchun kerak bo'ladigan qismlarni tahlil qilsak 
    to'g'ri bo'ladi. Kodni amalga oshirmoqchi bo'lgan main funksiasiga kiriting. Qiymatni ekranda 
    ko'rsatish uchun cout nomli asos va << operator(ayrim paytlarda o'rnatilgan operator)) dan 
    foydalanishingiz mumkin. Masalan, cout << 39 + 3; 42 soni ekranda ko'rinadi. 1.5 Xatolar 
    Dasturlash tili juda ham muhim konvensialarga asoslanadi. Siz bir inson bilan muloqot 
    qilayotganingizda 1 yoki 2 so'zni o'tkazib yuborsangiz yoki tushirib qoldirsangiz siz bilan 
    muloqotdagi inson nima demoqchi ekanligingizni tushuna oladi. Ammo C++ da xatoga yo'l 
    qo'ysangiz kompilyator noto'g'ri tushunchani qabul qilmaydi. (Bu xasqiqatda yaxshi narss, 
    agar kompilyator noto'g'ri tushunchani qabul qilganda, u natijani ham noto'gri taqdim qilar 
    edi. Bu esa falokatli oqibatlarga olib kelar edi.) Bu bo'limda siz dasturingizdagi xatolarni 
    qanday bartaraf etishni o'rganasiz. hello.cpp dasturi bilan tajriba qilamiz. Biz quyidagi 
    xatolarga yo'l qo'ysak nima sodir bo'lar edi. cout << "Hello, World!" << endl; cout << "Hello, 
    World! << endl; cout << "Hollo, World!"<< endl; Birinchi holatda, kompilyator orqali nimani 
    nazarda tutayotganingizni tushunmaganligidan arz qiladi. Yo'l qo'yilgan xatolikning aniq 
    ta'rifi kompilyatorga bog'liq bo'ladi. Bu “Undefined symbol cot” kabi ko'rinishda ham bo'lishi 
    mumkin. Bu COMPILE TIME xatolik yoki sintaksis xatolik sanaladi. Imlo qoidasiga yo'l 
    qo'yilsa ham kompilyator uni topadi. Agar kompilyator 1 yoki undan ko'p xatolikni topsa, u 
    holda dasturni texnika tiliga o'girmaydi va natijada ishga tushiriladigan dastur ham 
    yaratilmaydi. Siz xatolikni bartaraf eti uni boshqatdan to'plashingiz kerak bo'ladi. Odatda ilk 
    muvaffaqiyatli kompilyatisaga erishishdan oldin COPMILE TIME xatoliknibartaraf etishdagi 
    bir qancha jarayonlardan o'tiladi. Agar kompilyator xatolikni aniqlasa u osonlikcha 
    to'xtamaydi va rad etmaydi. U aniqlagan xatolikni hammasini ko'rsatadi, siz bunda hamma 


    xatolikni bittada to'g'irlab olishingiz mumkin. Ayrim paytlarda bitta xatoni o'zi ham dasturni 
    ishdan chiqarishi mumkin. Bunday xatolik ikkinchi satrda ham uchrashi mumkin. Dasturchi 
    yopuvchi qavs belgisini ishdan chiqarsa kompilyator satr oxirini qidirishda davom etadi. 
    Bunday holatlarda kompilyator qo'shni qatorlarda soxta xatolikni ko'rsatadi. Siz kerakli 
    qatorlardagi xatolikni to'g'irlab so'ng qaytadan kompilyatsialashingiz kerak. Bu RUN TIME 
    ERROR hisoblanadi. Dastur gap tuzilishi jihatdan xatolikni topadi va nimadir bajaradi, ammo 
    taxmin qilingan ishni bajarmaydi. Kompilyator xatolikni topa olmaydi, ammo dastur ishga 
    tushganda uni tozalashga majbur, uni tekshiradi va chiqarilishiga yaxshilab e'tibor beradi. 
    RUN-TIME ERROR sabali dastur mantiqiy nuqson aniqlaydi va bu nuqsonlar mantiqiy 
    xatolik deyiladi. Ayrim RUN TIME ERROR xatoliklari jiddiy hisoblanadiki ayrim istisnolar 
    keltirib chiqarishga ham sababchi bo'ladi. Protsessordagi xabar xato xabar sababli dasturni 
    tugatilishiga olib keladi.Misol uchun dasturingiz cout << 1 / 0; bo'lsa "nol bilan ajratish" 
    istisnosi bilan tugatilinadi. 1.6 Muammo yechimi: Algoritm konstruksiyasi Siz tez kunda 
    hisoblarni va qaror qabul qilishni С++da qanday dasturlashni o’rganasiz.Biroq keyingi 
    bobdagi hisoblarni amalda qo’llash mexanizmini ko’rib chiqishdan oldin keling, ijrodan keyin 
    keladigan rejalashtirish jarayonini ko’rib chiqamiz.Balki sizga mos umr yo’ldosh topib 
    beruvchi kmpyuterlashagn xizmat uchun sizni undaydigan e’longa duch kelgandirsiz. U 
    qanday ishlashi mumkinligi to’g’risida o’ylab ko’ring.Siz anketa to’ldirasiz va uni jo’natasiz. 
    Boshqalar ham shunday qiladilar. Ma’lumotlar kompyuter tomonidan ishlab chiqiladi. 
    Kompyuter sizga eng mos shaxsni topish vazifasini uddalay oladi deb o’ylash to’g’rimi? 
    Deylik kompyuter emas ukangizda barcha anketlar bor.Unga qanday ko’rsatmalar bera 
    olardingiz.siz unga "Konkida uchishni va internetda o’tirishni yoqtiradigan juda chiroyli 
    bo’lgan qarama-qarshi jinsdagi shaxsni top" , deb aytolmaysiz. Go’zal chehra borasida 
    obyektiv standart yo’q va ukangizning fikri (yoki raqamli rasmni tahlil qilgan kompyuterning 
    dasturining fikri)siznikidan farqli bo’lishi mumkin. Agar siz biror kimsaga muammoniu hal 
    etish chun yozma ko’rsatma bera olmasangiz, kompyuter ham buni hyech qanday sehr 
    yordamida yecha olmasligini iloji yo’q.Kompyuter faqatgina unga nima qilishni aysangiz 
    shuni bajara oladi. U zerikmasdan yoki charchamasdan vazifani tezroq bajaradi. Endi quyidagi 
    sarmoya borasidagi muammoni ko’rib chiqamiz:Siz bank hisob raqamingizga yiliga 5% foyda 
    qiladigan $10,000 miqdordagi pulni qo’ydingiz. Dastlabki miqdor ikki baravar ko’payishi 
    uchun hisob balansi uchun qancha yil talab etiladi? Ushbu muammoni qo’llar yordamida 
    yecha olasizmi? Albatta, siz balansni quyidagicha hisoblaysiz: yil foyda balans Balans kamida 


    $20,000 miqdoriga yetmaguncha siz hisobni davom ettirasiz.Yil ustunidagi oxirgi raqam javob 
    bo’ladi. Albatta, bu xisoblashni amalga oshirish siz va ukangiz uchun juda zerikarlidir. Lekin 
    kompyuterlar 
    takrorlanuvchi 
    hisoblarni 
    tez 
    va 
    mukammal 
    bajarishda 
    ustasi 
    farangdrlar.Kompyuter uchun muhimi bu yechimni topishda bosqichlarning tavsifidir.Har 
    qaysi qadam tahmindan uzoqda aniq va lo’nda bo’lishi shart. 
    C# dasturlash tilida kompyuter xotirasiga bir o’zgaruvchi yordamida bir nechta qiymatlarda 
    foydalanishga to’g’ri keladi. Bir o’zgaruvchi bilan bir nechta qiymat ustida amallar bajarish 
    uchun berilgan ma’lumotlar bir turga mansub bo’lishi kerak. C# dasturlash tilida bir 
    o’zgaruvchi yordamida bir nechta qiymatlardan foydalanish uchun massiv degan turdan 
    foydalaniladi. Dasturlash tillarida ro’yxat yoki jadval ko’rinishidagi ma’lumotlarni massiv 
    deb atashadi. Massiv so’zining ma’nosi o’lcham, o’lchov demakdir. Massivning barcha 
    elementlari bitta turga mansub bo’lib, ular bitta nom bilan nomlanadi va bir-birlaridan 
    nomerlari (indekslari) bilan farq qiladi. 
    Endi dasturdagi ma’lumot strukturalari bilan tanishishni boshlaymiz. Dasturda ikki 
    asosiy tur ma’lumot strukturalari mavjuddir. Birinchisi statik, ikkinchisi dinamikdir. Statik 
    deganimizda xotirada egallagan joyi o’zgarmas, dastur boshida beriladigan strukturalarni 
    nazarda tutamiz. Statik massivlar elementlar soni oldindan ma’lum bo’lgan va 
    initsializatsiyalangan (qiymat belgilangan) massivlar hisoblanadi. Dinamik ma’lumot tiplari 
    dastur davomida o’z hajmini, egallagan xotirasini o’zgartirishi mumkin. Dinamik massivlar 
    esa elementlari soni oldindan ma’lum bo’lishi va uni initsializatsiyalash (qiymat belgilash) 
    shart emas. Statik massivlarning kamchiliki shundaki, agar ularning o’lchamini oldindan 
    juda katta olinsa-yu, uning ko’p qismi keraksiz qolib ketsa, u holda xotira behuda 
    sarflanishiga olib keladi. Shu muammoni hal qilish maqsadida massivlar C# tilida asosan 
    dinamik tarzda e’lon qilinadi. Massivlar dasturlashda eng ko’p qo’laniladigan ma’lumot 
    tiplaridir. Massivlar hotirada ketma-ket joylashgan, bir tipdagi o’zgaruvchilar guruhidir. 
    Alohida bir o’zgaruvchini ko’rsatish uchun massiv nomi va kerakli o’zgaruvchi indeksini 
    yoziladi. 
    Ta’rif: Bir turga mansub bo’lgan yagona nom bilan saqlanuvchi tartiblangan ma’lumotlar 
    majmuasi massiv deyiladi. 


    Massivlar yagona o’zgaruvchi bilan kompyuter xotirasiga saqlanadi, uning elementlari 
    ma’lum bir indekslar bilan tartiblab joylashtiriladi. Massivlar yagona nom bilan bir nechta 
    qiymatni o’zida mujassamlashtiradi, bularga matematikadagi vektorlarni misol keltirish 
    mumkin. Vektor ham yagona nom bilan saqlanib uning tarkibida bir nechta qiymatni o’zida 
    mujassamlashadi. Vektorning ham elementlari bir turga mansub va tartiblangan bo’ladi. 
    Bir o’lchovli massivlar
    Odatda massivlar zarurat, katta hajmdagi tartiblangan, lekin chekli elementlarga oid 
    masalalarni hal etishda yuzaga keladi. Dastur ishlatilishi davomida massivlar aniq nomga 
    ega bo’lishi va uning elementlari ma’lum bir turda bo’lishi kerak. Bir o’lchovli massivlar 
    kompyuter xotirasiga quyidagi shaklda saqlanadi 
    Massiv tarkibida elementlar mavjud bo’ladi. Massivning eng ko’pi bilan ketishi mumkin 
    bo’lgan elementlar soni uning o’lchamini bildiradi. Massivning elementi turgan o’rni uning 
    indeksi deyiladi. Massivning elementiga uning indeksi orqali murojaat qilinadi. Massivning 
    indeksi sifatida butun sonlar xizmat qiladi. Har bir massiv o’zining individual nomiga ega 
    bo’lishi kerak, ya’ni bir xil nomdagi massivlar bo’lmaydi. Ularning nomi oldin e’lon 
    qilingan oddiy o’zgaruvchi nomi bilan ustma-ust tushmasligi kerak. 
    Statik massivlarni e’lon qilishning umumiy ko’rinishi quyidagicha: 
    []={boshlang’ich qiymatlar} 
    Bunda {boshlang’ich qiymatlar} albatta bo’lishi kerak. Misollar: 
    int []A={1,4,3,1}; 
    string[] B = { “olma”, “gilos”, “anor”}; 
    double[] C = { 0.005, 1.234, 12.5, 13.5, 10.6 }; 


    Yuqoridagi massivlarda massivning o’lchami uning initsializatsiya qismida qatnashgan 
    elementlar soni bilan aniqlanadi. C# tilida xuddi C++ da bo’lgani kabi element indeksi 0 dan 
    boshlanadi. A[0] indeksli element 1 ga teng, B[1] indeksli element esa “gilos” ga teng va h. 
    Aytib o’tganimizdek, C# tilida massivlar xotiradan unumli foydalanish maqsadida 
    massivlarni dinamik tarzda e’lon qilishga kelishib olingan. Dinamik tarzda massivni e’lon 
    qilishning umumiy ko’rinishi quyidagicha: 
    [] =new [o’lcham]
    Bu yerda new operatori ga mos ravishda xotiradan joy ajratadi. Dinamik 
    massivlarni e’lon qilishga doir misollar: 
    n = Convert.ToInt32(Console.ReadLine()); 
    int[] M1 = new int[10]; 
    float[] M2 = new float[100]; 
    double[] M3 = new double[n]; 
    M1 va M2 nomli massivlarning elementlari uchun 10 va 100 ta joy ajratilgan. Ular ham 
    dinamik massiv hisoblanadi. M3 massiv uchun xotiradan qancha joy ajratish 
    foydalanuvchining o’ziga havola qilingan, ya’ni n o’zgaruvchisi klaviaturadan kiritiladi, bu 
    o’zgaruvchi qiymati esa M3 massiv o’lchami sifatida qabul qilinadi. M3 massiv dinamik 
    massivga yorqin misoldir. 
    Dinamik massiv o’lchami ham statik massiv kabi aniqlanishi lozim, faqat bunda u dastur 
    ishlashi davomida anqlanishi bilan static massivdan farq qiladi. 
    Indekslar massiv elementlariga murojat qilish uchun ishlatiladi. Indeks massivdagi element 
    sonini bildiradi .Massivdagi to’rtinchi elementga murojat qilish uchun biz 3 indeksidan 
    foydalanishimiz kerak. Misol uchun :num[3]. Massiv elementlarining qiymatlarini olish va 
    o’rnatish uchun indekslardan foydalanamiz. 
    int[] nums=new int [4]; 


    nums[0]=1;
    nums[1]=2; 
    nums[2]=3; 
    nums[3]=5; 
    Console.ReadLine(nums[3]); //5 
    Va bizda faqat 4 ta element uchun belgilangan massiv mavjud bo’lgani uchun , masalan 
    oltinchi elementni qo’llay olmaymiz nums[5]=5;. Agar biz buni qilishga harakat qilsak biz 
    IndexOutOfRangeException-ni olamiz. 
    Statik massivlar elementlar oldindan aniqlanadi. Buning uchun sikl operatorlariga murojaat 
    qilamiz. Masalan, quyidagi misolda dinamik massivga qiymat berish hamda uning 
    elementlarini chop etish amallar ko’rsatilgan. Biz massiv elementlari bilan ishlashimiz uchun 
    for sikl operatori kerak buladi. Bu haqida yetarlicha bilimga ega bo’lmasayiz 
    quyidagi link
     
    orqali o’tsangiz Starter bulimida Suxrob Xayitmurodov yetarlicha malumot bergan. Agar for 
    sikl operatori haqida malumotga ega bulsayiz davom etamiz. 
    using System; 
    internal class ArrayExample 

    private static void Main() 

    int[] A = new int[10]; 
    int i; 
    for (i = 0; i < 10; i = i + 1) 
    A[i] = i; 


    for (i = 0; i < 10; i = i + 1) 
    Console.WriteLine(‘A[‘ + i + ’]: ’ + A[i]); 


    Bu dasturda A massivning elementlari sifatida i ning qiymatlari kelmoqda. Xuddi shunday 
    massiv elementlarini klaviatura orqali ham kiritish mumkin. Buning uchun quyidagi kodni 
    ko’raylik: 
    using System; 
    internal class ArrayExample 

    private static void Main() 

    int[] A = new int[10]; 
    int i; 
    for (i = 0; i < 10; i = i + 1) 
    A[i] = Convert.ToInt32(Console.ReadLine()); 
    for (i = 0; i < 10; i = i + 1) 
    Console.WriteLine(‘A[‘ + i + ’]: ’ + A[i]); 


    Massiv elementlari qiymatlaridan foydalanishga doir quyidagi sodda misolni ko’rib 
    chiqaylik. 


    Men Shahbozga judayam qiziqarli matematik masala berdim. Masala sharti quyidagicha: 
    Men unga 10 ta son aytaman ularning yig’indisini topib 10 ga bo’lishi kerak buladi. Keyin 
    Shahboz menga shu kodni yozib berdi. Sizham bu kodni o’z kompyuteringizda tekshirib 
    kuring. 
    using System; 
    internal class Average 

    private static void Main() 

    int[] A = new int[10]; 
    int i; 
    double S = 0; 
    Console.WriteLine("Sonlarni kiriting"); 
    for (i = 0; i < 10; i = i + 1) 
    A[i] = Convert.ToInt32(Console.ReadLine()); 
    for (i = 0; i < 10; i++) 
    S += A[i]; 
    S = S / 10; 
    Console.WriteLine(S); 




    Massivlar bilan ishlaganda uning o’lchami chegarasidan chiqib ketmaslik lozim. Agar bu 
    holat yuz bersa C# kompilyatori IndexOutOfRangeException xatoligi haqida xabar beradi. 
    Bu xatolikni siz ham sinab kurmoqchi bulsangiz quyidagi kodni kiritib , ishlatib kuring: 
    using System; 
    internal class ArrayErr 

    private static void Main() 

    int[] sample = new int[10]; 
    int i; 
    // Chegaradan chiqish holati yuz bermoqda
    for (i = 0; i < 100; i = i + 1) 
    sample[i] = i; 
    Hozir biz siz bilan funksiyalarda massivlardan foydalanishning bir nechta hollarini ko’rib 
    chiqamiz. 
    1. 
    Keling Python dasturlash tilidagi range() funksiyasiga o’xshash funksiyani biz C# dasturash 
    tilida tuzib ko’ramiz. Izoh: range() – asosan ikkita argument qabul qiladi aytaylik n va m, 
    ushbu funksiyaning vazifasi n dan m gacha bo’lgan butun sonli array ni qaytaradi(m 
    kirmaydi). 
    static int[] Range(int n, int m)
    {
    int[] range = new int[m - n];


    int k = 0;
    for(int i=n; irange[k++] = i;
    return range;
    }
    Bu yerda biz Range funksiyasining type sifatida int[] massiv typeni berdik. Endi ushbu 
    funksiyadan foydalanib n dan m gacha bo’lgan butun sonlar yig’indisini hisoblaymiz: 
    using C=System.Console;
    using System.Linq;
    public class Program
    {
    public static int[] Range(int n, int m)
    {
    int[] range = new int[m - n];
    int k = 0;
    for(int i=n; irange[k++] = i;
    return range;
    }
    public static void Main(string[] args)
    {


    int n,m;
    C.Write("n=");
    n = int.Parse(C.ReadLine());
    C.Write("m=");
    m = int.Parse(C.ReadLine());
    C.WriteLine($"{n} dan {m} gacha bo'lgan yig'indi={Range(n,m+1).Sum()}");
    }
    }
    1. 
    Endi funksiyaning argumentlariga massivlardan foydalanishni ko’rsak. Funksiyaning 
    argumentiga massiv ham xuddi o’zgaruvchidek ishlatiladi Misol uchun:  
    funksiyaNomi(int[] x, string[] y){} 
    Keling biz System nomlar fazosidagi Array classining Sort() metodiga o’xshash funksiya 
    yaratib ko’ramiz. Izoh: Array.Sort metodinig argumentiga massivni bersak ushbu metod 
    bizga bergan massiv elementlarini o’sish tartibida tartiblaydi. Biz faqat int typedagi massivni 
    sort qiladigan funksiya yozamiz! 
    static void Sort(ref int[] massiv)
    {
    int x;
    for(int i=0; ifor(int j=i+1; j{


    if (massiv[j] < massiv[i])
    {
    x = massiv[i];
    massiv[i] = massiv[j];
    massiv[j] = x;
    }
    }
    }
    Xop bu funksiyani endi ishlatib ko’ramiz: 
    static void Main(string[] args)
    {
    int[] mas = { 5, 4, 2, 1, 7, 45, 41, 6, 3, 4 };
    Sort(ref mas);
    foreach (int x in mas)
    Console.Write(x+", ");
    }
    Natija: 1, 2, 3, 4, 4, 5, 6, 7, 41, 45, 
    Endi biz ushbu funksiya yordamida massivdagi eng katta va eng kichik elementni ham 
    topishimiz mumkin: 
    static void Main(string[] args)
    {


    int[] mas = { 5, 4, 2, 1, 7, 45, 41, 6, 3, 4 };
    Sort(ref mas);
    Console.WriteLine($"eng kichigi: {mas[0]}, eng kattasi: {mas[mas.Length - 1]}");
    }
    Natija: eng kichigi: 1, eng kattasi: 45 
    Demak biz funksiyalarning type va ularning argumentlarida bemalol massiv typelaridan 
    foydalana olar ekanmiz. 
    Massivlar daraja yoki o'lchovlar soni kabi tushuncha bilan tavsiflanadi. Massivlar 1, 2, 3 
    yoki n o’lchamli bo’lishi mumkin. Ko’p o’lchmali massivlarni 2 o’lchamli massivlar 
    misolida ko’rib boramiz Bir o’lchovli massivlarni bitta gorizontal qator kabi tasavvur 
    qilishimiz mumkin, misol uchun: 
    int[] nums1 = new int[] { 0, 1, 2, 3, 4}; 
    Vizual ko’rinishda bu massiv: 
    image 
    Endi esa 2 o’lchamli massivga misol ko’ramiz: 
    int[,] nums2 = { { 0, 1, 2 }, { 3, 4, 5 } }; 
    Vizual ko’rinishda bu massiv: 


    image 
    Ko’p o’lchamli massivlarni e’lon qilish uchun kvadrat qavs ichiga vergul qo’yiladi, yani [,] 
    ikki o’lchamli massiv, [,,] uch o’lchamli massiv va hokazo. 
    int[,] arr2d; // ikki o’lchamli massiv 
    int[,,] arr3d; // uch o’lchamli massiv 
    int[,,,] arr4d; // to’rt o’lchamli massiv 
    int[,,,,] arr5d; // besh o’lchamli massiv 
    C# 32 o’lchovgacha bo’lgan massivlarni qo’llab quvvatlaydi. 
    32 o’lchovgacha Karl, 32! 
    Odatda 1,2 yoki 3 o’lchamli massivlar ko’p ishlatiladi. 2 o’lchamli massivlar shuningdek 
    matritsa deb ham ataladi. Ko’p o’lchamli massivlarni ham bir o’lchamli massivlar kabi turli 
    hil yo’l bilan e’lon qilishimiz mumkin: 
    int[,] nums1; 
    int[,] nums2 = new int[2, 3]; 
    int[,] nums3 = new int[2, 3] { { 0, 1, 2 }, { 3, 4, 5 } }; 
    int[,] nums4 = new int[,] { { 0, 1, 2 }, { 3, 4, 5 } }; 
    int[,] nums5 = new[,] { { 0, 1, 2 }, { 3, 4, 5 } }; 
    int[,] nums6 = { { 0, 1, 2 }, { 3, 4, 5 } }; 
    Ko’p o’lchamli massivlarning elementlarini massiv elon qilingan paytda: 
    int[,] nums3 = new int[2, 3] { { 0, 1, 2 }, { 3, 4, 5 } }; 
    kabi aniqlashimiz yoki sikl yordamida elon qilishimiz mumkin: 
    int[,] myArr = new int[4, 5]; 


    Random rand = new Random(); 
    for (int i = 0; i < 4; i++) 

    for (int j = 0; j < 5; j++) 

    myArr[i, j] = rand.Next(1, 30); 
    Console.Write("{0}\t", myArr[i, j]); 

    Console.WriteLine(); 

    Bu yerda Random sinfidan foydalanildi. Shuningdek massivning har bir elementini 
    alohidadan aniqlashimiz mumkin: 
    int[,] nums2 = new int[2, 3]; 
    nums2[0, 0] = 0; 
    nums2[0, 1] = 1; 
    … 
    nums2[2, 3] = 5; 
    Ikki o’lchamli massivlarda [2, 3] masivning qatorlar va ustunlar sonini belgilaydi yani 2 
    qatorlar soni va 3 ustunlar soni, quyida bunga misol ko’rishingiz mumkin: 
    int[,] nums3 = new int[2, 3] { { 0, 1, 2 }, { 3, 4, 5 } }; 


    image 
    Keling endi 2 o’lchamli massivga misol ko’ramiz. Sinfxonada 3 qator partalar joylashgan, 
    har bir qatorda 4tadan parta bor, bir partaga 1ta bola o’tiradi, oddiy hisob kitob bilan bu 
    honada 3*4=12 ta parta borligi va 12ta o’quvchi sig’ishini hisoblay olamiz, endi masalaga 
    o’tamiz, matematika fanidan imtihonda barcha o’quvchilar 3,4 yoki 5 baholarini olishdi, 
    savol sinfning o’rtacha bahosi necha? 
    using System; 
    class Program 

    static void Main(string[] args) 

    //3 qator 4 ustunlik 2 o'lchamli massiv elon qilamiz 
    int[,] myArr = new int[3, 4]; 
    Random rand = new Random(); 
    for (int i = 0; i < 3; i++) 

    for (int j = 0; j < 4; j++) 

    // random yordamida bolalarning baholarini aniqlaymiz 


    // (3,6) bu oraliqni bildiradi va 3,4,5 sonlarini o'z ichiga oladi 
    myArr[i, j] = rand.Next(3, 6);
    Console.Write("{0}\t", myArr[i, j]); 

    Console.WriteLine(); 

    int sum = 0; //sinfning umumiy bahosi 
    double average = 0.0D; //sinfnig o'rtacha bahosi 
    for (int i = 0; i < 3; i++) 

    for (int j = 0; j < 4; j++) 

    sum += myArr[i, j]; 


    average = Convert.ToDouble(sum) / 12; 
    Console.WriteLine($"Sinfning umumiy bahosi: {sum}"); 
    Console.WriteLine($"Sinfning o'rtacha bahosi: {average}"); 


    Natija: 


    5 3 5 4 
    4 3 5 4 
    3 3 3 3 
    Sinfning umumiy bahosi: 45 
    Sinfning o'rtacha bahosi: 3,75 
    Massivlarning asosiy hususiyatlari: 
    O’lchovi(rank): massivning o’lchovini bildiradi 
    Massiv uzunligi(array lenght): massivning barcha elementlari soni 
    o'lchov uzunligi(dimension length): bir alohida o’lchovining uzunligi 
    Biz ko’pincha metodlarda cheklangan miqdordagi argumentlardan foydalanamiz . Agar 
    dasturdagi metodda argumentlar soni kopaysa kodning korinishini xiralashadi yani 
    xunuklashadi. params kalit so’zi orqali biz cheksiz argumentlarni massiv korinishida 
    kirgazishimiz va kodni ancha ixchamlashtirishimiz mumkin. params Parametrli metodlarni 
    chaqirganimizda , biz quyidagilarni kiritishimiz mumkin: 
    • Massiv elementlari turiga oid argumentlarning vergul bilan ajratilgan ro'yxati: 
    int yigindi = Sum(19, 9, 7, 17, 39, 47); 
    • Belgilangan turdagi argumentlar massivi: 
    object[] obj = new object[] { "hamroliyev", 'a', 19, 9, 12.8 }; 
    //Add metodini chaqiramiz. 
    Add(obj); 
    • Hech qanday argumentsiz. Hech qanday argument yubormasak, params ro'yxati uzunligi 
    nolga teng boladi. 


    Sum(); 
    params kalit so’zi dasturchi metodda foydalaniladigan parametrlar soni haqida oldindan 
    ma'lumotga ega bo'lmagan hollarda foydali bo'ladi. Metod konstruktorida params kalit 
    sozidan faqat bir marta foydalanishimiz mumkin. params ga tegishli argumentdan keyin 
    qoshimcha argument berish mumkin emas. 
    params kalit so’zidan foydalanishga oddiy misol: 
    using System; 
    namespace dot_net_uz 

    class Program 

    // params parametrni o'z ichiga olgan metod 
    public static int Sum(params int[] sonlarRoyxati) 

    int sum = 0; 
    foreach (int i in sonlarRoyxati) 

    sum += i; 

    return sum; 

    static void Main(string[] args) 



    //Sum metodini chaqiramiz. 
    int [] yigindi = Sum(19, 9, 7, 17, 39, 47); 
    Console.WriteLine($"yigindi : {yigindi}"); 
    Console.ReadKey(); 
    }


    Output: 
    yigindi : 138 
    yigindi : 138 

    Sizda "params kalit so'zidan foydalanmasdan ham metodlarda massivdan foydalanish 
    mumkinku, params ni nima keragi bor?" degan savol tug'ilishi mumkin. Javob shunday: 
    params kalit so'zi metoddan foydalanishni ancha qulaylashtiradi: 
    using System; 
    namespace dot_net_uz 

    class Program 

    // params parametrni o'z ichiga olgan metod 


    public static int Sum(params int[] sonlarRoyxati) 

    int sum = 0; 
    foreach (int i in sonlarRoyxati) 

    sum += i; 

    return sum; 

    static void Main(string[] args) 

    int [] a={19, 9, 7, 17, 39, 47}; 
    int yigindi = Sum(a); // params ishlatmasdan ham metodni bu usulda chaqirish mumkin edi 
    Console.WriteLine($"yigindi : {yigindi}"); 
    // paramsdan foydalangandagina metodni shunday chaqirish mumkin: 
    Console.WriteLine($"yigindi : {Sum(19, 9, 7, 17, 39, 47)}"); 
    // Agar paramsdan foydalanmagan bo'lsangiz kodning bu qismida xatolik yuzaga keladi, 
    // paramsdan foydalansangiz metodni shu holatda ham chaqirish mumkin 
    Console.WriteLine(Sum()); 
    Console.ReadKey(); 
    }




    Object turidan va paramsdan foydalanish metodni har qanday turdagi va har qanday 
    miqdordagi qabul qila olishiga imkon beradi: 
    using System; 
    namespace dot_net_uz 

    class Program 

    // params parametrni o'z ichiga olgan metod 
    // object turidagi parametrlardan foydalanilgan funksiya 
    public static void Print(params object[] royxat) 

    for (int i = 0; i < royxat.Length; i++) 

    // Natijalarni chop etish 
    Console.WriteLine(royxat[i]); 


    static void Main(string[] args) 



    object[] obj = new object[] { "hamroliyev", 'a', 19, 9, 12.8 }; 
    Console.WriteLine("1-usul:"); 
    //Print metodini chaqiramiz. 
    Print(obj); 
    Console.WriteLine(); 
    Console.WriteLine("2-usul:"); 
    //Print metodini chaqiramiz. 
    Print(19,"dot-net",20,"Hamroliyev"); 
    Console.WriteLine("3-usul:"); 
    Print(); 
    Console.ReadKey(); 
    }


    Output: 
    1-usul: 
    hamroliyev 

    19 

    12.8 


    2-usul: 
    19 
    dot-net 
    20 
    Hamroliyev 
    Oddiy usullardan tashqari sinflarda 

    Download 0,59 Mb.
      1   2   3   4




    Download 0,59 Mb.
    Pdf ko'rish