1. Строковый тип в Pascal
Последовательность символов определенной
длины называется строкой. Переменные строкового типа определяются путем
указания имени переменной, зарезервированного слова string, и возможно,
но не обязательно указания максимального размера, т. е. длины строки, в
квадратных скобках. Если не задавать максимальный размер строки, то по
умолчанию он будет равен 255, т. е. строка будет состоять из 255 символов.
К каждому элементу строки можно обратиться
по его номеру. Однако ввод и вывод строк осуществляются целиком, а не
поэлементно, как это происходит в массивах. Число введенных символов не должно
превышать указанного в максимальном размере строки, так если такое превышение
будет иметь место, то «лишние» символы будут проигнорированы.
2. Процедуры и
функции для переменных строкового типа
1. Function
Copy(S: String; Index, Count: Integer): String;
Возвращает подстроку строки. S – выражение
типа String.
Index и Count – выражения целого типа.
Функция возвращает строку, содержащую Count символов, начинающихся с позиции
Index. Если Index больше, чем длина S, функция возвращает пустую строку.
2. Procedure
Delete(var S: String; Index, Count: Integer);
Удаляет подстроку символов длиной Count из
строки S, начиная с позиции Index. S – переменная типа String. Index и Count –
выражения целого типа. Если Index больше, чем
длина S, символы не удаляются.
3. Procedure
Insert(Source: String; var S: String; Index: Integer);
Объединяет подстроку в строку, начиная с
определенной позиции. Source – выражение типа String. S – переменная типа
String любой длины. Index – выражение целочисленного типа. Insert вставляет
Source в S, начиная с позиции S[Index].
4. Function
Length(S: String): Integer;
Возвращает число символов, фактически
используемое в строке S. Обратите внимание: при использовании строк с
нуль-окончанием, число символов не обязательно равно числу байтов.
5. Function
Pos(Substr: String; S: String): Integer;
Ищет подстроку в строке. Pos ищет Substr
внутри S и возвращает целочисленное значение, которое является индексом первого
символа Substr внутри S. Если Substr не найден, Pos возвращает нуль.
3. Записи
Запись представляет собой совокупность
ограниченного числа логически связанных компонент, принадлежащих к разным
типам. Компоненты записи называются полями, каждое из которых определяется
именем. Поле записи содержит имя поля, вслед за которым через двоеточие
указывается тип этого поля. Поля записи могут относиться к любому типу,
допустимому в языке Pascal, за исключением файлового типа.
Описание записи в языке Pascal
осуществляется с помощью служебного слова RECORD, вслед за которым описываются
компоненты записи. Завершается описание записи служебным словом END.
Например, записная книжка содержит фамилии,
инициалы и номера телефона, поэтому отдельную строку в записной книжке удобно
представить в виде следующей записи:
type
Row = Record
FIO:
String[20];
TEL:
String[7];
end;
var
str: Row;
Описание записей возможно и без использования
имени типа, например:
var
str : Record
FIO :
String[20];
TEL : String[7];
end;
Обращение к записи в целом допускается
только в операторах присваивания, где слева и справа от знака присваивания
используются имена записей одинакового типа. Во всех остальных случаях
оперируют отдельными полями записей. Чтобы обратиться к отдельной компоненте
записи, необходимо задать имя записи и через точку указать имя нужного поля.
Такое имя называется составным. Компонентой записи может быть также запись, в
таком случае составное имя будет содержать не два, а большее количество имен.
Обращение к компонентам записей можно
упростить, если воспользоваться оператором присоединения with. Он позволяет
заменить составные имена, характеризующие каждое поле, просто на имена полей, а
имя записи определить в операторе присоединения.
Иногда содержимое отдельной записи зависит
от значения одного из ее полей. В языке Pascal допускается описание записи,
состоящей из общей и вариантной частей. Вариантная часть задается с помощью
конструкции case Р of, где Р – имя поля из общей части записи. Возможные
значения, принимаемые этим полем, перечисляются так же, как и в операторе
варианта. Однако вместо указания выполняемого действия, как это делается в
операторе варианта, указываются поля варианта, заключенные в круглые скобки.
Описание вариантной части завершается служебным словом end. Тип поля Р можно
указать в заголовке вариантной части. Инициализация записей осуществляется с
помощью типизированных констант.
4. Множества
Понятие множества в языке Pascal
основывается на математическом представлении о множествах: это ограниченная
совокупность различных элементов. Для построения конкретного множественного
типа используется перечисляемый или интервальный тип данных. Тип элементов,
составляющих множество, называется базовым типом.
Множественный тип описывается с помощью
служебных слов Set of, например:
type M
= Set of В;
Здесь М – множественный тип, В – базовый
тип.
Принадлежность переменных к множественному
типу может быть определена прямо в разделе описания переменных.
Константы множественного типа записываются в
виде заключенной в квадратные скобки последовательности элементов или
интервалов базового типа, разделенных запятыми. Константа вида [] означает
пустое подмножество.
Множество включает в себя набор элементов
базового типа, все подмножества данного множества, а также пустое подмножество.
Если базовый тип, на котором строится множество, имеет К элементов, то число
подмножеств, входящих в это множество, равно 2 в степени К. Порядок перечисления
элементов базового типа в константах безразличен. Значение переменной
множественного типа может быть задано конструкцией вида [Т], где Т – переменная
базового типа.
К переменным и константам множественного
типа применимы операции присваивания (:=), объединения (+), пересечения (*) и
вычитания (—). Результат выполнения этих операций есть величина множественного
типа:
1) ['A','B'] + ['A','D'] даст ['A','B','D'];
2) ['A'] * ['A','B','C'] даст ['A'];
3) ['A','B','C'] – ['A','B'] даст ['C'].
К множественным величинам применимы
операции: тождественность (=), нетождественность (<>), содержится в
(<=), содержит (>=). Результат выполнения этих операций имеет логический
тип:
1) ['A','B'] = ['A','C'] даст FALSE ;
2)
['A','B'] <> ['A','C'] даст TRUE;
3) ['B']
<= ['B','C'] даст TRUE;
4)
['C','D'] >= ['A'] даст FALSE.
Кроме этих операций, для работы с величинами
множественного типа используется операция in, проверяющая принадлежность
элемента базового типа, стоящего слева от знака операции, множеству, стоящему
справа от знака операции. Результат выполнения этой операции – булевский.
Операция проверки принадлежности элемента множеству часто используется вместо
операций отношения.
При использовании в программах данных
множественного типа выполнение операций происходит над битовыми строками
данных. Каждому значению множественного типа в памяти ЭВМ соответствует один
двоичный разряд.
Величины множественного типа не могут быть
элементами списка ввода-вывода. В каждой конкретной реализации транслятора с
языка Pascal количество элементов базового типа, на котором строится множество,
ограниченно.
Инициализация величин множественного типа
производится с помощью типизированных констант.
Приведем некоторые процедуры для работы с
множествами.
1.
Procedure Exclude(var S: Set of T; I:T);
Удаляет элемент I из множества S. S –
переменная типа «множество», и I – выражение типа, совместимого с исходным
типом S. Конструкция Exclude(S, I) соответствует S: = S – [I], но генерирует
более эффективный код.
2.
Procedure Include(var S: Set of T; I:T);
Добавляет элемент I к множеству S. S –
переменная типа «множество», и I – выражение типа, совместимого с типом S.
Конструкция Include(S, I) соответствует S: = S + [I], но генерирует более
эффективный код.
|