nextupprevious

Next:5.2.2 Матрицы
Up:5.2 Структурированные типы данных
Previous:5.2 Структурированные типы данных


5.2.1 Массивы

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

ArrayType = array (Expression | NameType) of Type.

Рис. 5.5. Синтаксис типов массивов

Например, можно определить:

type СЛОВО = array100 of char;
var А,AA:СЛОВО;

где тип СЛОВО -- это все возможные последовательности литер длины 100, элементы каждой из которых занумерованы числами от 0 до 99. Допустимы операторы

A:=AA; D:=(B=BB)&(C#CC);
в которых значения массивов обрабатываются целиком. Помимо этого, любая переменная типа массивов рассматривается как совокупность переменных, носящих общее имя и различающихся индексами -- так называемых переменных с индексами. Например, массив А состоит из 100 элементов -- переменных А[0], A[1],$\ldots$,A[99], каждая из которых имеет тип char. При этом допускается присваивание значения отдельным переменным с индексами (элементам массива, например, A[2]). В частности, оператор присваивания

A[2] := 'A'

заменяет в переменной A текущее значение 2-го элемента (т.е. элемента с индексом 2) на значение 'A'.
 

ArrayName "[" Expression { "," Expression } "]"

Рис. 5.6. Синтаксис переменной с индексами

То, что индексы массива, т.е. "имена" его элементов, образуют некоторый отрезок целого типа, имеет весьма важные следствия. Индексы могут вычисляться, допускается использование вместо индексных констант индексных выражений. Значение такого выражения и определяет выбираемый элемент. Синтаксис переменной с индексами задает синтаксическая диаграмма рис. 5.6. Например, оператор

A[K] := 'В'

присваивает 'В' элементу массива А с индексом 1, если К = 1, элементу массива А с индексом 2, если К = 2, и т.д.

Возможность вычисления индекса элемента массива является одним из важнейших и мощных средств программирования (заметим, что память большинства существующих ЭВМ -- это массив ячеек памяти, в котором роль индексов играют адреса ячеек памяти), но очень часто приводит к ошибкам в программе, связанным с ошибочными обращениями к несуществующим элементам массива.

В качестве примера использования массива рассмотрим программу обращения заданного слова длины 1000 (т.е. выписывания в обратном порядке 1000 символов, составляющих входное слово).

module ОБРАЩЕНИЕ;
    const ДЛИНА = 1000;
    type СЛОВО = array ДЛИНА of char;
    var A:СЛОВО; К:НОМЕР ;
begin
    for K := 0 to ДЛИНА-1 do read(A[K]) end;
    for K := ДЛИНА-1 to 0 by -1 do write(A[K]) end
end.
 

Next:5.2.3 Матрицы
Up:5.2 Структурированные типы данных
Previous:5.2 Структурированные типы данных


© В.Н. Касьянов, Е.В.Касьянова, 2004