Mavzu-4: Massivlarni tashkil etish




Download 185,97 Kb.
Pdf ko'rish
bet4/5
Sana30.11.2023
Hajmi185,97 Kb.
#108699
1   2   3   4   5
Bog'liq
1- Mustaqil ish

Mavzu-4: Massivlarni tashkil etish. 
 
Massiv tushunchasi. Massiv bu bir tipli nomerlangan ma’lumotlar 
jamlanmasidir. Massiv indeksli o‘zgaruvchi tushunchasiga mos keladi. Massiv 
ta’riflanganda tipi, nomi va indekslar chegarasi ko‘rsatiladi. Masalan type 
turidagi length ta elementdan iborat a nomli massiv shunday e’lon qilinadi: 
type a[length];
Bu maxsus a[0], a[1], ..., a[length -1] nomlarga ega bo‘lgan type turidagi 
o‘zgaruvchilarning e’lon qilinishiga to‘g‘ri keladi. 
Massivning har bir elementi o‘z raqamiga - indeksga ega. Massivning x-nchi 
elementiga murojaat indekslash operatsiyasi yordamida amalga oshiriladi:
int x=...; //butun sonli indeks 
TYPE value=a[x]; //ch-nchi elementni o‘qish
a[x]=value; //x-yxb elementga yozish 
Indeks sifatida butun tur qiymatini qaytaradigan har qanday ifoda qo‘llanishi 
mumkin: char, short, int, long. C++ da massiv elementlarining indekslari 0 dan 
boshlanadi (1 dan emas), length elementdan iborat bo‘lgan massivning oxirgi 
elementining indeksi esa - bu length -1 (length emas). Massivning int z[3] 
shakldagi ta’rifi, int tipiga tegishli z[0],z[1],z[2] elementlardan iborat massivni 
aniqlaydi.


Massiv chegarasidan tashqariga chiqish (ya’ni mavjud bo‘lmagan elementni 
o‘qish/yozishga urinish) dastur bajarilishida kutilmagan natijalarga olib kelishi 
mumkin. SHuni ta’kidlab o‘tamizki, bu eng ko‘p tarqalgan xatolardan biridir. 
Agar massiv initsializatsiya qilinganda elementlar chegarasi ko‘rsatilgan bo‘lsa 
, ro‘yxatdagi elementlar soni bu chegaradan kam bo‘lishi mumkin, lekin ortiq 
bo‘lishi mumkin emas.
Misol uchun int a[5]={2,-2}. Bu holda a[0] va a[1] qiymatlari aniqlangan 
bo‘lib, mos holda 2 va –2 ga teng. Agar massiv uzunligiga qaraganda kamroq 
element berilgan bo‘lsa, qolgan elementlar 0 hisoblanadi: 
int a10[10]={1, 2, 3, 4}; //va 6 ta nol
Agar nomlangan massivning tavsifida uning o‘lchamlari ko‘rsatilmagan bo‘lsa, 
kompilyator tomonidan massiv chegarasi avtomatik aniqlanadi: 
int a3[]={1, 2, 3};
Bir o‘lchamli massivlarni funksiya parametrlari sifatida uzatish. Massivdan 
funksiya parametri sifatida foylalanganda, funksiyaning birinchi elementiga 
ko‘rsatkich uzatiladi, ya’ni massiv hamma vaqt adres bo‘yicha uzatiladi. Bunda 
massivdagi elementlarning miqdori haqidagi axborot yo‘qotiladi, shuning uchun 
massivning o‘lchamlari haqidagi ma’lumotni alohida parametr sifatida uzatish 
kerak. 
Funksiyaga massiv boshlanishi uchun ko‘rsatkich uzatilgani tufayli (adres 
bo‘yicha uzatish), funksiya tanasining operatorlari hisobiga massiv o‘zgarishi 
mumkin.
Funksiyalarda bir o‘lchovli sonli massivlar argument sifatida ishlatilganda 
ularning chegarasini ko‘rsatish shart emas. 
Funksiyalarda bir o‘lchovli sonli massivlar argument sifatida ishlatilganda 
ularning chegarasini ko‘rsatish shart emas.
Ko‘p o‘lchovli massivlar ta’rifi. Ikki o‘lchovli massivlar matematikada matritsa 
yoki jadval tushunchasiga mos keladi. Jadvallarning insializatsiya qilish qoidasi
ikki o‘lchovli massivning elementlari massivlardan iborat bo‘lgan bir o‘lchovli 
massiv ta’rifiga asoslangandir. 
Misol uchun ikki qator va uch ustundan iborat bo‘lgan xaqiqiy tipga tegishli d 
massiv boshlang‘ich qiymatlari quyidagicha ko‘rsatilishi mumkin:


