Для обработки строковых данных в языке Turbo Pascal имеются следующие стандартные процедуры и функции:
Delete(St,Poz,N) – процедура удаления N символов строки St начиная с позиции Poz;
Insert(St1,St2,Poz) – процедура вставки строки St1 в строку St2 начиная с позиции Poz;
Str(IBR,St) – процедура преобразования числового значения величины переменной IBR и помещение результата в строку St;
Val(St,IBR,Cod) – процедура преобразования числовой строки St в число целого или вещественного типа (переменная IBR). Cod – переменная целого типа, содержащая код успеха преобразования. Если значение Cod равно 0, преобразование выполнилось успешно, в противном случае переменная содержит номер позиции первого ошибочного символа;
Copy(St,Poz,N) – функция выделения из строки St подстроки длиной N начиная с позиции Poz.
Concat(St1,St2,...,StN) – функция сцепления строк St1, ..., StN в том порядке, в каком они указаны в списке параметров;
Length(St) – функция вычисления длины в символах строки St;
Pos(St1,St2) – функция поиска первого появления в строке St2 подстроки St1. Результат функции имеет целый тип и равен номеру той позиции, где находится первый символ подстроки St1. Если подстроки не найдено, результат функции равен 0;
UpCase(Ch) – функция преобразования строчной буквы в прописную. Аргумент функции и результат имеют символьный тип. Обрабатываются буквы только латинского алфавита.
Запись – это тип данных, состоящий из фиксированного числа компонентов разного типа. Компоненты записи называются полями. Форматы объявления записи:
1) Type
<имя типа>=record
<идентификатор поля>:<тип компоненты>;
. . .
<идентификатор поля>:<тип компоненты> end;
Var
<идентификатор>:<имя типа>; 2) Var
<идентификатор>:record
<идентификатор поля>:<тип компоненты>;
. . .
<идентификатор поля>:<тип компоненты> end;
Пример. Объявление записей и переменных типа "запись".
Type
Data=record {Тип - дата рождения}
Year: Integer;
Month: 1..12; Day: 1..31 end;
Auto = record {Тип – сведения об автомобиле}
Nomer: Integer; | {Номер автомобиля} |
Marka: String[20]; | {Марка автомобиля} |
FIO: String[60]; | {Имя владельца} |
Adres: String[120] end; | {Адрес владельца} |
Var
Men: Data;
Driver: Auto;
В данных примерах запись Data содержит три поля, а запись Auto – четыре. Доступ к полям осуществляется через переменные типа записей Men и Driver соответственно. Идентификатор поля должен быть уникальным только в пределах записи, однако во избежание ошибок лучше делать его уникальным в пределах всей программы. Объем памяти, необходимой для записи, складывается из длин полей.
Обращение к значению поля осуществляется с помощью идентификатора переменной и идентификатора поля, разделенных точкой. Такая комбинация называется составным именем, например: Men.Year, Men.Month, Men.Day. Для присваивания полям значений используется оператор присваивания, например:
Men.Year:=1992;
Men.Month:=2;
Men.Day:=29;
Составные имена используются, в частности, в процедурах ввода-вывода, например:
Read(Input_File,Men.Year,Men.Month,Men.Day);
Write(Output_Filr,Men.Year,Men.Month,Men.Day);
Допускается применение оператора присваивания к записям в целом, если они имеют один и тот же тип. Можно объявить массив записей следующим образом:
Var
Person: array[1..250] of Data;
При задании значений константе-записи ее поля записываются в круглых скобках через точку с запятой. Для задания значения каждого поля сначала указывается имя поля, а затем через двоеточие – его значение, например:
Const Birthday: Data=(Year:1971; Month:12; Day:9);
Записи обычно используются для организации файлов на магнитных дисках. Записи могут служить для описания комплексных чисел, при этом действительная и мнимая части комплексного числа являются полями записи, например:
Var X,Y,Z: record | {X, Y, Z - комплексные числа} |
Re: Real; | {Действительная часть} |
Im: Real | {Мнимая часть} |
end;
Обращения к полям записи посредством составных имен имеет громоздкий вид. Для преодоления этого неудобства предназначен оператор With, который имеет следующий формат:
With <переменная типа запись> do <оператор>;
В этом случае внутри оператора можно указывать только поле записи, например: With X do
Begin
Re:=-1.5;
Im:=1.7
End;
Операторы With могут быть вложенными, но уровень вложенности не может превышать девяти.
Множество представляет собой набор взаимосвязанных по какому-либо признаку или группе признаков объектов, которые можно рассматривать как единое целое. Каждый объект в таком наборе называется элементом множества. Все элементы множества должны иметь простой тип, который называется базовым типом множества. Базовый тип задается диапазоном или перечислением. В выражениях значения элементов множества указываются в квадратных скобках, например: [a,b,c], ['a'..'z']. Если множество не имеет элементов, оно называется пустым и обозначается как [].
Число элементов множества не может быть больше 256, порядковые номера элементов должны находиться в пределах от 0 до 255. Форматы объявления множества:
1) Type
<имя типа>=set of <элемент 1, ... , элемент N>;
Var
<идентификатор>:<имя типа>;
2) Var
<идентификатор>:set of <элемент 1, ..., элемент N>; Пример. Объявления переменных типа множество.
Type
Simple=set of (3,5,7,11,13);
Number=set of 1..99;
Var
Prostoe: Simple;
Nomer: Number;
Letter: set of ('i','j','k');
Один элемент множества занимает в памяти ЭВМ 1 бит.
При задании значений константе-множеству ее элементы перечисляются через запятую (допустимо указывать диапазоны) и помещаются в квадратные скобки, например:
Const Digit: Number = [1..9];
Для множеств определены следующие операции:
+ – объединение множеств;
– – разность множеств;
* – пересечение множеств;
= – проверка эквивалентности двух множеств;
<> – проверка неэквивалентности двух множеств;
<= – проверка, является ли левое множество подмножеством правого множества;
>= – проверка, является ли правое множество подмножеством левого множества; in – проверка, входит ли элемент, указанный слева, в множество,
указанное справа.
Результатом операций объединения, разности и пересечения является множество, остальные операции дают результат логического типа.
Файл в языке Turbo Pascal представляет собой последовательность компонент одного типа, расположенных на периферийном устройстве ПЭВМ. Компоненты могут быть любого типа, кроме файла и объекта. Число компонент в файле не объявляется. Такие файлы называются типизированными. Форматы объявления файла:
1) Type
<имя типа>=file of <тип компонент>; Var
<идентификатор>:<имя типа>; 2) Var
<идентификатор>:file of <тип компонент>; Пример. Объявления файловых переменных.
Type
Number=file of Integer;
Symbol=file of 'A'..'Z';
Var
Int_File: Number;
Real_File: file of Real;
Sym_File: file of Symbol;
Prnt: Text;
Стандартный тип Text определяет файл, содержащий символы, объединенные в строки, а каждая строка завершается специальными символами "Перевод каретка" (CR) и "Перевод строки" (LF) с десятичными кодами 10 и 13. При этом тип Text не эквивалентен типу file of Char.
В языке Turbo Pascal можно использовать файл без типа, при объявлении которого не указывается тип компонент, например:
Var UnTyp: file;
Файловые переменные имеют специфическое применение. Над ними нельзя выполнять никаких операций. Их можно использовать лишь для выполнения операций с файлами.
Рассматриваемые до сих пор объекты программы обладали тем свойством, что память под них выделяется еще на этапе трансляции программы. Структуры данных такого типа называются статическими. Программы, содержащие статические структуры данных, обладают тем недостатком, что им требуются значительные ресурсы и оперативной, и внешней памяти.
В языке Turbo Pascal имеется возможность по ходу выполнения программы выделять и освобождать дополнительную память для размещения в ней данных. Таким образом организуются динамические структуры данных. Память ЭВМ при этом используется более эффективно, так как в среднем программе с динамическими структурами данных требуются меньшие объемы памяти.
Возможность создания динамических структур данных связана с наличием в языке Turbo Pascal особых типов данных – указателей. Указатель дает адрес объекта определенного типа, называемого базовым типом. Формат объявления указателя:
Type
<тип указателя>=^<идентификатор типа>;
Пример. Объявление переменной-указателя.
Type
Mas=array[1..100] of Real; {Базовый тип}
Point=^Mas; {Указатель на массив вещественных чисел}
Var
Vector=Point;