type a[length] - 21-mavzu: Dasturlash tilining asosiy konstruktsiyalari, ulardan foydalanish xususiyatlari reja

type a[length];
Bu buyruqda type turiga tegishli maxsus a[0], a[1], ..., a[length-1] nomli o’zgaruvchilar e’lon qilinadi. Massivning har bir elementi o’z nomeri - indeksga ega bo’ladi. Massivning x - elementiga murojat qilish indeksatsiya amali yordamida amalga oshiriladi:
int x = ... ; // Butun qiymatli indeks
TYPE value = a[x]; // x - elementni o’qish
a[x] = value; // x- elementga yozish
Indeks sifatida butun turdagi qiymat beruvchi ixtiyoriy ifodani ishlatish mumkin: char, short, int, long. C tilida massiv elementlarining indeksi 0 dan (1 dan emas) boshlanadi, LENGTH uzunlikdagi massivning oxirgi elementining indeksi esa LENGTH-1 (LENGTH emas). Shuning uchun ham massivning barcha elementlari bo’yicha sikl quyidagicha yoziladi:
TYPE a[LENGTH]; int indx;
for(indx=0; indx < LENGTH; indx++)
...a[indx]...;
Bu erda indx < LENGTH sharti indx <= LENGTH-1 ga teng kuchli. Massiv chegarasidan chiqish (mavjud bo’lmagan elementni o’qish/yozish) kutilmagan natijalarga va dastur ishida ham kutilmagan holatlarga olib kelishi mumkin. Bunday xatolar massivlar bilan ishlashdagi eng ko’p yo’l qo’yiladigan xatolar hisoblanadi.
Statik massivlarni uning elementlari qiymatlarini {} ichida vergul bilan ajratib yozish, ya’ni initsializatsiya qilish yo’li bilan ham e’lon qilish mumkin. Agar massiv uzunligidan kam elementlar berilgan bo’lsa, u holda qolgan elementlari nol deb hisoblanadi:
int a10[10] = { 1, 2, 3, 4 }; // va 6 ta nol
Agar massivlarni initsializatsiya qilishda uning o’lchovi berilmasa u kompilyator tomonidan hisoblanadi:
int a3[] = { 1, 2, 3 }; // Xuddi a3[3] kabi.
C++ tilida massiv elementlarining turiga cheklovlar qo’yilmaydi, lekin bu turlar chekli o’lchamdagi ob'ektlarning turi bo’lishi kerak. Chunki kompilyator massivning xotiradan qancha joy (bayt) egallashini bilishi zarur. Xususan, massiv komponentasi massiv bo’lishi ham mumkin, ya’ni «vektorlar-vektori» natijada matritsa deb nomlanuvchi ikki o’lchovli massivni hosil qiladi.
Agar matritsaning elementi ham vektor bo’lsa, uch o’lchamli massiv hosil bo’ladi. Shu yo’l bilan ixtiyoriy o’lchamdagi massivni hosil qilish mumkin.
Ikki o’lchovli statik massivning sintaksisi quyidagi ko’rinishda bo’ladi:
[][];
Masalan, 5x15 o’lchamli haqiqiy sonlar qabul qiluvchi statik massivning e’loni quyidagicha bo’ladi:
float s_mas[5][15];
E’lon qilingan s_mas massiv o’zgaruvchisi 5 ta satr va 15 ta ustundan tashkil topgan matritsaga o’xshaydi, ya’ni uning 75 ta elementi mavjud.
Endi adres nuqtai–nazaridan ko’p o’lchovli massiv elementlariga murojaat qilishni ko’raylik. Quyidagi e’lonlar berilgan bo’lsin:
int a[4][5];
float b[3][2][4];
Birinchi e’londa ikki o’lchovli massiv, ya’ni 4 ta satr va 5 ta ustundan iborat matritsaga o’xshash massiv e’lon qilingan, ikkinchisida esa uch o’lchovli, ya’ni 3 ta satr, 2 ta ustun va 4 ta qavatdan iborat massiv e’lon qilingan.
Massiv elementlariga murojaat qilish uchun massiv nomidan keyin kvadrat qavsda har bir o’lcham uchun indeks yozilishi kerak, masalan, a[i][j] ko’rinishidagi asosiy murojaatdan tashqari, vositali murojaat qilish *(*(a+i)+j) yoki *(a[i]+j) va b[i][j][k] ko’rinishidagi asosiy murojaatdan tashqari, vositali murojaat qilish *(*(*(b+i)+j)+k) yoki *(*(b[i]+j)+k) yoki *(b[i][j]+k) ham mumkin.
Ko’p o’lchovli massivlarni initsializatsiyalash quyidagi misollar yordamida ko’rsatiladi:
int s_mas[3][4]={0,4,1,-5,2,-22,15,-46,18,98,12,-3};
int b[4][3]={{5,1,24},{1,34,-12},{76,-2,7},{7,-25,7}};
Birinchi e’londa boshlanьich qiymatlar ketma-ket yozilgan, ikkinchi e’londa esa qiymatlar guruhlashgan.
Endi ikki o’lchovli dinamik massivlar tashkil qilishni qarab chiqamiz. Bunday massivlarni tashkil etishning sintaksisi quyidagi:
**;
ko’rinishda bo’lgan «ko’rsatkichga ko’rsatkich» ishlatiladi.
Dastlab massiv satrlari soniga qarab ko’rsatkichlar massiviga dinamik xotiradan joy ajratiladi:
d_mas=new int *[n]; // bu erda n massiv satrlari soni
Keyin, dinamik massivning har bir satri uchun takrorlash operatoridan foydalanib xotiradan joy ajratish va ularning boshlanьich adreslarini d_mas massiv elementlariga joylashtirish zarur bo’ladi:
for(int i=0;i //m ustunlar soni
Shuni ta’kidlash kerakki, dinamik massivning har bir satri xotiraning turli joylarida joylashishi mumkin.
Ikki o’lchovli dinamik massivni o’chirish uchun esa oldin massivning har bir elementi (satri), so’ngra massivning o’zi o’chiriladi:
|
for (i=0;i
delete [] d_mas;
|
|