Лекция №5
Тема:
Массивы
ПЛАН
5 Лекция №5
5.1 Общие сведения
5.2 Операции с массивами
5.3 Поиск максимума/минимума
5.4 Примеры обработки матриц
5.5 Передача массивов в качестве параметров
Время:
2 ч.
Литература:
Общие сведения
Массив – последовательность однотипных величин, обозначенная одним именем. В оперативной памяти массив занимает непрерывную область. Все элементы массива располагаются в соседних ячейках памяти.
Основные характеристики массива:
Тип – общий тип элементов массива;
Размерность – количество индексов массива (массивы могут быть одномерными или многомерными (чаще всего двух- или трехмерными));
Диапазон – количество допустимых значений каждого индекса;
Описание массива (в разделах Type, Var) выполняется с помощью конструкции вида:
array[диапазон] of тип элементов; – для одномерных;
array[диапазон1, диапазон2, диапазонN] of тип элементов; – для многомерных;
Примеры
Описание массивов в разделе Var
Var
X :array[1..20] of Real; {Одномерный массив}
Ch:array[-5..40] of Char; {Одномерный массив}
N :array[1..5, 1..10] of Integer; {Двумерный массив}
Описание массивов в разделе Type
Type
Vector = array[0..50] of Integer; {Одномерный массив}
Matrix = array[1..5,1..3] of Byte;{Двумерный массив}
Var
Z :Vector;
M :Matrix;
Массив может быть описан как типизированная константа (константа, которая может изменять свое значение). В этом случае компоненты массива заключаются в отдельные скобки и разделяются запятыми.
Пример
Const
M1:array[1..5. of Byte=(1,4,6,8,0); {Одномерный массив}
M2:array[1..3,1..4] of Byte= {Двумерный массив}
((1,2,3,4),
(5,6,7,8),
(4,2,1,0));
Чтобы обратиться к элементу массива, нужно указать имя массива и один или несколько индексов (в зависимости от размерности массива). Индексы указывают в квадратных скобках.
Пример X[7]:=1.2;
Ch[-3]:=’R’;
N[3,6]:=8;
В качестве индекса массива можно использовать любой порядковый тип.
Пример
Var
Z:Array[False..True] of Real; {Индекс логического типа}
R:Array['a'..'z'] of Byte; {Индекс символьного типа}
M:Array[1..10,'a'..'h'] of Real; {числовой и символьный индексы}
Begin
Z[True]:=8.2;
R['f']:=7;
M[2,'d']:=9;
End.
Операции с массивами
С массивами можно выполнять следующие операции:
Присваивание;
Ввод/вывод данных;
Обработка и преобразование элементов;
Сортировка.
Поиск.
Операция присваивания может выполняться как с отдельными элементами, так и со всем массивом. Например для однотипных массивов X и Y присваивание вида X:=Y эквивалентно циклу For j:=1 to n do X[j]:=Y[j]. Все остальные операции могут применяться только к отдельным элементам массивов.
Как правило, для обработки всего массива используют циклы. Если массив является многомерным, то требуется несколько вложенных циклов (число циклов равно размерности массива).
Пример ввода/вывода и преобразования одномерного массива
Const
N=10;
Var
M:Array[1..N] of Byte;
J:Integer;
BEGIN
{Ввод данных}
For J:=1 to N do ReadLn(M[J]);
{Вывод массива в строку}
For J:=1 to N do Write(M[J]);
WriteLn;
{Преобразование -элементы увеличить в 2 раза}
For J:=1 to N do M[J]:=M[J]*2;
{Вывод массива в столбец}
For J:=1 to N do WriteLn(M[J]);
END.
Пример ввода/вывода с двумерным массивом
Const
M=3;
N=4;
Var
W:Array[1..M,1..N] of Byte;
i,j:Integer;
BEGIN
{Ввод данных в двумерный массив}
For i:=1 to M do {Внешний цикл}
For J:=1 to N do ReadLn(W[i,j]); {Внутренний цикл}
{Вывод на экран в виде матрицы}
For i:=1 to M do {Внешний цикл}
Begin {Внутренний цикл}
For J:=1 to N do Write(W[i,j]:4);{Вывод строки матрицы}
WriteLn; {Переход на новую строку}
End;
END.
Для сортировки (упорядочивания элементов используют прямые методы (сортировка обменом, сортировка выделением) или улучшенные методы (метод Хоара и др.)
Поиск данных в массиве производят либо методом последовательного перебора всех элементов (когда массив не упорядочен) либо бинарным (дихотомическим) методом (если массив упорядочен). Подробнее материал по сортировке и поиску изложен в следующей лекции.