19.04.2026

Massivlar [18+]

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:

Massiv bilan ishlashga oid misollar

int sonlar1[10];int turiga mansub, 10 ta elementga (o’lchamga) ega bo’lgan massivni e’lon qilish. Elementlar oldindan ko’rsatib qo’yilmaydigan, 1-usul;

byte sonlar2[] = {2, 3, 4, 5, };byte turiga mansub, elementlari oldindan ko’rsatib, e’lon qilingan massiv (2-usul). Bunda, oxirgi “,” (vergul) belgisidan keyingi element ko’rsatilmaganligi uchun, massiv o’lchami 4 ga teng deb qabul qilinadi;

float sonlar3[4] = {0.8, -1.5, 3.0};float turiga mansub, o’lchami va elementlari oldindan ko’rsatib, e’lon qilingan massiv (3-usul). Bunda, 4-element ko’rsatilmaganligi sababli, uning qiymati “0.0” (nol) deb qabul qilinadi;

char matn[20] = {‘y’, ‘a’, ‘r’, ‘a’, ‘t’, ‘.’, ‘u’, ‘z’, ‘-‘, ‘2’, ‘0’, ‘2’, ‘4’}; – char turiga mansub, o’lchami va elementlari oldindan ko’rsatib, e’lon qilingan massiv (3-usul). Bunda, 14-20-elementlari ko’rsatilmaganligi sababli, uning qiymati ” (bo’shliq) deb qabul qilinadi;

#define char matn[20] – char turiga mansub, o’lchami va elementlari oldindan ko’rsatib, global e’lon qilingan massiv;

byte len = 4; // massiv o’lchamini o’zgaruvchiga o’zlashtirish
int sonlar[len];
// massiv o’lchamini o’zgaruvchi yordamida ko’rsatish

int sonlar[0] = 5; // massivning 0-indeksli elementiga qiymat o’zlashtirilmoqda

int sonlar[1] = sonlar2[2]; // massivning 1-indeksli elementiga boshqa massivning 2-indeksli elementi qiymati o’zlashtirilmoqda

int element = sonlar[1][2]; // 2 o’lchovli massivning 2-qator (1 indeksli) 3-ustunidagi (2 indekli) qiymatini element o’zgaruvchisiga o’zlashtirish;

int sonlar[1][2] = -4; // 2 o’lchovli massivning 2-qator 3-ustuniga -4 qiymatini o’zlashtirish;

byte sonlar1[5] = {1, 2, 3, 4, 5};
byte sonlar2[5];
// bo’sh massivni e’lon qilish
memset(sonlar2, 123, 5); // sonlar2 massivini 123 qiymatli elementlar bilan to’ldirish; (natija: sonlar2 = {123, 123, 123, 123, 123})
Serial.println(memcmp(sonlar1, sonlar2, 5) == 0); // sonlar1 va sonlar2 massivi elementlari bir xilligini taqqoslash va natijani port monitoriga chiqarish (natija: false, chunki qiymatlari bir xil emas).
memcpy(sonlar2, sonlar1, 5); // sonlar1 massivi barcha elementlarini sonlar2 massiviga nusxalash (natija:
sonlar2 = {1, 2, 3, 4, 5})
Serial.println(memcmp(sonlar1, sonlar2, 5) == 0); // sonlar1 va sonlar2 massivi elementlari bir xilligini taqqoslash va natijani port monitoriga chiqarish
(natija: true, chunki qiymatlari bir xil).

 

Добавить комментарий