Пользовательские порядковые и составные типы. Процедуры и функции

Раздел описания типов

 Синтаксис

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 в описательной части функции.

Наши рекомендации