Двумерные массивы: задачи поиска, замены и суммирования элементов двумерного массива
Цель лекции: изучить понятия, особенности внутреннего представления способы генерации и вывода многомерных массивов, научиться выполнять объявление, инициализацию, генерацию и вывод двумерных массивов, использование алгоритмов поиска, замены и суммирования в двумерных массивах при решении задач на языке C++.
Двумерные массивы, являющиеся упорядоченными однотипными объектами, можно отождествлять с прямоугольной матрицей.
Двумерные массивы состоят из строк и столбцов.
Объявление двумерных массивов
Синтаксис определения массива без дополнительных спецификаторов и модификаторов имеет два формата:
Тип ИмяМассива[ВыражениеТипаКонстанты][ВыражениеТипаКонстанты];
или
Тип ИмяМассива[][];
ИмяМассива – идентификатор массива.
Тип – тип элементов объявляемого массива. Элементами массива не могут быть функции, файлы и элементы типа void.
ВыражениеТипаКонстанты – задает количество элементов (размерность) массива. Выражение константного типа вычисляется на этапе компиляции. Данное константное выражение может быть опущено в случаях если:
- при объявлении массив инициализируется;
- массив объявлен как формальный параметр функции;
- массив объявлен как ссылка на массив, явно определенный в другом файле.
Например:
- int a[100][50];//массив из 100x50 элементов целого типа
- double d[4][10];// массив из 4x10 элементов типа double
-
int t=5, k=8; float wer[2*t+k][2*t+k]; //массив из (2*t+k)x(2*t+k) элементов вещественного типа
-
равносильно объявлению
int sample[853][157]; //массив из 853 строк и 157 столбцов, элементы типа int
равносильно объявлениюconst int N_max=853, int M_max=157; int sample[N_max][M_max];
#define N_max 853 #define M_max 157 ... int sample[N_max][M_max];
Двумерные массивы располагаются в памяти в порядке быстрого изменения последнего индекса. Так, например, данные двумерного массива (состоящего из 3 строк и 10 столбцов и определенного как float A[3][10]; ), располагаются следующим образом:
Строки | Столбцы | |
---|---|---|
1 | 2...9 | |
1 | A[0][0] | A[0][1] ... A[0][9] |
2 | A[1][0] | A[1][1] ... A[1][9] |
3 | A[2][0] | A[2][1] ... A[2][9] |
Инициализация двумерных массивов
Двумерные массивы инициализируются так же, как и одномерные.
Например:
int w[3][3]={ //инициализируется целочисленный массив размерностью 3x3 {2, 3, 4}, //1-я строка {3, 4, 8}, //2-я строка {1, 0, 9} //3-я строка }; float w[2][3]={ //инициализируется вещественный массив размерностью 2x3 {2.1, 3.4, 4.5}, //1-я строка {5.0, 6.4, 3.9} //2-я строка };
равносильно инициализации
float w[][3]={ {2.1, 3.4, 4.5}, //1-я строка {5.0, 6.4, 3.9} //2-я строка };
Последовательности, выделенные в фигурные скобки, соответствуют строкам массива, в случае отсутствия скобок инициализация будет выполнена неправильно.
int w[3][5]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
int w[3][5]={{1, 2, 3}, {4, 5, 6, 7, 8}, {9, 10, 11}};
Обращение к элементам двумерного массива
Обращение к элементам двумерного массива осуществляется так же, как и к элементам одномерного.
ИмяМассива[ВыражениеТипаКонстанты][ВыражениеТипаКонстанты];
или
ИмяМассива[ЗначениеИндекса][ЗначениеИндекса];
Например:
a[0][0] – индекс задается как константа,
d[55][5] – индекс задается как константа,