По теме лабораторной работы

По аналогичному принципу располагаются в памяти и массивы большей размерности. Предположим, b – трехмерный массив, имеющий размеры L×M×N.Тогда номер k элемента трехмерного массива b[l][i][j] в последовательности может быть вычислен по формуле

k= (l*M+i)*N+j или k= l*M*N+i*N+j.

Основная форма описания массива размерности R такова:

тип имя_массива [размер1][ размер2] …[размерR]; где размер1, размер2, размерR – количество значений соответствующего индекса массива.

 

Пример:Первая величина (4) задает количество строк, вторая (3) – количество столбцов. Объект ia определен как массив из четырех строк по три элемента в каждой. Многомерные массивы тоже могут быть инициализированы:

int ia[ 4 ][ 3 ] = {

{ 0, 1, 2 },

{ 3, 4, 5 },

{ 6, 7, 8 },

{ 9, 10, 11 }

};

Внутренние фигурные скобки, разбивающие список значений на строки, необязательны и используются, как правило, для удобства чтения кода. Приведенная ниже инициализация в точности соответствует предыдущему примеру, хотя менее понятна:

int ia[4][3] = { 0,1,2,3,4,5,6,7,8,9,10,11 };

Следующее определение инициализирует только первые элементы каждой строки. Оставшиеся элементы будут равны нулю:

int ia[ 4 ][ 3 ] = { {0}, {3}, {6}, {9} };

Если же опустить внутренние фигурные скобки, результат окажется совершенно иным. Все три элемента первой строки и первый элемент второй получат указанное значение, а остальные будут неявно инициализированы 0.

int ia[ 4 ][ 3 ] = { 0, 3, 6, 9 };

При обращении к элементам многомерного массива необходимо использовать индексы для каждого измерения (они заключаются в квадратные скобки). Так выглядит инициализация двумерного массива с помощью вложенных циклов:

int main()

{

const int rowSize = 4;

const int colSize = 3;

int ia[ rowSize ][ colSize ];

for ( int i = 0; i < rowSize; ++i ) for ( int j = 0; j < colSize; ++j ) ia[ i ][ j ] = i + j j;}

Конструкция

ia[ 1, 2 ]

является допустимой с точки зрения синтаксиса С++, однако означает совсем не то, чего ждет неопытный программист. Это отнюдь не объявление двумерного массива 1 на 2. Агрегат в квадратных скобках – это список выражений через запятую, результатом которого будет последнее значение 2 (см. оператор “запятая” в разделе 4.2). Поэтому объявление ia[1,2] эквивалентно ia[2]. Это еще одна возможность допустить ошибку

Задания для лабораторной работы:

1.Прямоугольное поле m×n разбито на mn квадратных клеток. Некоторые клетки покрашены в чёрный цвет. Известно, что все чёрные клетки могут быть разбиты на несколько непересекающихся и не имеющих общих вершин чёрных прямоугольников. Считая, что цвета клеток даны в виде массива типа array[1..m] of array [ 1..n] of boolean;

подсчитать число чёрных прямоугольников, о которых шла речь. Число действий должно быть порядка mn.

2. В матрице найти номер строки, сумма чисел в которой максимальна. Записаны числа N и M - количество строк и столбцов матрицы (каждое из них - из диапазона от 1 до 100), а затем сама матрица. Элементы матрицы - числа из диапазона integer.

Вывести номер строки,сумма чисел в которой максимальна. Если таких строк несколько,вывести последнюю из них.

3. Дана квадратная матрица. Проверить, является ли она симметричной относительно

главной диагонали.. Записано число n (0<n<=100).

В следующих n строках записано по n целых чисел от -32768 до 32767.вывести YES,

если матрица симметрична относительно главной диагонали, иначе вывести NO.

4. Даны две квадратных таблицы чисел. Требуется построить третью,каждый элемент которой равен сумме элементов, стоящих на том же местев 1-й и 2-й таблицах.Записано сначала число N, затем записана первая таблица,а после нее - вторая. Элементы таблиц - числа от 0 до 100.1<=N<=100.

5. Ввести число n и заполнить двумерный массив размером n * n числами 1, 2, ... по спирали (рис.).

6. Элементами массива a[1..n] являются неубывающие массивы [1..m] целых чисел:a: array [1..n] of array [1..m] of integer; a[1][1]≤...≤a[1][m], ..., a[n][1]≤...≤a[n][m].Известно, что существует число, входящее во все массивы a[i] (существует такое x, что для всякого i из 1..n найдётся j из 1..m, для которого a[i][j] = x). Найти одно из таких чисел х.

 

Контрольные вопросы:

1. Как организуются многомерные числовые массивы в языке С++?

2. Как организуется индексирование числовых массивов в языке С++?

3. На кого или на что возлагается контроль границ числовых массивов в языке программирования С?

4. В какой очередности и как происходит заполнение многомерных числовых массивов в программах на языке С?

5. Для чего применяется начальная инициализация числовых массивов при дальнейшем их использовании?