Massivlarning kerakliligi
Nima uchun bizga massivlar kerak? Quyidagi misolni qaraymiz:
#include< iostream.h >
void main( )
{
int a = 10; // a oddiy o`zgaruvchi
a = 20;
cout << a; // natija 20 bo`ladi
}
Yuqoridagi misolda a ning chiqarilgan natijasi 20. Yuqorda ko`rsatilganidek 10 a ga 20 biriktirilganidan oldin biriktirilgan. Biz a ga 20 ni biriktirganda a da saqlangan qiymat 10 yangi qiymat 20 bilan almashtiriladi. Bundan oddiy o`zgaruvchilar bir vaqtning o`zida faqatgina bitta qiymatni qabul qilish imkoniga ega. Bu fakt hamma tipdagi berilganlar uchun shundaydir. Ammo amaliyotda o`zgaruvchilarga bittadan ko`p qiymatlar biriktirilishi kerak. Bunga massivlar yordamida erishish mumkin. Massiv o`zgaruvchilari bir vaqtni o`zida bir xil (berilganlar) tipdagi bittadan ko`p elementlarni saqlash va chaqirish uchun ishlatiladi.
Massivlar ikki tipda bo`ladi:
(i) Bir o`lchovli massiv77
(ii) Ko`p o`lchovli massiv (2 yoki undan ortiq).
Aniq chegara (o`lchovning), agar ixtiyoriy bo`lsa, siz ishlatadigan kompilyator tomonidan aniqlanadi.
Ushbu bob massivlar va satrlar diqqat markada bo`ladi.
2. Bir O`lchovli Massiv
Massivning eng sodda tipi bu bir o`lchovli massivlar.
2.1 Bir o`lchovli massivning aniqlanishi/initsialisatsiyasi
Boshqa o`zgaruvchilar kabi massivlar shunday oshkor aniqlangan bo`lishi kerakki kompilyator ular uchun xotiradan joy ajrata olsin. C++ da bir o`lchovli massivni aniqlanishi quyidagicha berilgan:
type arr-name[size];
Bu yerda type massivning asosiy tipini aniqlaydi, bu massivning har bir elementining tipidir.
arr-namemassivga murojaat qilinadigan massivning nominini aniqlaydi va sizemassive elementlar sonini aniqlaydi. Masalan,
int a[5]; //5 hajmga ega 'a' massiv aniqlandi
C++ da massivning indeksi har doim 0 dan boshlanadi. Shuning uchun a[2]a massivning uchinchi elementiga murojaat qiladi, bunda 2 bu massivning indeksi.
a dagi har bir element butun bo`lgani uchun u 2 baytni egallaydi. Birinchi element 0 indeksga egaligini eslatamiz. Shunday qilib, beshta element bo`lgani uchun oxirgisining nomeri 4. Massivni xotirada saqlash uchun kerak bo`ladigan xotira kattaligi uning tipi va hajmiga to`g`ridan-to`g`ri bog`liq. Bir o`lchovli massiv uchun umumiy hajm quyida ko`rsatilgandek hisoblanadi:
Total bytes = sizeof (base type) x size of array
Sizeof operator berilganlar tipining hajmini sistemada baytlarda qaytaradi.
Massiv birinchi marta aniqlanganida siz massivni initsializatsiya qilishingiz mumkin (ya’ni massivning har bir elementiga qiymat berib). Masalan?,
int a[5]= {55,90,17,88,36};
a initsalizatsiya qilinishidagi qiymatlar vergul bilan ajratilib qavslar ichiga olinadi. Ular massiv ifodasiga = belgisi bilan bog`langan.
Butun qiymatning hajmi 2 bayt deb olib, Rasm 9.1 da ko`rsailgan massiv xotirada Rasm 9.2 dagidek saqlanadi. (Faraz qilaylik, a ning boshlang`ich adresi 2000 bo`lsin).
Eslatamizki massivning tarkibi haqiqatda xotirada ikkilik shaklda saqlanadi. Yuqorida ko`rsatilgan massiv uchun kerak bo`ladigan umumiybaytlar 2 x 5 = 10baytlar.
Initsalizatsiyada biz massiv elementlarini ta’minlasak massiv hajmining spetsifikatsiyasi eng yaxshi bo`lmaydi. Massivga xotirada joy egallash uchun elementlar soninikompilyator avtomatik hisoblaydi.78
Shunday qilib biz quyidagicha yozishimiz mumkin
int a[ ] ={55,90,17,88,36); //Ragged array
Agar siz massivning oshkor hajmidan foydalansangiz lekin u massiv hajmiga teng bo`lmagan elementlar sonidan iborat bo`lsa, qolgan elementlar 0 deb o`rnatiladi. Agar elementlar soni massivning aniqlangan hajmidan katta bo`lsa xato haqida ekranga xabar chiqadi. Massivni initsializatsiya qilishga yana bir oz misollar qaraymiz:
float marks[ ] = {80.5,90.6,78.3,59.7,100.0,62.0);
long int salary[4] = {50000,18000,25000};
Oxirgi misolda salary[3]element 0 ga initsializatsiya qilinishini eslatamiz.
Do'stlaringiz bilan baham: |