Урок №24

Массивы
Массив – это структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип. В них объединены однотипные элементы, упорядоченные по индексам, определяющим положение каждого элемента в массиве.
Элементами массива могут быть данные любого типа. Тип элементов массива называется базовым. Особенностью языка Паскаль является то, что число элементов массива фиксируется при описании и в процессе выполнения программы не меняется.
Элементы, образующие массив, упорядочены таким образом, что каждому элементу соответствует совокупность номеров (индексов), определяющих его местоположение в общей последовательности. Доступ к элементу массива осуществляется путем указания индекса (номера) элемента.

Для описания массива предназначено словосочетание 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.


Задание
Составить программу, которая выводит минимальный элемент введенного с клавиатуры одномерного массива целых чисел.

Назад