Многомерные массивы

Многомерные массивы фиксированного размера задаются указанием каждого измерения в квадратных скобках, например, оператор

int Mas [6][8];

задает описание двумерного массива из 6 строк и 8 столбцов. В памяти такой массив располагается в последовательных ячейках построчно. Многомерные массивы размещаются так, что при переходе к следующему элементу быстрее всего изменяется последний индекс.

Все многомерные массивы в C++ имеют индексы, которые начинаются с нуля.

Другие варианты объявления многомерных массивов:

const int Nmax = 5, Mmax = 5;

int Mas1[Nmax][Mmax];

int Mas2[Nmax][Mmax] = { {0} }; // все элементы равны 0

int Mas3[Nmax][Mmax] = { {1, 2}, {3, 4}, {5, 6} };

// проинициализированы по 2 элемента в 3 строках, остальные элементы равны 0

int Mas4[Nmax+10][Mmax];

int Mas5[3][2] = {1, 1, 0, 2, 1, 0}; // число строк – 3, столбцов – 2

int Mas6[ ][2] = {1, 1, 0, 2, 1, 0}; // число строк – 3

Для многомерного массива может быть опущена только первая размерность.

Для доступа к элементу многомерного массива указываются все его индексы, например, Mas[i][j], где

В следующем примере приведены блоки ввода и вывода двумерного массива:

#include <stdio.h>

void main()

{

const int Nmax = 5, Mmax = 5; // максимальная размерность

int Mas[Nmax][Mmax];

int N, M; // реальное число строк и столбцов

printf("\n N = "); // ввод реальной размерности матрицы

scanf("%d", &N);

printf(" M = ");

scanf("%d", &M);

for (int i = 0; i < N; i++) // блок ввода матрицы

for (int j = 0; j < M; j++)

{

printf(" Mas[%d][%d] = ", i + 1, j + 1);

scanf("%d", &Mas[i][j]);

}

printf("\n\n Massiv\n");

for (int i = 0; i < N; i++) // блок вывода матрицы

{

for (int j = 0; j < M; j++)

printf("%5d", Mas[i][j]);

printf("\n");

}

}

Вид экрана во время выполнения программы:

N = 3

M = 2

Mas[1][1] = 1

Mas[1][2] = 2

Mas[2][1] = 3

Mas[2][2] = 4

Mas[3][1] = 5

Mas[3][2] = 6

Massiv

1 2

3 44

5 6

Задавая начальное, конечное значение и шаг для номера строки и столбца, можно перемещаться по матрице в любом направлении и обрабатывать любую ее часть.

Пример 1. Заполнить нулями выделенную часть матрицы, перемещаясь по строкам слева направо и сверху вниз.

for (int i = 0; i < N-1; i++) for (int j = i+1; j < N; j++) Mas[i][j] = 0;

Пример 2. Заполнить нулями выделенную часть матрицы, перемещаясь по строкам сверху вниз и справа налево.

for (int j = N-1; j >=0; j--) for (int i = 0; i <= j; i++) Mas[i][j] = 0;

Пример 3. Поменять местами верхнюю и нижнюю половины матрицы, перемещаясь по строкам слева направо и сверху вниз.

for (int i = 0; i < N / 2; i++) for (int j = 0; j < M; j++) { temp =Mas[i][j]; Mas[i][j] = Mas[N/2 + i][j]; Mas[N/2 + i][j] = temp; }
Исходная матрица 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 5 5 5 5 6 6 6 6 6 6 Матрица после перестановки 4 4 4 4 4 4 5 5 5 5 5 5 6 6 6 6 6 6 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: