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
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
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
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
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
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" chiqaradiKo'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
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
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
// "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";