Массивы
Массив – это структурированный тип данных, состоящий из фиксированного
числа элементов, имеющих один и тот же тип. В них объединены однотипные
элементы, упорядоченные по индексам, определяющим положение каждого
элемента в массиве.
Элементами массива могут быть данные любого типа. Тип элементов массива
называется базовым. Особенностью языка Паскаль является то, что число
элементов массива фиксируется при описании и в процессе выполнения программы
не меняется.
Элементы, образующие массив, упорядочены таким образом, что каждому
элементу соответствует совокупность номеров (индексов), определяющих
его местоположение в общей последовательности. Доступ к элементу массива
осуществляется путем указания индекса (номера) элемента.
Для описания массива предназначено словосочетание array of
(массив из).
Формат записи будет таким:
Var
<идентификатор> : Array [тип индекса] of <тип компонента>;
Пример записи массива, состоящего из пяти целых элементов
Var
Massiv : array[1..5] of integer;
Массивы бывают одномерными, двумерными, n-мерными. Если при описании
задан один индекс, то массив называется одномерным, если два индекса
– двумерным, если п индексов – п-мерным. Одномерный массив соответствует
понятию линейной таблицы (вектора), двумерный – понятию прямоугольной
таблицы (матрицы, набору векторов), поэтому одномерные массивы обычно
используются для представления векторов, а двумерные – для представления
матриц.
Примеры
Var
Vector: array[1..40] of real; {Одномерный массив из 40 элементов}
Matr: array[1..8, 1..8] of integer; {Двумерный массив }
Tril: array [1..4, 1..5, 1..8] of integer; {Трехмерный массив}
Для описания массива можно использовать предварительно определенные
константы:
Сonst
G1=4; G2=6;
Var
Mas: array[1..G1, 1..G2] of real;
Элементы массива располагаются в памяти последовательно. Многомерные
массивы располагаются таким образом, что самый правый индекс возрастает
первым.
Например, если имеется массив A:array[1..5,1..5] of integer;
то в памяти элементы массива будут размещены по возрастанию адресов:
А[1,1]
A[1,2]
...
A[1,5]
A[2,1]
A[2,2]
...
A[5,5]
Уже говорилось, что в Паскале количество элементов массива всегда должно
быть фиксировано. Это считается недостатком языка, так как не во всех
программах можно заранее предсказать необходимый размер массива (который
может определяться в зависимости от тех или иных условий, возникающих
в процессе исполнения). Поэтому используется прием, позволяющий имитировать
работу с массивами переменной длины, который заключается в следующем:
в разделе описания констант предварительно определяют возможное максимальное
значение размера массива, а затем в программе запрашивают текущее значение
размера и используют это значение далее при заполнении и обработке массива.
Действия над элементами массива
После объявления массива каждый его элемент можно обработать, указав
имя массива и индекс элемента в квадратных скобках. Например, запись
Mas[2], Vector[10] позволяет обратиться ко второму элементу массива
Mas и к десятому элементу массива Vector. При работе с двумерным массивом
указываются два индекса, с п-мерным – п индексов. Например, запись Matr[4,5]
делает доступным для обработки значение элемента, находящегося в четвертрой
строке пятого столбца массива Matr.
Инициализация (присваивание начальных значений) массива
заключается в присваивании каждому элементу массива одного и того же
значения, соответствующего базовому типу. Наиболее эффективно эта операция
выполняется с помощью оператора for, например:
For I:=1 to 4 do A[I]:=0.
Для инициализации двумерного массива обычно используется вложенный оператор
for, например:
For I:=1 to 10 do
For J:=1 to 15 do
B[I, J]:=0.
Паскаль не имеет средств ввода-вывода элементов массива сразу,
поэтому ввод и вывод значений производится поэлементно. Значения элементам
массива можно присвоить с помощью оператора присваивания, как показано
в примере инициализации, но чаще они вводятся с экрана с помощью оператора
Read или Readln с использованием оператора
организации циклов for:
For I:=1 to 10 do Readln(A[I]);
Аналогично значения двумерного массива вводятся с
помощью вложенного оператора for:
For I:=1 to 10 do
For J:=1 to 15 do
Readln(B[I, J];
В связи с тем, что использовался оператор Readln каждое значение будет
вводиться с новой строки. Можно ввести и значения отдельных элементов,
а не всего массива. Так, операторами Read(A[3]); Read(B[6,9]); вводится
значение третьего элемента вектора А и значение элемента, расположенного
в шестой строке девятого столбца матрицы В.
Вывод значений элементов массива выполняется аналогичным
образом, но используются операторы Write или Writeln:
For I:=1 to 4 do
Write (A[I]);
или
For I:=1 to 10 do
For J:=1 to 15 do
Writeln (B[I, J]);
Примеры
1. Разные способы создания массивов
Составим программу, которая формирует одномерный массив двумя способами
(по формуле и вводом элементов с клавиатуры) и выводит полученный в
каждом случае массив на экран.
program Massiv_sozdanie;
var
Massiv: array[1..10] of real;
i, N, A, B: integer;
procedure Out_Massiv (Msg: string); {Процедура вывода массива на экран}
var
j: integer;
begin
for j := 1 to 10 do
writeln(j, '-ый элемент массива =', Massiv[j] : 5 : 1);
end;
begin {Основная программа}
for i := 1 to 10 do {Формирование одномерного массива по формуле}
Massiv[i] := i * 3;
Out_Massiv('Одномерный массив, элементы которого =i*3'); {Вызов процедуры}
for i := 1 to 10 do {Формирование одномерного массива вводом с клавиатуры}
begin
write('Введите ', i, '-ый элемент массива: ');
Readln(Massiv[i]);
end;
Out_Massiv('Одномерный массив, введенный с клавиатуры'); {Вызов процедуры}
End.
2.
Составим программу, которая формирует одномерный массив вводом с клавиатуры,
находит в массиве элементы, заданные пользователем, подсчитывает их
количество и выводит номер первого найденного элемента.
Program Massiv_ Poisk;
var
Massiv: array[1..10] of real;
i: integer; {Номер элемента в массиве}
N: integer; {Нужное значение элемента}
A: integer; {Номер первого элемента с нужным значением}
B: integer; {Количество элементов с нужным значением}
procedure Out_Massiv (Msg: string); {Процедура вывода массива на экран}
var
j: integer;
begin
for j := 1 to 10 do
writeln(j, '-ый элемент массива =', Massiv[j] : 5 : 1);
end;
begin {Основная программа}
for i := 1 to 10 do {Формирование одномерного массива вводом с клавиатуры}
begin
write('Введите ', i, '-ый элемент массива: ');
Readln(Massiv[i]);
end;
Out_Massiv('Одномерный массив, введенный с клавиатуры'); {Вызов процедуры}
{Далее идет поиск элемента в массиве}
B := 0; {Пока не найдено ни одного элемента}
write('Введите значение элемента массива для поиска: ');
Readln(N);
for i := 1 to 10 do {Поиск элемента, значение которого равно N}
if Massiv[i] = N then
begin
B := B + 1; {Увеличить число найденных элементов на 1}
if B = 1 then
A := i; {Запомнить номер первого элемента, значение которого равно N}
end;
if B = 0 then
writeln('Нет таких элементов в массиве')
else
begin
writeln('Количество элементов массива, имеющих значение ', N, ' равно
', B);
writeln('Номер первого элемента, значение которого равно', N, '-', A);
end;
end.