Слайд 2Цели и задачи лекции
Цель леции – изучить использование массивов в языке программирования
![Цели и задачи лекции Цель леции – изучить использование массивов в языке программирования С++](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-1.jpg)
С++
Слайд 3Теоретическая часть
В языке программирования С заложены средства для задания последовательностей упорядоченных данных.
![Теоретическая часть В языке программирования С заложены средства для задания последовательностей упорядоченных](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-2.jpg)
Такие последовательности называются массивами. В массивах должны быть упорядочены данные одного и того же типа. В данной лабораторной работе будут рассматриваться массивы с целыми и вещественными типами данных, т.е. типы int, float или double.
Слайд 4Теоретическая часть
Массивы данных могут быть одномерными (векторами размера 1 х n или
![Теоретическая часть Массивы данных могут быть одномерными (векторами размера 1 х n](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-3.jpg)
n х 1), двухмерными (матрицами размера n х m) или многомерными (размера n х m х p...). В частности, для векторов и матриц в приведенной записи первый индекс означает количество строк, а второй (число или буква) – это количество столбцов.
Слайд 5Теоретическая часть
Для названия массива может быть использована переменная, состоящая из букв (буквы),
![Теоретическая часть Для названия массива может быть использована переменная, состоящая из букв](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-4.jpg)
букв с цифрами, букв с цифрами и знаком подчеркивания и т.д. в соответствии с правилами объявления переменных, принятых в языке С++. Если размерность массива меньше, чем требуется, то компилятор не выдаст сообщения об ошибке. Выход за границы массивов должен следить только сам программист.
Слайд 6Одномерные массивы
Одномерный массив – это список связанных однотипных переменных.
Общая форма записи одномерного
![Одномерные массивы Одномерный массив – это список связанных однотипных переменных. Общая форма](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-5.jpg)
массива:
тип имя_массива[размер];
В приведенной записи элемент тип объявляет базовый тип массива. Количество элементов, которые будут храниться в массиве с именем имя_массива, определяется элементом размер.
Слайд 7Одномерные массивы
В языке С++ индексация массива начинается с нуля. Например, если размер
![Одномерные массивы В языке С++ индексация массива начинается с нуля. Например, если](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-6.jpg)
массива определен величиной 9, то в массиве можно хранить 10 элементов с индексацией 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
Доступ к отдельному элементу массива осуществляется с помощью индекса. Индекс описывает позицию элемента внутри массива.
Слайд 8Одномерные массивы
Все массивы занимают смежные ячейки памяти, т.е. элементы массива в памяти
![Одномерные массивы Все массивы занимают смежные ячейки памяти, т.е. элементы массива в](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-7.jpg)
расположены последовательно друг за другом. Ячейка памяти с наименьшим адресом относится к первому элементу массива, а с наибольшим – к последнему.
Слайд 9Одномерные массивы
Для одномерных массивов общий размер массива в байтах вычисляется по формуле:
всего
![Одномерные массивы Для одномерных массивов общий размер массива в байтах вычисляется по](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-8.jpg)
байт = размер типа в байтах * количество элементов
В языке С++ нельзя присвоить один массив другому. Для передачи элементов одного массива другому необходимо выполнить присвоение поэлементно.
Слайд 10Двухмерные массивы, матрицы
Двухмерный массив представляет собой список одномерных массивов.
Общая форма записи двухмерного
![Двухмерные массивы, матрицы Двухмерный массив представляет собой список одномерных массивов. Общая форма](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-9.jpg)
массива:
тип имя_массива[размер1] [размер2];
В приведенной записи размер1 означает количество строк двухмерного массива, а размер2 – количество столбцов.
Слайд 11Двухмерные массивы, матрицы
В двухмерном массиве позиция любого элемента определяется двумя индексами. Индексы
![Двухмерные массивы, матрицы В двухмерном массиве позиция любого элемента определяется двумя индексами.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-10.jpg)
каждого из размеров массива начинаются с 0 (с нуля).
Место хранения для всех элементов массива определяется во время компиляции. Память, выделенная для хранения массива, используется в течение всего времени существования массива.
Слайд 12Двухмерные массивы, матрицы
Для двухмерных массивов общий размер массива в байтах вычисляется по
![Двухмерные массивы, матрицы Для двухмерных массивов общий размер массива в байтах вычисляется](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-11.jpg)
формуле:
всего байт = число строк * число столбцов * размер типа в байтах
Слайд 13Многомерные массивы
Общая форма записи многомерного массива:
тип имя_массива[размер1] [размер2]... [размерN];
Индексация каждого размера начинается
![Многомерные массивы Общая форма записи многомерного массива: тип имя_массива[размер1] [размер2]... [размерN]; Индексация](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-12.jpg)
с нуля. Элементы многомерного массива располагаются в памяти в порядке возрастания самого правого индекса. Поэтому правый индекс будет изменяться быстрее, чем левый (левые).
Слайд 14Многомерные массивы
При обращении к многомерным массивам компьютер много времени затрачивает на вычисление
![Многомерные массивы При обращении к многомерным массивам компьютер много времени затрачивает на](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-13.jpg)
адреса, так как при этом приходится учитывать значение каждого индекса. Следовательно, доступ к элементам многомерного массива происходит значительно медленнее, чем к элементам одномерного. В этой связи использование многомерных массивов встречается значительно реже, чем одномерных или двухмерных массивов.
Слайд 15Многомерные массивы
Для многомерных массивов общий размер многомерного массива в байтах вычисляется по
![Многомерные массивы Для многомерных массивов общий размер многомерного массива в байтах вычисляется](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-14.jpg)
формуле:
всего байт = размер1* размер2*...* размерN *размер типа в байтах
Очевидно, многомерные массивы способны занять большой объем памяти, а программа, которая их использует, может очень быстро столкнуться с проблемой нехватки памяти.
Слайд 16Многомерные массивы
Для определения размера типа в байтах применяется функция sizeof(), которая возвращает
![Многомерные массивы Для определения размера типа в байтах применяется функция sizeof(), которая](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-15.jpg)
целое число. Например, sizeof(float).
Слайд 17Инициализация массивов
Инициализация массивов
В языке С массивы при объявлении можно инициализировать.
Общая форма инициализации
![Инициализация массивов Инициализация массивов В языке С массивы при объявлении можно инициализировать.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-16.jpg)
массива:
тип имя_массива[размер1] * [размерN] = {список_значений};
Слайд 18Инициализация массивов
В список_значений входят константы, разделенных запятыми. Типы констант должны быть совместимыми
![Инициализация массивов В список_значений входят константы, разделенных запятыми. Типы констант должны быть](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-17.jpg)
с типом массива.
Пример инициализации одномерного массива:
int A[5] = {1, 2, 3, 4, 5};
При этом A[0] = 1, A[1] = 2 и т.д.
Слайд 19Инициализация массивов
При инициализации многомерного массива для улучшения наглядности элементы инициализации каждого измерения
![Инициализация массивов При инициализации многомерного массива для улучшения наглядности элементы инициализации каждого](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-18.jpg)
можно заключать в фигурные скобки.
Слайд 20Инициализация массивов
Пример инициализации двухмерного массива:
int MN[3][4] = {
{1, 2, 3, 4},
{5, 6,
![Инициализация массивов Пример инициализации двухмерного массива: int MN[3][4] = { {1, 2,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-19.jpg)
7, 8},
{9, 10, 11, 12}
};
Слайд 21Инициализация массивов
Массив MN[3][4] – это матрица, у которой 3 строки и 4
![Инициализация массивов Массив MN[3][4] – это матрица, у которой 3 строки и](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-20.jpg)
столбца.
Для многомерных массивов инициализацию можно также проводить с указанием номера инициализируемого элемента.
Слайд 22Инициализация массивов
Пример инициализации трехмерного массива:
int XYZ[2][3][4] = {
{ {1, 2, 3, 4},
![Инициализация массивов Пример инициализации трехмерного массива: int XYZ[2][3][4] = { { {1,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-21.jpg)
{5, 6, 7, 8}, {9, 10, 11, 12} },
{ {13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24} }
};
Слайд 23Инициализация массивов
Как видно, массив XYZ содержит два блока, каждый из которых есть
![Инициализация массивов Как видно, массив XYZ содержит два блока, каждый из которых](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-22.jpg)
матрица размера 3 х 4, т.е. 3 строки и 4 столбца.
В языке С возможна инициализация безразмерных массивов. Например, для одномерного массива:
int A[ ] = {1, 2, 3, 4, 5};
Слайд 24Инициализация массивов
В многомерном массиве размер самого левого измерения также можно не указывать.
![Инициализация массивов В многомерном массиве размер самого левого измерения также можно не](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-23.jpg)
В частности, для инициализации массива MN[3][4] допустима следующая запись:
int MN[][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
Слайд 25Инициализация массивов
При инициализации многомерных массивов необходимо указать все данные (размерности) за исключением
![Инициализация массивов При инициализации многомерных массивов необходимо указать все данные (размерности) за](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-24.jpg)
крайней слева размерности. Это нужно для того, чтобы компилятор смог определить длину подмассивов, составляющих массив, и смог выделить необходимую память. Рассмотрим пример безразмерной инициализации для трехмерного массива целых чисел:
Слайд 26Инициализация массивов
int XYZ[][3][4] = {
{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10,
![Инициализация массивов int XYZ[][3][4] = { { {1, 2, 3, 4}, {5,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-25.jpg)
11, 12}
},
{
{13, 14, 15, 16},
Слайд 27Инициализация массивов
{17, 18, 19, 20},
{21, 22, 23, 24}
}
};
![Инициализация массивов {17, 18, 19, 20}, {21, 22, 23, 24} } };](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-26.jpg)
Слайд 28Инициализация массивов
Вывод трехмерного массива на консоль (дисплей) можно выполнить по следующей программе:
#include
![Инициализация массивов Вывод трехмерного массива на консоль (дисплей) можно выполнить по следующей](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-27.jpg)
#include
int main (void) {
int i, j, k;
int XYZ[][3][4] = {
{ {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }, // 1-й
Слайд 29Инициализация массивов
{ {13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22,
![Инициализация массивов { {13, 14, 15, 16}, {17, 18, 19, 20}, {21,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-28.jpg)
23, 24} } }; // 2-й
for (i = 0; i < 2; ++i) { printf("\n");
for (j = 0; j < 3; ++j) { printf("\n");
for (k = 0; k < 4; ++k)
printf(" %3d", XYZ[i][j][k]);
}
}
Слайд 30Инициализация массивов
printf("\n\n Press any key: ");
_getch();
return 0;
}
![Инициализация массивов printf("\n\n Press any key: "); _getch(); return 0; }](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/861198/slide-29.jpg)