Kompyuter injenering

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
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
|