Многомерные массивы
Размерностью массива называется количество его индексов. Например, массив размерностью два – двумерный массив – соответствует математическому понятию прямоугольной матрицы.
При описании многомерного массива размерность задается квадратными скобками, в которых указывается количество допустимых значений каждого индекса.
Примеры описания многомерных массивов.
int mas[3][4];
//описание целочисленного двумерного массива
//из 3-х строк и 4-х столбцов
const int N = 5;
double A[2*N][2*N];
//описание двумерного вещественного массива
//A размером 10×10 элементов
int B[2][4][2];
//описание трехмерного целочисленного
//массива B
Стандарт языка С++ не накладывает ограничения на размерность массива, но каждый компилятор задает максимальное количество индексов массива. На практике обычно используются массивы размерностью не более трех.
Для доступа к элементу многомерного массива после имени в квадратных скобках указываются все его индексы. Например, mas[i][j] или A[0][0]. Для инициализации многомерного массива каждый элемент-массив заключается в свои фигурные скобки, либо задается общий список элементов в том порядке, в котором элементы располагаются в памяти.
Например,
int mas[3][4] = { {0, -1, 2, -7}, {9, 7, 5, 8}, {3, 0, 1, -6} };
или
int mas[3][4] = {0, -1, 2, -7, 9, 7, 5, 8, 3, 0, 1, -6};
Элементы многомерного массива размещаются в оперативной памяти в последовательных ячейках построчно. Поэтому многомерные массивы быстрее просматриваются по строкам, а не по столбцам. Для просмотра используются вложенные циклы. Быстрый просмотр массива будет обеспечен, если первый индекс будет изменяться во внешнем цикле, а последний индекс – во внутреннем цикле. Рассмотрим работу с двумерными массивами на следующих примерах.
Пример 1. Ввод и вывод элементов двумерного массива
const int kolStr = 3, kolStb = 4;
int i, j, mas[kolStr][kolStb] = {0};
//ввод элементов массива
for (i = 0; i < kolStr; i++)
{
for (j = 0; j < kolStb; j++)
{
cout << "mas[" << i << "][" << j << "] = ";
cin >> mas[i][j];
}
cout << "----------\n";
}
//вывод элементов массива
for (i = 0; i < kolStr; i++)
{
for (j = 0; j < kolStb; j++)
cout << mas[i][j] << '\t';
cout << '\n';
}
Пример 2. Вычисление суммы всех элементов матрицы
sum = 0;
for (i = 0; i < kolStr; i++)
for (j = 0; j < kolStb; j++)
sum += mas[i][j];
Пример 3. Поиск максимального элемента матрицы
max = mas[0][0];
for (i = 0; i < kolStr; i++)
for (j = 0; j < kolStb; j++)
if (mas[i][j] > max)
max = mas[i][j];
Пример 4. Дан двумерный массив mas. Составить вектор b такой, что а) bi – максимальный элемент i-й строки
for (i = 0; i < kolStr; i++)
{
max = mas[i][0];
for (j = 0; j < kolStb; j++)
if (mas[i][j] > max)
max = mas[i][j];
b[i] = max;
}
б) bi – среднее арифметическое отрицательных элементов текущей строки
double s;
int k;
for (i = 0; i < kolStr; i++)
{
k = 0; s = 0;
for (j = 0; j < kolStb; j++)
if (mas[i][j] < 0)
{
s +=mas[i][j];
k++;
}
b[i] = s/k;
}
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ.
Ознакомится с теоретической частью лабораторной работы.
Выполнить задание по работе с одномерными массивами в соответствии с вариантом.
Выполнить задание по работе с многомерными массивами в соответствии с вариантом.
Сделать выводы о полученных результатах работы программ.
СОДЕРЖАНИЕ ОТЧЕТА
Титульный лист с названием лабораторной работы, номером своего варианта, фамилией студента(ов) и группы.
На первом после титульного листа указать :
- Название работы.
- Цель.
- Задание по варианту.
Текст программы.
Результаты работы программы.
Выводы о полученных результатах работы программы.
КОНТРОЛЬНЫЕ ВОПРОСЫ
Что такое массив данных?
Какие виды массивов вы знаете?
Как массивы представляются в оперативной памяти?
Способы инициализации одномерного массива.
Способы инициализации многомерного массива.
Какие методы сортировки массивов вы знаете?
Какие способы поиска элементов в массиве вы знаете.
СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ
Липпман С. Б. Основы программирования на C++: Пер. с англ. — М.:Вильямс, 2002. — 256 с.
Липпман С. Б., Лажойе Ж. Язык программирования С++. Вводный курс: Пер. с англ. — 3-е изд. — М.: ДМК, 2001. — 1104 с.
Страуструп Б. Язык программирования C++: Пер. с англ. — 3-е спец. изд. — М.: Бином, 2003. — 1104 с.
Страуструп Б. Дизайн и эволюция языка C++. Объектно-ориентированный язык программирования: Пер. с англ. — М.: ДМК пресс, Питер, 2006. — 448 с.
Эккель Б. Философия C++. Введение в стандартный C++: Пер. с англ. — 2-е изд. — СПб.: Питер, 2004. — 572 с.
Эккель Б., Эллисон Ч. Философия C++. Практическое программирование: Пер. с англ. — СПб.: Питер, 2004. — 608 с.
Приложение