Операции над элементами массива

После объявления массива каждый его элемент можно обработать, указав идентификатор (имя) массива, а за ним – индекс элемента в квадратных скобках. Например, запись Mas[2], VectorZflO] позволяет обратиться ко второму элементу массива Mas и десятому элементу массива VectorZ. При работе с двумерным массивом указываются два индекса, с n-мерным массивом – n индексов. Например, запись MatrU[4,4] делает доступным для обработки значение элемента, находящегося в четвертой строке четвертого столбца массива MatrU.

Индексированные элементы массива называются индексированными переменными и могут использоваться так же, как и простые переменные. Например, они могут входить в выражения в качестве операндов, использоваться в операторах for, while, repeat, входить в качестве параметров в операторы Read, Readln, Write, Writeln им можно присваивать любые значения, соответствующие их типу.

Рассмотрим типичные ситуации, возникающие при работе с данными типа array. Для этого опишем три массива и четыре вспомогательные переменные:

var

A,D : аггау[1..4] of real;

В : аггау[1..10.1..15] of integer;

I, J, К : integer;

S : real;

Инициализация (присваивание начальных значений) массива заключается в присваивании каждому элементу массива одного и того же значения, соответствующего базовому типу. Наиболее эффективно эта операция выполняется с помощью оператора for, например:

for I := 1 to 4 do A[I] := 0;

Для инициализации двумерного массива обычно используется вложенный оператор for, например:

for I := I to 10 do

for J := 1 to 15 do

B[I,J] :=0;

Pascal не имеет средств ввода-вывода сразу всех элементов массива, поэтому ввод и вывод значений производится поэлементно. Значения элементам массива можно присвоить с помощью оператора присваивания, как показано в примере инициализации, однако чаще всего они вводятся с клавиатуры при помощи оператора Read или Readln с использованием оператора цикла for:

for I:=l to 4 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

Writeln (A[I]): {Вывод значений массива А}

или

for I ;= 1 to 10 do for J := 1 to 15 do Writeln (B[I.J]): {Вывод значений массива В}

Копированием массивов называется присваивание значений всех элементов одного массива всем соответствующим элементам другого массива. Копирование можно выполнить при помощи одного оператора присваивания, например А:= D; или с помощью оператора for:

for I := 1 to 4 do A[I] := D[I];

В обоих случаях значения элементов массива D не изменяются, а значения элементов массива А становятся равными значениям соответствующих элементов массива D. Очевидно, что оба массива должны быть идентичны по структуре.

Иногда требуется осуществить поиск в массиве каких-либо элементов, удовлетворяющих некоторым известным условиям. Пусть, например, требуется выяснить, сколько элементов массива А имеют нулевое значение. Для ответа на этот вопрос введем дополнительную переменную К и воспользуемся операторами for и if:

К := 0;

for I := I to 4 do

if A[I] = 0 then К := К + 1;

После выполнения цикла переменная К будет содержать число элементов массива А, имеющих нулевое значение.

Перестановка значений элементов массива осуществляется с помощью дополнительной переменной того же типа, что и базовый тип массива. Например, фрагмент программы, обменивающий значения первого и пятого элементов массива А, будет выглядеть следующим образом:

Vs:= A[5]; {Vs — вспомогательная переменная}

А[5]:= А[1]; A[l]:= Vs;

Добавить комментарий