
- •Лабораторная работа №5 массивы и строки
- •2. Домашнее задание и методические указания по его выполнению
- •2.1. Одномерные массивы
- •2.2. Строки
- •2.3. Двухмерные массивы
- •2.4. Массивы строк
- •2.5. Многомерные массивы
- •2.6. Инициализация массивов
- •2.7. Массивы переменной длины
- •2.8. Пример
- •3. Лабораторное задание и методические указания по его выполнению
- •4. Варианты заданий
- •Лабораторная работа №6 организация циклов
- •2. Домашнее задание и методические указания по его выполнению
- •2.1. Организация цикла
- •2.1.1 Оператор цикла с предусловием while
- •2.1.2 Оператор цикла с постусловием do-while
- •2.1.3 Оператор цикла с параметром for
- •2.2. Пример
- •2.3. Контрольный пример
- •3. Лабораторное задание и методические указания по его выполнению
- •4. Контрольные вопросы
- •5. Задание
- •Лабораторная работа №7 функции
- •2. Домашнее задание и методические указания по его выполнению
- •2.1 Понятие функции
- •2.2. Общий вид функции
- •2.3. Аргументы функций
- •2.4. Виды функций
- •2.5. Прототипы функций
- •3. Лабораторное задание и методические указания по его выполнению
- •4. Варианты заданий
- •Лабораторная работа №8 объекты
- •2. Домашнее задание и методические указания по его выполнению
- •2.2. Члены класса. Инициализация членов класса
- •2.3. Конструкторы и деструкторы
- •3. Лабораторное задание и методические указания по его выполнению
- •4. Варианты заданий
- •Библиографический список
2.3. Двухмерные массивы
Стандартом С++ определены многомерные массивы. Простейшая форма многомерного массива — двухмерный массив. Двухмерный массив — это массив одномерных массивов. Объявление двухмерного массива d с размерами 10 на 20 выглядит следующим образом:
int d[10][20];
Во многих языках измерения массива отделяются друг от друга запятой. В языке С++ каждое измерение заключено в свои квадратные скобки.
Аналогично обращению к элементу одномерного массива, обращение к элементу с индексами 1 и 2 двухмерного массива d выглядит так:
d[1][2]
Двухмерные массивы размещаются в матрице, состоящей из строк и столбцов. Первый индекс указывает номер строки, а второй — номер столбца. Это значит, что когда к элементам массива обращаются в том порядке, в котором они размещены в памяти, правый индекс изменяется быстрее, чем левый.
2.4. Массивы строк
В программах на языке С часто используются массивы строк. Например, сервер базы данных сверяет команды пользователей с массивом допустимых команд. В качестве массива строк в языке С служит двухмерный символьный массив. Размер левого измерения определяет количество строк, а правого — максимальную длину каждой строки. Например, в следующем операторе объявлен массив из 30 строк с максимальной длиной 79 символов:
char str_array[30][80];
Чтобы обратиться к отдельной строке массива, нужно указать только левый индекс. Например, вызов функции gets() с третьей строкой массива str_array в качестве аргумента можно записать так:
gets(str_array[2]);
Этот оператор эквивалентен следующему:
gets(&str_array[2][0]);
Из этих двух форм записи предпочтительной является первая.
2.5. Многомерные массивы
В языке С++ можно пользоваться массивами, размерность которых больше двух. Общая форма объявления многомерного массива следующая:
тип имя_массива [Размер1][Размер2]...[РазмерN];
Массивы, у которых число измерений больше трех, используются довольно редко, потому что они занимают большой объем памяти. Например, четырехмерный массив символов размерностью 10x6x9x4 занимает 2160 байтов. Если бы массив содержал 2-байтовые целые, потребовалось бы 4320 байтов. Если бы элементы массива имели тип double, причем каждый элемент (вещественное число двойной точности) занимал бы 8 байтов, то для хранения массива потребовалось бы 17280 байтов. Объем требуемой памяти с ростом числа измерений растет экспоненциально. Например, если к предыдущему массиву добавить пятое измерение, причем его толщину по этому измерению сделать равной всего 10, то его объем возрастет до 172800 байтов.
При обращении к многомерным массивам компьютер много времени затрачивает на вычисление адреса, так как при этом приходится учитывать значение каждого индекса. Поэтому доступ к элементам многомерного массива происходит значительно медленнее, чем к элементам одномерного.
Передавая многомерный массив в функцию, в объявлении параметров функции необходимо указать все размеры измерений, кроме самого левого. Например, если массив m объявлен как
int m[4] [3] [6] [5];
то функция, принимающая этот массив, должна быть объявлена примерно так:
void func1(int d[][3][6][5])
{
/* ... */
}
Конечно, можно включить в объявление и размер 1-го измерения, но это излишне.