Kurs ishi mavzu: Turlarni dinamik ta’rifi. Toshkent-2023 Turlarni dinamik ta’rifi Kurs ishi mavzu  Turlarni dinamik ta’rifi. Toshkent-2023 Turlarn

TOSHKENT AMALIY FANLAR UNVIRSITETI
Kampyuter injenerligi yo’nalishi 10-guruh talabasi Maxmudova Zaynabxonning
KURS ISHI
MAVZU: Turlarni dinamik ta’rifi.
TOSHKENT-2023
Turlarni dinamik ta’rifi
Kirish
Turlarni tarfi.
Turlarni almashtirish.
Dasturdagi ma’lumot strukturalari.
5.Ikki o’lchamli massivlar.
6. Konstruktorni asosiy qoidalari.
KIRISH
Elektron mashinalarda masalalarni yechish hamda ularda har xil aqliy mehnat turlarini bajarish nazariyasi va usullarini ishlab chiqish bilan shugʻullanadigan fan; algoritmlar nazariyasining amaliy boʻlimi; insonning mashina bilan aloqa qilish vositasi. Asosiy vazifalaridan biri elektron mashinalar uchun programma (dastur) tuzish usullari, ularni tekshirish va takomillashtirishdan iborat. Yechilishi lozim boʻlgan masala algoritmi Dasturlashda „mashina tili“ga oʻtkaziladi.
Dasturlash — bevosita dasturlash va avtomatik dasturlashga boʻlinadi. Bevosita Dasturlashda programmaning umumiy sxemasini ishlab chiqishdan kodlash va mashinaga kiritishgacha boʻlgan barcha ishni programmachi bajaradi. Avtomatik dasturlashda esa programmachi faqat programma sxemasini tuzib, uni qisqartirilgan simvolik kurinishda yozadi, programma tuzish va uni kodlash kabi texnikaviy ishlarni esa mashinaning oʻzi maxsus dasturlash programmasi yordamida bajaradi.
Dasturlash jarayoni, odatda, quyidagi bosqichlarga boʻlinadi: masalaning qoʻyilishi; masalaning algoritmik tavsifini tuzish; masalani yuqori darajadagi programma tilida Dasturlash; masalani taxminiymashina tilida Dasturlash; masalani mashina tilida Dasturlash
Dasturlash tili programmalar tuzishning asosiy vositasidir. Bu tillar konkret mashina komandalari sistemasiga bogʻliq boʻlmasligi va iboralar strukturasi jihatidan umumiy xususiyatga ega boʻlishi bilan boshqa tabiiy tillarga oʻxshab ketadi. Iboralar ikki turga — operatorlar hamda tavsiflarga boʻlinadi, ularning bir-biri bilan bogʻliqligi qavslar bilan, alohidaligi nuqtali vergul bilan ajratiladi. Operator tilning amal birligi boʻlib, oʻz navbatida, oʻzgaruvchan kattalikka qiymat beruvchi operatorlar, shartga muvofiq tegishli hisoblash tarmogʻini tanlovchi (shartli) operator va takroriy hisobni amalga oshiruvchi sikl operatorlariga boʻlinadi. Tavsifda oʻzgaruvchan kattalik va boshqa belgilar xususiyatlari yoziladi. Biror xususiy masalani yechish uchun tuzilgan programmani simvolik ravishda funksional belgilash mumkin. Bunday belgilash va tavsif birgalikda kichik programma deb yuritiladi. Yangi programmalar tuzishda kichik programmalardan tayyor holda foydalanish mumkin.
Juda koʻp dasturlash tillari (algol-60, q. Algol), muhandislik va ilmiy masalalarni yechish uchun fortran, iqtisodiy hisoblashlar uchun kobol, matematik modellar uchun si mula, tako-millashgan algol-68, PL/I yaratildi. Ularning har biri uchun shu tillarda ifodalangan masalalarga qarab mashina programmasini avtomatik tarzda qaytatuzuvchi translyatorlar mavjud. Taxminiy mashina tili ikkilik sistemadan koʻra yanada qulayroq simvollarda ifodalangan mashina komandalari terminlaridagi programmalar boʻlib, bunda koʻpincha, yuqori darajadagi til sifatida blok sxemalardan foydalaniladi.
Dasturlashning programma tuzilgandan keyingi yana bir asosiy bosqichi „tekshirish“ (otladka) boʻlib, bunda yoʻl qoʻyilgan xatolar topiladi va tuzatiladi. Programmalar kodlanadi va mashinaga maxsus qurilma yordamida kiritiladi. Amaliyotda Dasturlashning yangi va tezkor usullari bor (2004); 2) matematik dasturlash — amaliy matematikaning bir boʻlimi; umumiy maʼnoda — biron-bir funksiya fo (x) ning ekstremumini (qarang Ekstremum) topish masalasi tushuniladi.
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
0
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
a
19
9
12.8
2-usul:
19
dot-net
20
Hamroliyev
Oddiy usullardan tashqari sinflarda
|