Skip to content

Ko'p o'lchamli massivlar (Multi-Dimensional Arrays)

Ko'p o'lchamli massiv — bu massivlarning massividir.

Ko'p o'lchamli massiv e'lon qilish uchun o'zgaruvchi turini ko'rsating, massiv nomini yozing, undan keyin asosiy massivda qancha element borligini bildiruvchi kvadrat qavslarni, so'ngra pastki massivlarda qancha element borligini ko'rsatuvchi yana bir juft qavslarni qo'ying:

MISOL

cpp
string letters[2][4];

Oddiy massivlar kabi, qiymatlarni massiv literali orqali kiritish mumkin. Ko'p o'lchamli massivda massiv literalining har bir elementi yana bir massiv literalidir:

MISOL

cpp
string letters[2][4] = {
  { "A", "B", "C", "D" },
  { "E", "F", "G", "H" }
};

Har bir kvadrat qavs juftligi massivga yana bitta o'lcham (dimension) qo'shadi. Yuqoridagi massiv ikki o'lchamlidir.

Massivlar istalgan sondagi o'lchamlarga ega bo'lishi mumkin. Quyidagi massiv uch o'lchamlidir:

MISOL

cpp
string letters[2][2][2] = {
  {
    { "A", "B" },
    { "C", "D" }
  },
  {
    { "E", "F" },
    { "G", "H" }
  }
};

Ko'p o'lchamli massiv elementlariga murojaat qilish

Ko'p o'lchamli massivdagi elementga murojaat qilish uchun har bir o'lcham uchun indeks raqamini ko'rsating.

Quyidagi operator letters massivining birinchi qatori (0) va uchinchi ustuni (2) dagi element qiymatiga murojaat qiladi:

MISOL

cpp
string letters[2][4] = {
  { "A", "B", "C", "D" },
  { "E", "F", "G", "H" }
};

cout << letters[0][2];  // Natija: "C"

ESLATMA

Massiv indekslari 0 dan boshlanadi: [0] — birinchi element, [1] — ikkinchi element va hokazo.


Ko'p o'lchamli massiv elementlarini o'zgartirish

Elementning qiymatini o'zgartirish uchun har bir o'lchamdagi indeks raqamiga murojaat qiling:

MISOL

cpp
string letters[2][4] = {
  { "A", "B", "C", "D" },
  { "E", "F", "G", "H" }
};
letters[0][0] = "Z";

cout << letters[0][0];  // Endi "A" o'rniga "Z" chiqaradi

Ko'p o'lchamli massivni aylanib chiqish

Ko'p o'lchamli massivni aylanish uchun har bir o'lcham uchun alohida tsikl kerak bo'ladi.

Ikki o'lchamli massivni aylanish:

MISOL

cpp
string letters[2][4] = {
  { "A", "B", "C", "D" },
  { "E", "F", "G", "H" }
};

for (int i = 0; i < 2; i++) {
  for (int j = 0; j < 4; j++) {
    cout << letters[i][j] << "\n";
  }
}

Uch o'lchamli massivni aylanish:

MISOL

cpp
string letters[2][2][2] = {
  {
    { "A", "B" },
    { "C", "D" }
  },
  {
    { "E", "F" },
    { "G", "H" }
  }
};

for (int i = 0; i < 2; i++) {
  for (int j = 0; j < 2; j++) {
    for (int k = 0; k < 2; k++) {
      cout << letters[i][j][k] << "\n";
    }
  }
}

Nima uchun ko'p o'lchamli massivlar kerak?

Ko'p o'lchamli massivlar jadvallarni ifodalashda juda qulay. Quyidagi misolda "Dengiz jangi" (Battleship) o'yinining oddiy versiyasini ko'rib chiqamiz:

MISOL

cpp
// "1" — kema bor joyini bildiradi
bool ships[4][4] = {
  { 0, 1, 1, 0 },
  { 0, 0, 0, 0 },
  { 0, 0, 1, 0 },
  { 0, 0, 1, 0 }
};

int hits = 0;
int numberOfTurns = 0;

// O'yinchi barcha 4 ta kemani urguncha davom etadi
while (hits < 4) {
  int row, column;

  cout << "Koordinatalarni tanlash\n";

  cout << "0 dan 3 gacha qator raqamini tanlang: ";
  cin >> row;

  cout << "0 dan 3 gacha ustun raqamini tanlang: ";
  cin >> column;

  // Berilgan koordinatada kema bor-yo'qligini tekshirish
  if (ships[row][column]) {
    ships[row][column] = 0;
    hits++;
    cout << "Tegdi! " << (4-hits) << " ta qoldi.\n\n";
  } else {
    cout << "O'tmadi\n\n";
  }

  numberOfTurns++;
}

cout << "G'alaba!\n";
cout << "Siz " << numberOfTurns << " urinishda yutdingiz";