Академический Документы
Профессиональный Документы
Культура Документы
Основы алгоритмизации и
программирования на
языках высокого уровня
2
1. Понятие массива. Объявление
массивов
Массив – это последовательность
переменных одного типа, использующая
одно имя.
Индекс – ссылка на конкретное значение в
массиве.
Индексы элементов
0 1 2 3 4 5
4
Объявление одномерного массива
имеет следующий вид:
7
Обращение к каждому элементу массива
осуществляется с помощью индексов.
Индекс определяет позицию элемента внутри
массива.
В С++ все массивы используют ноль в качестве
индекса своего первого элемента!
Пример. Объявление массива my_array и присваивание
значений его элементам.
my_array[0] = 12;
my_array[1] = 1245;
my_array[2] = 18094; P.S. Объявление int my_array[n] без
предварительной инициализации
переменной n и объявлении ее
константой вызовет ошибку
компиляции. 9
Пример 1. Пример 2.
Размерность двумерного Размерность двумерного
массива определена массива определена
целыми положительными целыми положительными
числами константами
10
Запрещено также объявление массива без
указания размерности (например, int my_array[ ])
за исключением объявления с инициализацией
(см. раздел инициализация массивов). Это
происходит от того, что память под все элементы
массива выделяется на этапе компиляции.
Исключение составляет объявление
массива в динамической памяти.
11
В С++ не выполняется
никакой проверки "нарушения
границ" массивов, т.е. ничего не
может помешать программисту
обратиться к массиву за его
пределами: компилятор запустит
такой код на выполнение, но
результаты могут быть
непредсказуемые.
12
2. Одномерные и двумерные
статические массивы
С++ допускает возможность создания многомерных
массивов. Простейшей формой такого массива
является двумерный массив. Для того, чтобы создать
двумерный массив, надо записать:
тип имя [число строк][число столбцов];
13
14
15
16
Двумерные массивы представляются в виде
матрицы, состоящей из строк и столбцов. Доступ к
элементам массива осуществляется по двум
индексам.
Двумерный массив можно рассматривать как
одномерный массив, содержащий, в свою очередь,
в качестве элементов одномерные массивы!
При этом число строк является размерностью
самого массива, а число столбцов – размерностью
массивов его составляющих.
17
Массив my_array[3][4] – это :
my_array[0][0] my_array[0][1] my_array[0][2] my_array[0][3]
18
3. Инициализация массивов. Доступ
к элементам массива
19
Инициализация одномерных массивов
20
Объявление с инициализацией без указания
размерности. При этом компилятор сам определяет
размерность массива в процессе компиляции.
c) int my_array [ ] = {12, 1245,
18094};
Объявление с инициализацией не всех
элементов. В следующем примере компилятор
инициализирует нулями два оставшихся элемента
массива.
d) int my_array [5] = {12, 1245,
18094}; 21
2. Инициализация в цикле
тип имя_массива[размер];
for (i=0;i<размер;i++) имя_массива[i]= значение;
или
тип имя_массива[размер];
for (i=0;i<=размер-1;i++) имя_массива[i]= значение;
22
23
В программе использован оператор цикла, индексная переменная i
которого пробегает значения от 0 до 5 включительно. Значение 2i
присваивается элементу массива и выводится на экран.
Важной особенностью языка С++ является то, что ячейки памяти, в
которые заносятся значения элементов массива, размещены рядом, то
есть являются смежными. Эта особенность является достаточно
полезной и может успешно использоваться на практике. С этой же
особенностью языка С++ связана потенциальная опасность
использования массивов. Поскольку проверки на предмет выхода за
пределы массива в С++ нет, неверно указанный индекс элемента
массива приводит к тому, что выполняется обращение к одной из
смежных ячеек за пределами массива. Такая ситуация как ошибочная не
идентифицируется, но скажется только на выполнении программы. Но
вот если в такую ячейку значение записывается, то дело может
закончиться не только ошибкой в выполнении программы, но и крахом
всей операционной системы.
24
Пример. В программе осуществляется объявление массива из 5 элементов,
значения которых вводятся пользователем в диалоговом режиме. Затем
введенный массив выводится на экран.
25
Важно!! Работая с массивами, следует иметь в виду
серьезное ограничение:
В С++ недопустимо копировать один массив в другой с
помощью операции присваивания.
Например, следующий фрагмент неправилен:
26
Пример. Копирование элементов массива old_price в массив new_price и его вывод.
27
Пример вывод в обратном порядке.
28
Инициализация двумерных массивов
31
32
b) const int n = 4;
const int m=3;
int my_array [n][m] = { {12, 1245, 18094}, {2,
518, 45}, {45, 67, 45}, {34, 562, 98} };
33
Объявление с инициализацией без указания размерности строк.
c) int my_array [ ][3] = { {12, 1245, 18094}, {2,
518, 56}, {45, 67, 45}, {34, 562, 98} };
12 1245 18094
2 518 0
45 67 45
34 98 0
35
2. Инициализация в цикле
36
Обратите внимание на использование вложенных циклов for
при инициализации многомерных массивов. Массив
инициализируется построчно.
37
В следующем примере элементам массива присваиваются значения:
38
39
Пример.
Программа, которая инициализирует массив как показано
на рисунке, т.е. заполняет единицами второстепенную
диагональ.
40
41
Пример. Программа, в которой вычисляется скалярное
произведение двух векторов. Каждый вектор реализуется
как одномерный массив из трех элементов. Элементы
векторов вводятся пользователем. В результате
выполнения программы отображается значение
скалярного произведения этих векторов.
42
43
Задания
Вариант 1
Создать программу для вычисления среднего
арифметического элементов массива размерности n. Среднее
арифметическое вычисляется по формуле:
где xi – элементы массива, n –
количество элементов массива.
Вариант 2
Создать программу для вычисления модуля n-мерного вектора,
компоненты которого находятся в массиве. Модуль вектора
вычисляется по формуле:
где ai – компоненты массива.
44
4. Действия над массивами
45
46
47
48
5. Сортировка массивов
■ Сортировка массива методом пузырька
6 4 7 5 3 5 1 9
49
50
В начале программы инициализируется числовая константа, которая
определяет размер массива. Далее случайными числами в диапазоне от 0 до 19
включительно заполняется массив. Одновременно с этим соответствующие
элементы выводятся на экран для того, чтобы исходный массив можно было
сравнить с отсортированным массивом.
Сортировка массива реализуется через два вложенных цикла. Внешний
цикл for (j=l; j<= (m-1); j++) обеспечивает необходимое количество циклов
перебора элементов массива. Через внутренний цикл for (i=0; i<m-j ; i++)
реализуется непосредственно перебор элементов массива. Причем верхняя
граница для индекса элементов, которые определяются переменной i, зависит
от количества переборов элементов массива, то есть от индексной переменной
внешнего цикла.
В рамках двойного оператора цикла выполняется условный оператор, в
котором сравниваются смежные элементы массива. Если значение элемента с
меньшим индексом превышает следующий за ним элемент, они меняются
местами. После сортировки массив выводится на экран.
Как правило, метод пузырька используют при сортировке не очень
больших по размеру массивов. Данный метод, на самом деле, является не
очень продуктивным с точки зрения времени выполнения программы, поэтому
при работе с большими массивами лучше использовать иные подходы.
51
Результат выполнения программы
52
■ Сортировка одномерного массива методом выбора
53
Процесс обмена элементов массива с номерами i и imin
через переменную а на i-м проходе цикла
проиллюстрирован на рисунке.
Цифры около стрелок обозначают порядок действий.
54
55
■ Сортировка методом выбора двумерного массива
построчно
56
57
Сортировка методом выбора двумерного
массива целиком
58
59
Задание
Рассчитать коэффициент вариации уровня выполнения плана
розничного товарооборота.
60