Ikki o„lchovli massivlar - O„zbekiston respublikasi oliy va o„rta maxsus ta‟lim vazirligi samarqand davlat universiteti...

Ikki o„lchovli massivlar
C++ dasturlash tilida ba‘zi hollarda bir nechta o‗lchamlari va turi bir xil
bo‗lgan bir o‗lchovli massivlardan foydalanishga to‗g‘ri keladi. Bir nechta bir
o‗lchovli massivlarni birlashtirish natijasida ikki o‗lchovli massivlarni hosil qilish
mumkin. Ikki o‗lchovli massivlarni tarkibida ma‘lumotlar satrlarning satri
ko‗rinishida tasvirlanadi. Ikki o‗lchovli massivlarning tarkibi ham bir o‗lchovli
massivlar kabi tartiblangan bir turga mansub bo‗lishi kerak.
Ikki o‗lchovli massivlarga matematikadagi matritsalar misol bo‗lishi
mumkin. Ikki o‗lchovli massivlar tarkibidagi elementlar xuddi matritsani
elementlari kabi tasvirlanadi.
Ta‘rif: Bir turga mansub bo‗lgan yagona nom bilan saqlangan matritsa
ko‗rinishdagi tartiblangan ma‘lumotlar majmuasi ikki o‗lchovli massivlar deyiladi.
Ikki o‗lchovli massivning barcha elementlari aniq turga mansub bo‗ladi va
uning elementlari bir nechta satrlar ko‗rinishda bo‗ladi. Ikki o‗lchovli massivlar
quyidagi shaklda bo‗ladi.
Yuqoridagi shakldan ko‗rinib turibdiki ikki o‗lchovli massiv bir o‗lchovli
massivlarning bir nechtasi yoki matritsa ko‗rinishida tasvirlanar ekan. Ikki
o‗lchovli massivlarning kompyuter xotirasiga har bir satr uchun alohida tartib
nomer bilan saqlanadi. Ikki o‗lchovli massivlarning har bir elementiga o‘zining
indeksi bo‗yicha murojat qilinadi.
132
Ikki o‗lchovli massivlarni C++ dasturlash tilida e‘lon qilish va uning
umumiy ko‗rinishi quyidagicha.
[][];
Ikki o‗lchovli massivlarni C++ dasturlash tilida e‘lon qilish uchun massiv
turi, massiv nomi, massiv satrdagi elementlar soni va massiv ustunidagi elementlar
soni beriladi. Agar a[5,2] massiv berilgan bo‘lsa, uni C++ dasturlash tilida a[2][5]
ko‗rinishda e‘lon qilinadi. C++ dasturlash tilida massivlarni yozilishi,
matematikadan bir oz farq qilinadi, ya‘ni ustun va satrlari joyi almashtiriladi. Ikki
o‗lchovli massivlarni C++ dasturlash tilida e‘lon qilinishi.
#include
int main()
{ int a[10][10]; //butun turli 100ta elementli massiv
double b[10][10]; //haqiqiy turli 100ta elementli massiv
return 0;
}
Massivlarni elementlariga murojat qilish uchun uning har bir elementining
o‘z indeksi bo‗yicha murojat qilinadi. Massiv elementlariga murojat qilishni
quyidagi shakl orqali bajariladi. Quyidagi ikki o‗lchovli massiv berilgan bo‗lsin.
a(3,3) massivning elementlariga C++ dasturlash tilida murojat qilish
quyidagicha ko‗rinishda bo‗ladi.
a[1][1]=1, a[2][1]=2, a[3][1]=3, a[1][2]=4, a[2][2]=5, a[3][2]=5, a[1][3]=4,
a[2][3]=5, a[3][3]=5,
C++ dasturlash tilida ikki o‗lchovli massivlarning elementlarini boshlang‘ich
qiymatlarini quyidagi tartibda berilishi mumkin.
#include
int main()
{ int a[][]={{1,2,3}{4,5,6}{7,8,9}};
return 0;
}
133
Massiv elementlari soni oldindan berilmasa, komplyator massiv elementlar
sonini boshlang‘ich qiymatlarga qarab aniqlaydi.
Ikki o‗lchovli massiv elementlari boshlang‘ich qiymatlari oldindan
berilmasa, albatta, uning elementlar sonini oldindan berish kerak bo‗ladi. Ikki
o‗lchovli massiv elementlari soni aniq, lekin uning elementlarini boshlang‘ich
qiymatlari berilmaganda, massiv elementlarini shakllantirish.
#include
int main()
{ int a[3][3];
for(int i=0;i<=2;i++)
for(int j=0;j<=2;j++)
cin>>a[i][j];
return 0;
}
Misol:
A(2,3) massiv berilgan uning elementlarini ikkiga ko‗paytirib
ekranga chiqaring.
Bu masala yechimini aniqlashda ham bir o‗lchovli massivlar kabi har bir
elementiga murojat qilib, har bir elementini ikkiga ko‗paytirish kerak.
#include
int main()
{ int a[3][2];
for(int i=0;i<=2;i++)
for(int j=0;j<=1;j++)
cin>>a[j][i];
for(int i=0;i<=2;i++)
{
for(int j=0;j<=1;j++)
cout<<2*a[j][i]<<‖ ‖;
cout<<‖\n‖; }
return 0;
}
Kiritish uchun ma‘lumot
1 2 3
4 5 6
Dastur natijasi
2 4 6
8 10 12
134
Ikki o‗lchovli massivlar yordamida C++ dasturlash tilida matematikani balki
boshqa sohalarning ham bir necha masalalarini hal etish mumkin.
Misol:
A(n,n) matritsa berilgan uning asosiy dioganalidan yuqoridagi
elementlarini ikkiga ko‗paytirib ekranga chiqaring.
#include
int main()
{ int a[90][90];
int n,m; cout<<‖n=‖;
cin>>n; m=n;
for(int i=0;ifor(int j=0;jcin>>a[j][i];
for(int i=0;i{ m=m-i; j=0;
while(j<=m)
{ cout<<2*a[j][i]<<‖ ‖;
j++;
}
cout<<‖\n‖; }
return 0;
}
Kiritish uchun ma‘lumot
n=3
1 2 3
4 5 6
7 8 9
Dastur natijasi
2 4 6
8 10
14
Ikki o‗lchovli massiv elementlarining har birini tekshirish yoki ular ustida
amallar bajarish uchun ichma ich sikllardan foydalaniladi. Yuqoridagi masala
yechimida ikki o‗lchovli massivning barcha elementlari tekshirilmaydi shuning
uchun ichki siklning while yordamida yozish maqsadga muvofiq bo‘ladi. Masssiv
o‗lchami kattalashgan sayin uning elementlari uchun xotiradan ajratiladigan joy
hajmi juda tez o‗sadi. Masalan, 32 razryadli mashinada uch o‗lchamli float b [10]
[8] [10] massivi e‘lon qilingan bo‗lsa, u xotirada 10*10*8*4=3200 bayt joyni
egallaydi.
135
Agar shu massiv int b [10] [10] [10] [10] kabi to‗rt o‗lchamli ko‗rinishda
e‘lon qilinsa, xotiradan 40000 baytlik joyni band qilinadi. Demak, massivning
o‗lchamlari soniga chegara qo‗yilmagan, agar xotira muammosiga duch kelinmasa.
n o‗lchamli massivning xotiradan egallaydigan joyi formulasi quyidagicha. Baytlar
soni =1-o‗lcham * 2-o‗lcham *…..* n-o‗lcham * turning baytlardagi o‗lchami.
Amalda uch o‗lchamli massivlardan ham juda kam foydalaniladi. Uch o‗lchamdan
yuqori o‗lchamli massisvlardan esa deyarli foydalanilmaydi.
Massivlarga oid masalalar yuqoridagi holatlar bo‗yicha C++ dasturlash tilida
tasvirlanadi.
|