pascal. работа с массивами

advertisement
PASCAL
Работа с массивами
1. ОПИСАНИЕ ТИПА
Массив – структурированный тип данных.
Структурированные типы данных определяют упорядоченную совокупность
скалярных (простых) переменных и характеризуются типом своих компонентов.
В языке PASCAL допускаются следующие структурированные типы данных: строки,
массивы, множества, записи, файлы, указатели.
Рассмотрим работу со структурированными данными на примере массивов.
Массив – это структурированный тип данных, состоящий из фиксированного количества
элементов одного типа. Каждый элемент массива определяется своим индексом (номером), по
которому к нему осуществляется доступ.
PASCAL допускает использование одномерных, двумерных, n-мерных массивов.
Тип элементов массива называется базовым. Число элементов массива фиксируется при
описании и в процессе выполнения программы не меняется. Индексы представляют собой
выражения скалярного типа (кроме вещественного).
Для описания массива предназначено словосочетание array of.
В языке PASCAL существует два способа описания массива.
1-й способ:
Type
<имя типа> = array[тип индекса] of <тип компонент>;
Var
<идентификатор, …> : <имя типа>
2-й способ:
Var
<идентификатор, …> : array[тип индекса] of <тип компонент>;
П Р И М Е Р:
Type
Klass = ( K1, K2, K3, K4 ) ;
Znak = array[1..255] of char ;
Var
M1 : Znak ; {тип Znak предварительно описан в разделе типов}
M2 : array[1..60] of integer ; { прямое описание массива М2 }
M3 : array[1..4] of Klass ;
Это пример описания одномерных массивов.
Если в качестве базового типа взят другой массив, образуется структура, которую
принято называть многомерным массивом.
П Р И М Е Р:
Type
A = array[1..4] of integer ;
1
Massiv = array[1..4] of A ;
Var
Matr1 : Massiv ;
Получили двумерный массив (матрицу) Matr.
Двумерный массив можно получить, используя другую форму записи:
Var
Matr1 = array[1..4,1..4] of integer ;
Если в описании массива задан один индекс, массив называют одномерным,
если два индекса – двумерным, если n индексов – n-мерным.
Размерность указывается при описании массива в обязательных квадратных скобках
через запятую. В диапазоне изменения индекса указывается начальное значение и конечное
значение через 2 точки.
Одномерные массивы используются для описания векторов, а двумерные – для описания
матриц.
П Р И М Е Р:
{одномерный массив представляет
собой вектор из 30 элементов вещественного
типа}
Matr2 : array[1..6, 1..6] of integer ; {двумерный массив представляет
собой
матрицу из 6 строк и 6 столбцов с элементами целочисленного
типа}
Mas3 : array[1..4, 1..5, 1..8] of integer ; {трехмерный массив }
Для описания размерности массива можно использовать предварительно определенные
константы.
П Р И М Е Р:
Const
K1 = 4; K2 = 6;
Var
Mas : array[1..K1, 1..K2] of integer ;
ЗАМЕЧАНИЕ.
Элементы массива располагаются в памяти последовательно по возрастанию адресов,
причем в многомерных массивах самый правый индекс возрастает самым первым и т.д.
Например, элементы массива
M : array[1..5, 1..5] of integer ;
в памяти будут размещены следующим образом:
M[1,1]
M[1,2]
M[1,3]
M[1,4]
M[1,5]
M[2,1]
M[2,2]
…
M[2,5]
…
2
M[5,1]
…
M[5,5]
2. ДЕЙСТВИЯ НАД МАССИВАМИ
Для работы с массивом как единым целым используется идентификатор (имя) массива
без указания индексов.
Массивы могут участвовать только в операциях отношения «равно», «не равно» и
в операторе присваивания, при этом массивы должны иметь одинаковые типы элементов
и одинаковые типы индексов.
Например, если массивы А и В описаны, как
то к ним допустимы следующие операции:
А = В
- Результат True, если значение каждого элемента массива А равно
соответствующему значению элемента массива В.
А<>В
- Результат True, если хотя бы одно значение элемента массива А не равно
значению соответствующего элемента массива В.
А:=В - Все значения элементов массива В присваиваются соответствующим элементам
массива А. Значения элементов массива В остаются неизменны.
3. ДЕЙСТВИЯ НАД ЭЛЕМЕНТАМИ МАССИВА
После объявления массива для обращения к его элементу необходимо указать имя
массива и индекс элемента в квадратных скобках.
Например запись Mas[3] делает доступным третий элемент массива Mas, а запись
Matr[4,5] делает доступным элемент массива Matr, находящийся в четвертой строке пятого
столбца массива Matr.
Элементы массива называют индексированными переменными. Их можно
использовать так же, как и простые переменные в различных выражениях.
Рассмотрим типичные ситуации, возникающие при работе
опишем три массива и четыре вспомогательные переменные:
с массивами. Для этого
Var
А, D : array[1..4] of real ;
B : array[1..10,1..15] of ;
I, J : integer ; K : integer ; S : real;
Инициализация массива заключается в присвоении каждому элементу массива
одного и того же значения, соответствующего базовому типу. Например: А[1]: = 0; А[2]: = 0;
А[3]: = 0; А[4]: = 0;
Однако при большом количестве элементов такой способ нерационален. Гораздо удобнее
получить тот же результат, используя оператор цикла for:
for I : = 1 to 4 do A[I] : = 0;
Для инициализации двумерного массива обычно используются вложенные циклы:
for I : = 1 to 10 do
for J : = 1 to 15 do
B[I,J] : = 0;
PASCAL не имеет средств ввода-вывода элементов массива сразу, поэтому ввод и вывод
значений производится поэлементно.
Чаще всего значения элементов массива вводятся с экрана с помощью операторов read
или readln c использованием циклов. Например:
3
for I : = 1 to 4 do readln (A[I] );
Значения элементов двумерного массива можно ввести так:
for I : = 1 to 10 do
for J : = 1 to 15 do
readln (B[I,J] );
Можно ввести значения отдельных элементов, а не всего массива, указывая при этом
индекс конкретного элемента: readln (B[5,7] );
Вывод значений элементов массива выполняется аналогично, но с использованием
операторов write или writeln.
Копирование
массива
заключается в присвоении значений элементов одного
массива всем соответствующим элементам другого массива. При этом оба массива должны
быть идентичны по структуре, т.е. иметь одинаковую размерность и один тип элементов.
Копирование можно выполнить либо одним оператором присваивания, например: A : = D
;
Либо с помощью оператора for, например:
for I : = 1 to 4 do A[ I ] : = D[ I ];
В обоих случаях значение элементов массива D не изменится, а значения элементов
массива A станут равными значениям соответствующих элементов массива D.
Поиск в массиве элементов, удовлетворяющих некоторым условиям организуется с
помощью операторов for и if.
Например, нужно выяснить сколько элементов массива A имеют нулевое значение. Для
этого введем вспомогательную переменную K:
K : = 0;
for I : = 1 to 4 do
if A[I] = 0 then K : = K + 1;
После выполнения цикла переменная K будет содержать количество нулевых значений
элементов массива A.
Перестановка значений элементов массива осуществляется с помощью
дополнительной переменной того же типа, что и базовый тип массива.
Например, требуется поменять значения первого и третьего элементов массива A:
S : = A[3] ; { S - вспомогательная переменная}
A[3] : = A[1] ;
A[1] : = S;
ЗАМЕЧАНИЕ.
Кроме массивов пользователей в языке PASCAL существуют стандартные массивы,
которые служат для реализации доступа к памяти процессора ( Mem, MemW ), портам
данных ( Port, PortW ) и др.
4
Download