Массивы представляют собой ограниченную упорядоченную совокупность однотипных величин. Каждая отдельная величина называется компонентой массива. Тип компонент может быть любым, принятым в языке ПАСКАЛЬ, кроме файлового типа. Тип компонент называется базовым типом.
Вся совокупность компонент определяется одним именем. Для обозна- чения отдельных компонент используется конструкция, называемая пере- менной с индексом или с индексами:
A[5] S[k+1] B[3,5].
В качестве индекса может быть использовано выражение. Тип индексов может быть только интервальным или перечисляемым. Действительный и целый типы недопустимы. Индексы интервального типа, для которого ба- зовым является целый тип, могут принимать отрицательные, нулевое и положительные значения.
В операторной части программы один массив может быть присвоен другому, если их типы иден- тичны, например:
R1:=Z.
Для ввода или вывода массива в список ввода или вывода помещается переменная с индексом, а операторы ввода или вывода выполняются в цикле.
Первый индекс определяет номер строки, второй - номер столбца. Двумерные массивы хранятся в памяти ЭВМ по строкам.
Инициализация массивов (присвоение начальных значений всем компо- нентам массивов) осуществляется двумя способами.
Первый способ - с использованием типизированных констант, напри- мер:
При инициализации двумерных массивов значения компонент каждого из входящих в него одномерных массивов записывается в скобках:
type Dim3x2= Array[1..3,1..2] of Integer; const iaM3x2: Dim3x2= ( (1, 2) (3, 4) (5, 6) );
Второй способ инициализации - использование разновидности процеду- ры FillChar:
FillChar( var V; NBytes: Word; B: Byte );
Эта процедура заполняет участок памяти однобайтовым значением. Напри- мер, для обнуления массива A[1..10] of Real можно записать:
FillChar(A, 40, 0);
или
FillChar(A, SizeOf(A), 0);
СТРОКИ
Особое место в языке ПАСКАЛЬ занимают массивы символов. Стандарт- ный ПАСКАЛЬ допускает два способа хранения символьных массивов в па- мяти ЭВМ: распакованный и упакованный. Распакованные массивы символов хранятся в памяти ЭВМ по одному символу в машинном слове, упакованные - по одному символу в байте. При описании упакованного массива симво- лов используют служебное слово PACKED, например:
var MAS: Packed Array[1..20] of Char;
Описание распакованного массива символов имеет вид:
var M: Array[1..20] of char;
Для преобразования символьного массива из распакованной формы в упакованную и наоборот, из упакованной в распакованную, в язык ПАС- КАЛЬ введены две стандартные функции Pack, UnPack.
Упакованный массив символов образует символьную строку. Символьная строка может быть либо строковой константой, либо строковой перемен- ной. Строковая константа, или строка, представляет собой совокупность символов, заключенную в апострофы. Строка - это элементарная конс- трукция языка ПАСКАЛЬ. Строковые константы могут входить в состав вы- ражений. Как и числовые константы, они могут быть описаны в разделе описания констант.
Строковые переменные - это одномерные упакованные массивы симво- лов, для описания которых в TURBO PASCAL введен тип String.
Например, если строка содержит до 30 символов, ее тип будет опре- делен как
type s= String[30];
Длина строки не может содержать более, чем 255 символов. В TURBO PASCAL определено понятие строки переменной длины, в этом случае ее описание задается как
type s= String;
Тип String без указания длины совместим со всеми типами строк. Особенностью строковых переменных является то, что к ним можно об- ращаться как к скалярным переменным, так и к массивам. Во втором слу- чае применяется конструкция "переменная с индексом", что обеспечивает доступ к отдельным символам строки. При этом нижняя граница идекса равна 1. Отдельный символ строки совместим с типом Char.
В памяти ЭВМ строка занимает количество байтов, на единицу большее ее длины. Нулевой байт строки содержит ее длину.
Для строк определены операции присваивания, слияния (конкатенации) и сравнения.
Для сравнения строк применяются все операции отношения. Сравнение строк происходит посимвольно, начиная с первого символа. Строки рав- ны, если имеют одинаковую длину и посимвольно эквивалентны.
Строки могут быть элементами списка ввода - вывода, при этом запи- сывается имя строки без индекса.
При вводе строковых переменных количество вводимых символов может быть меньше, чем длина строки. В этом случае вводимые символы разме- щаются с начала строки, а оставшиеся байты заполняются пробелами. Ес- ли количество вводимых символов превышает длину строки, лишние символы отбрасываются.
Инициализация строк может производиться как с помощью типизирован- ных констант:
const sName: String[9]= 'IBM PC/AT';
так и с использованием второй разновидности функции FillChar:
FillChar( var V; NBytes: Word; C: Char );
например:
FillChar(A, SizeOf(A), '0');
Для работы со строками в TURBO PASCAL включены процедуры и функ- ции, которые обеспечивают редактирование и преобразование строк.