float d[2][3]={(1,-2.5,10),(-5.3,2,14)}; 
Bu yozuv quyidagi qiymat berish operatorlariga mosdir:
d[0][0]=1;d[0][1]=-2.5;d[0][2]=10; 
d[1][0]=-5.3;d[1][1]=2;d[1][2]=14;
Bu qiymatlarni bitta ro‘yxat bilan xosil qilish mumkin: 
float d[2][3]={1,-2.5,10,-5.3,2,14};
Initsializatsiya yordamida boshlang‘ich qiymatlar aniqlanganda massivning 
hamma elementlariga qiymat berish shart emas. 
Misol uchun: int x[3][3]={(1,-2,3),(1,2),(-4)}.
Bu yozuv quyidagi qiymat berish operatorlariga mosdir: 
x[0][0]=1;x[0][1]=-2;x[0][2]=3;
x[1][0]=-1;x[1][1]=2;x[2][0]=-4; 
Initsializatsiya yordamida boshlang‘ich qiymatlar aniqlanganda massivning 
birinchi indeksi chegarasi ko‘rsatilishi shart emas, lekin qolgan indekslar 
chegaralari ko‘rsatilishi shart.
Misol uchun: 
double x[][2]={(1.1,1.5),(-1.6,2.5),(3,-4)}
Bu misolda avtomatik ravishda katorlar soni uchga teng deb olinadi. 
Funksiyaga ko‘p o‘lchamli massivlarni uzatish. Ko‘p o‘lchamli massivlarni 
funksiyaga uzatishda barcha o‘lchamlar parametrlar sifatida uzatilishi kerak. 
C++ da ko‘p o‘lchamli massivlar aniqlanishi bo‘yicha mavjud emas. Agar biz 
bir nechta indeksga ega bo‘lgan massivni tavsiflasak (masalan, int mas [3][4]), 
bu degani, biz bir o‘lchamli mas massivini tavsifladik, bir o‘lchamli int [4] 
massivlar esa uning elementlaridir
Misol: Kvadrat matritsani uzatish (transportirovka qilish) 
Agar void transp(int a[][],int n){.....} funksiyasining sarlavhasini aniqlasak, bu 
holda biz funksiyaga noma’lum o‘lchamdagi massivni uzatishni xohlagan bo‘lib 
qolamiz. Aniqlanishiga ko‘ra massiv bir o‘lchamli bo‘lishi kerak, hamda uning 


elementlari bir xil uzo‘nlikda bo‘lishi kerak. Massivni uzatishda uning 
elementlarining o‘lchamlari haqida ham biron narsa deyilmagan, shuning uchun 
kompilyator xato chiqarib beradi.
Bu muammoning eng sodda echimi funksiyani quyidagicha aniqlashdir: 
void transp(int a[][4],int n){.....}, bu holda har bir satr o‘lchami 4 bo‘ladi, 
massiv ko‘rsatkichlarining o‘lchami esa hisoblab chiqariladi.
Satrlar. C++ da belgili ma’lumotlar uchun char turi qabul qilingan. Belgili 
axborotni taqdim etishda belgilar, simvolli o‘zgaruvchilar va matniy 
konstantalar qabul qilingan. 
Misollar:
const char c='c';//belgi - bir baytni egallaydi, uning qiymati o‘zgarmaydi 
char a,b;//belgili o‘zgaruvchilar, bir baytdan joy egallaydi, qiymatlari o‘zgaradi.
C++ dagi satr - bu nul-belgi - \0 (nul-terminator)- bilan tugallanuvchi belgilar 
massivi. Nul-terminatorning holatiga qarab satrning amaldagi uzunligi 
aniqlanadi. Bunday massivdagi elementlar soni, satr tasviriga qaraganda, bittaga 
ko‘p. 
Simvolli massivlar quyidagicha initsializatsiya qilinadi:
char capital[]="TASHKENT"; Bu holda avtomatik ravishda massiv elementlari 
soni aniqlanadi va massiv oxiriga satr ko‘chirish '\0'simvoli qo‘shiladi. 
YUqoridagi initsializatsiyani quyidagicha amalga oshirish mumkin:
char capital[]={'T','A','S','H','K','E','N','T','\0'}; 
Bu holda so‘z oxirida '\0'simvoli aniq ko‘rsatilishi shart.
Qiymat berish operatori yordamida satrga qiymat berish mumkin emas. Satrni 
massivga yoki kiritish paytida yoki nomlantirish yordamida joylashtirish 
mumkin. 
Funksiyalar va satrlar. Funksiyalarda satrlar ishlatilganda ularning chegarasini 
ko‘rsatish shart emas. Satrlarning uzunligini hisoblash len funksiyasii 
quyidagicha ta’riflash mumkin:
int len(char c[]) 


{ int m=0;
for(m=0;c[m]!=’0’;m++); 
return m;
};
Bu funksiyaning standart varianti strlen deb ataladi va bu funksiyadan 
foydalanish uchun string.h sarlavxali faylidan foydalanish lozim. 
So‘zlar massivini kiritish. C++ tilida so‘zlar massivlari ikki o‘lchovli simvolli 
massivlar sifatida ta’riflanadi. Misol uchun:
char name[4][5]. 
Bu ta’rif yordamida har biri 5 ta harfdan iborat bo‘lgan 4 ta so‘zli massiv 
kiritiladi. So‘zlar massivlari quyidagicha initsializatsiya qilinishi mumkin:
char Name[3][8]={ "Anvar","Mirkomil","YUsuf"}. 
Bu ta’rifda har bir so‘z uchun xotiradan 8 bayt joy ajratiladi va har bir so‘z 
oxiriga ' \0' belgisi qo‘yiladi.
So‘zlar massivlari initsializatsiya qilinganda so‘zlar soni ko‘rsatilmasligi 
mumkin. Bu holda so‘zlar soni avtomatik aniqlanadi: 
char comp[][9]={ "kompьyuter","printer","kartridj"}.
Funksiyalar va so‘zlar massivlar. Satrli massivlar funksiya argumenti sifatida 
ishlatilganda satrlarning umumiy uzunligi aniq ko‘rsatilishi shartdir. 
STRING TIPI. SATRLAR BILN ISHLASH UCHUN STANDART 
BIBLIOTEKAGA KIRUVCHI STRING MURAKKAB TURIDAN 
FOYDALANISH QULAYDIR.
Bu tipdan foydalanish uchun quyidagi sarlavxali faylni ulash lozim:
#include
Satrlarni ta’riflashga misollar:
string st( "BAXO \n" ); //simvollar satri bilan initsiallash 


string st2; // bo‘sh satr
string st3( st ); shu tipdagi o‘zgaruvchi bilan initsiallash 

Download 185,97 Kb.
1   2   3   4   5




Download 185,97 Kb.
Pdf ko'rish