Massiv tushunchasi
Massiv (“array”) – bu bir xil qiymat turidagi o’zgaruvchilarning umumiy nom va indeksi (elementning massivdagi tartibi) bo’yicha murojaat qilish mumkin bo’lgan to’plami.
Ya’ni, massiv bitta umumiy nom bilan nomlanadigan va mustaqil tartib raqamiga ega bo’lgan o’zgaruvchilar to’plami hisoblanadi. Arduinoda massivni e’lon qilish uchun, uning nomidan keyin kvadrat qavslar ko’rsatilishi kerak. Uni e’lon qilish tartibi quyidagicha:
<qiymat turi> <massiv nomi>[massiv o’lchami]; Masalan: byte raqam[256];
Kompilyatorga massiv o’lchamini (elementlar sonini) 3 xil usulda ko’rsatish mumkin. 1-usul: kvadrat qavsda elementlar soni aniq ko’rsatib qo’yiladi; 2-usul: kvadrat qavsda o’lchami ko’rsatilmaydi, lekin barcha elementlar figurali qavsda aniq ko’rsatib qo’yiladi; 3-usul (aralash usul): kvadrat qavsda o’lchami va figurali qavsda elementlari aniq ko’rsatiladi, bunda kvadrat qavsdagi raqam bilan figurali qavsdagi elementlar soni mos kelmasa, kvadrat qavsdagi raqam elementlar sonidan katta bo’lishi kerak.
Global e’lon qilingan massiv o’lchami aniq ko’rsatilishi shart (o’zgaruvchan o’lchamga ega bo’la olmaydi). Massiv qiymat turi va nomidan oldin const yoki #define operatorlari yordamida e’lon qilinishi kerak. Lokal (bir funksiya ichida) e’lon qilingan massiv o’lchami o’zgaruvchan (o’zgaruvchi bilan e’lon qilingan) bo’lishi ham mumkin.
Massiv e’lon qilinganidan keyin, uning elementlariga murojaat qilishda (qiymat o’zlashtirishda) ham kvadrat qavslardan foydalanish mumkin. Lekin elementning tartib raqami (indeksi) har doim 0 dan boshlab hisoblanadi!
Ba’zida massiv o’lchamini aniqlashda sizeof() funksiyasidan ham foydalaniladi. Biroq bu funksiya massiv elementlari sonini emas, uning elementlarining xotiradan egallaydigan joyini – “og’irligini” anglatadi. Masalan, bool, byte va char qiymat turlaridagi elementlar har biri 1 baytdan joy egallasa, int, float va boshqa qiymat turlari uchun 2 bayt va undan ko’proq joy talab qilinadi. Bunday vaziyatlarda, massiv elementlari sonini aniqlash uchun uning og’irligini 0-indeksli element og’irligiga bo’lish yetarli: sizeof(sonlar) / sizeof(sonlar[0]).
Massivlar bir o’lchovli yoki ko’p o’lchovli bo’lishi mumkin. Ko’p o’lchovli massiv – ikki va undan ortiq o’lchovga bo’lgan massiv turi. Bunda, massiv elementiga murojaat qilish uchun, massivning har bir o’lchovi uchun o’zining indeksi ko’rsatiladi. Ko’p o’lchovli massivni e’lon qilish paytida kamida oxirgi 2 ta o’lchovning o’lchamlari (elementlari soni) aniq ko’rsatilishi kerak: sonlar[][2] yoki koordinata[][2][-4] kabi.
Biz ko’p o’lchovli massivlardan 2 o’lchovli massivni ko’rib chiqamiz. 2 o’lchovli massiv elementlarini matritsa yoki jadval ko’rinishida e’lon qilish mumkin. Bunda, dastlab qatorlar, so’ng ustunlar ko’rsatiladi.
2 o’lchovli massivni e’lon qilish tartibi quyidagicha bo’ladi: <qiymat turi> <massiv nomi>[qator][ustun];
Masalan: int sonlar[][4] = {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11},
};
Xuddi shu massivni 1 ta qatorda ham ifodalash mumkin: int sonlar[][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}};
Ya’ni, massiv elementiga murojaat qilish uchun dastlab uning qatori indeksini, keyin ustuni indeksini ko’rsatish zarur.
Massiv elementlari bilan xuddi oddiy o’zgaruvchilar bilan ishlagandek amallarni bajarish mumkiin.
Massiv bilan ishlashda quyidagi maxsus funksiyalardan keng foydalaniladi:
memset(sonlar, son, uzunlik) – “sonlar” nomli, “uzunlik” o’lchovli massivni ko’rsatilgan son bilan to’ldirish.
memcmp(sonlar1, sonlar2, uzunlik) – “sonlar1” va “sonlar2” nomli massivlarni o’lchamini “uzunlik” o’lchamigacha solishtirish. Agar elementlar bir xil bo’lsa, 0 qiymati ko’rsatiladi.
memcpy(sonlar2, sonlar1, uzunlik) – “sonlar1” massivi elementlarini “uzunlik” o’lchovigacha “sonlar2” massiviga nusxalash.
Misollar: