Пользовательские порядковые и составные типы. Процедуры и функции
Раздел описания типов
Синтаксис
TYPE
<Имя типа 1> = <Тип 1>;
∙ ∙ ∙
<Имя типа 2> = <Тип 2>;
<Имя типа N> = <Тип N>;
Раздел описания типов размещается в описательной части программы там же, где и разделы описания переменных и констант.
Интервальный тип
Синтаксис
<Начальное значение>..<Конечное значение>
Начальное и конечное значения могут быть любого порядкового типа. Переменные интервального типа могут принимать только значения, находящиеся в указанном интервале.
Пример
TYPE
Day_of_week = 1..7;
VAR
DOW:Day_of_week;
Letter:'A'..'Z';
∙ ∙ ∙
DOW:=8; { Ошибка }
Перечислимый тип
Синтаксис
(<Имя 1>, <Имя 2>, …, <Имя N>)
Всем именам из списка присваиваются значения задаваемого перечислимого типа. Переменные перечислимых типов далее могут принимать только значения из указанного списка.
Пример
TYPE
Color = (Red,Yellow,Green,Blue);
SubColor = Yellow..Blue;
VAR
C:Color;
Size:(Small,Middle,Big);
∙ ∙ ∙
DOW:=Green;
IF Size=Big THEN Writeln('Большой');
Как и для любого из порядковых типов, для перечислимых определенны функции Pred, Succ, Ord и т.д. Например, Pred(Yellow)=Red, Succ(Green)=Blue. Порядковые номера элементов перечислимых типов начинаются с 0, т.е. Ord(Small)=0, Ord(Middle)=1 и т.д.
Тип массив
Синтаксис
ARRAY [<Тип индекса>] OF <Тип элемента>
Тип индекса может быть любым порядковым типом. Тип массив описывает в памяти последовательность переменных указанного типа элемента.
Пример
TYPE
I100=ARRAY [1..100] OF Integer; { Массив из 100
целых чисел}
VAR
A:I100;
B:ARRAY [Char] OF (Letter,Digit);
C:ARRAY [1..10] OF ARRAY [1..20] OF Real;
В приведенном примере переменная C является двумерным массивом. Многомерные массивы можно описывать проще, перечисляя в квадратных скобках типы индексов через запятую.
Пример
VAR
C:ARRAY [1..10,1..20] OF Real;
Обращение к элементам массива
<Имя массива>[<Индекс 1>][<Индекс 2>]…[<Индекс N>]
или
<Имя массива>[<Индекс 1>,<Индекс 2>,…,<Индекс N>]
Пример
A[10]:=5;
FOR Ch:='A' TO 'Z' DO B[Ch]:=Letter;
FOR Ch:='0' TO '9' DO B[Ch]:=Digit;
C[2][3]:=C[2,4]-1;
Строковый тип
Синтаксис
STRING
или
STRING[<Максимальная длина>]
Описывает переменную, которая может содержать текстовую строку. Строковые значения в языке Паскаль записываются, как и символьные, в одиночных кавычках, но могут содержать не только один, но и несколько символов, или даже не содержать ни одного символа (пустые строки). К строковой переменной можно обращаться также как к массиву. При этом строка интерпретируется как массив символов (нумеруемый с 1).
Пример
VAR
S:STRING;
S20:STRING[20]; { Строка максимальной
длины 20 символов}
∙ ∙ ∙
S:='Иванов';
IF S[4]<>'н' THEN Writeln('Ошибка');
S20:=S+' ушел в отпуск';
Writeln(S20);
Процедуры и функции для работы со строками
Функция Length(S) возвращает длину (количество символов) строки S. Для пустой строки функция возвращает 0.
Пример
Length('Пример')=6, Length('')=0
Функция Copy(S,<Начало>,<Длина>) возвращает часть строки (подстроку) S указанной длины, начиная с позиции, задаваемой параметром <Начало>.
Пример
Copy('Пример',2,3)='рим', Copy('Пример',4,10)='мер'
Процедура Insert(S1,S2,<Позиция>) вставляет строку S1 в строку S2 в указанной позиции.
Пример
S:='Пер';
Insert('рим',S,2);
Результат выполнения
S='Пример'
Процедура Delete(S,<Начало>,<Длина>) – удаляет часть строки заданной длины из S, начиная с указанной позиции.
Пример
S:='Периметр';
Delete(S,3,4);
Результат выполнения
S='Петр'
Типизированные константы
Типизированные константы, как и обычные, описываются в разделе описания констант, но их описание несколько отличается.
Синтаксис
CONST
<Имя>:<Тип> = <Значение>;
Хотя типизированные константы и называются константами, на самом деле они работают как переменные, т.е. их значение можно изменять в программе, а также их нельзя использовать в выражениях-константах. Однако, в отличие от обычных переменных, при запуске программы типизированные константы уже имеют определенные значения. По способу выделения памяти эти значения являются глобальными, где бы они ни были описаны.
Процедуры и функции
Процедуры и функции позволяют логически разделить программу на более мелкие и понятные фрагменты, а также выделить в отдельные подпрограммы часто выполняющиеся действия. Описание процедур и функций находится в описательной части основной программы.
Синтаксис
Общий вид процедур и функций:
<Заголовок>
<Описательная часть>
BEGIN
<Исполнительная часть>
END;
Заголовок процедуры:
PROCEDURE <Имя>[(Формальные параметры>)];
Заголовок функции:
FUNCTION <Имя>[(Формальные параметры>)]:
<Тип результата>;
В списке формальных параметров находятся описания имен и типов параметров процедуры или функции, разделенные точками с запятой.
Синтаксис списка формальных параметров
[{VAR | CONST}] <Список имен 1>:<Тип 1>;
[{VAR | CONST}] <Список имен 2>:<Тип 2>;
. . .
[{VAR | CONST}] <Список имен N-1>:<Тип N-1>;
[{VAR | CONST}] <Список имен N>:<Тип N>
Тип результата указывает тип значения, возвращаемого функцией.
Пример
PROCEDURE PrintNumber(n:Real);
FUNCTION Sub(CONST S:STRING;St,En:Integer):STRING;
В описательной части процедур и функций, как и в описательной части основной программы, находятся описания переменных, констант, типов, меток, процедур и функций.
Исполнительная часть содержит последовательность операторов, разделенных точками с запятой. В исполнительной части функций для указания возвращаемого функцией значения применяться специальный оператор присваивания.
Синтаксис специального оператора присваивания
<Имя функции> := <Выражение>
Пример
FUNCTION Mul(A,B:Real):Real;
BEGIN
Mul:=A*B;
END;
В Delphi для возврата функциями значений в любой функции определена специальная переменная Result, которая имеет тип результата, указанный в заголовке функции. Присваивание этой переменной значения аналогично ранее рассмотренному специальному оператору присваивания.
Пример
FUNCTION Mul(A,B:Real):Real;
BEGIN
Result:=A*B;
END;
Переменную Result можно использовать и в любых выражениях, как любую обычную переменную. Так как специальная переменная
Result неявно описана в любой функции, нельзя описывать формальный параметр функции с именем Result, а также переменные, константы и любые другие описания с именем Result в описательной части функции.