Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Чернов Шафеева.doc
Скачиваний:
47
Добавлен:
21.05.2015
Размер:
1.39 Mб
Скачать

2.7.6. Передача в подпрограмму параметров-массивов и параметров-строк

Передача одиночных элементов массивов в подпрограмму не отличает­ся от передачи переменных. При передаче всего массива необходимо пред­варительно определить его тип, поскольку он не является стандартным.

Пример: TYPE ATYPE=ARRAY[1..10] OF REAL;

PROCEDURE R(A: ATYPE);

Такое описание необходимо в связи с тем, что в списке формальных пара­метров могут использоваться только стандартные или ранее описанные ти­пы.

Поэтому нельзя, например, объявить следующую процедуру:

PROCEDURE R(A: ARRAY[1..10] OF REAL);

Поскольку строка является фактически массивом символов, ее пере­дача в подпрограмму осуществляется аналогичным образом.

Пример описания и передачи строковых переменных:

TYPE INTYPE = STRING[10];

ONTYPE = STRING[30];

FUNCTION R(A: INTYPE): ONTYPE;

2.7.7. Рекурсия

Рекурсия  это способ организации вычислительного процесса, при котором подпрограмма в ходе выполнения своих операторов обращается сама к себе.

Пример. Пусть задано целое положительное число, вывести на экран дисплея цифры в обратном порядке.

PROGRAM REKURS;

VAR

N: INTEGER;

PROCEDURE REVERS(M:INTEGER);

BEGIN

WRITE(M MOD 10);

IF (M DIV 10)<>0 THEN REVERS(M DIV 10);

END;

BEGIN

READ(N);

REVERS(N);

END.

В ходе выполнения программы процедура рекурсивно обращается сама к себе и выводит на экран при каждом обращении очередную цифру.

Рекурсия может быть прямой или косвенной. В первом случае модуль подпрограммы содержит оператор вызова этой же подпрограммы. Во втором случае один модуль (например: А) вызывается из другого модуля (напри­мер: В), а модуль В – из А. Поскольку по правилам языка каждый иденти­фикатор перед объявлением должен быть описан, то необходимо выполнить опережающее описание подпрограммы В. Для этого объявляется заголовок процедуры В, за которым следует служебные слово FORWARD. Теперь из процедуры А можно обращаться к процедуре В. Например:

PROCEDURE B(I:BYTE); FORWARD;

PROCEDURE A(J:BYTE);

BEGIN

...

B(J);

END;

PROCEDURE B; {параметры опущены}

BEGIN

...

A(I);

END.

Формальные параметры при повторной записи заголовка опускаются.

2.8. Типы в Турбо Паскале

Любые данные (константы, переменные, значения функций или выраже­ний) характеризуются своими типами. Тип определяет множество значений, которые может иметь тот или иной объект, операции, применимые к нему, а также формат внутреннего представления.

Турбо Паскаль является языком с развитой системой типизации. Лю­бые данные до их использования должны быть предварительно объявлены.

Типы в Турбо Паскале делятся на простые, стрктурированные, проце­дурные, указатели и строки. В свою очередь простые типы включают по­рядковые и вещественные данные, а структурированные делятся на массивы, записи, множества и файлы.

Порядковые типы как стандартные, так и введенные программистом отлича- ются тем, что каждый из них содержит конечное число возможных значений. Эти значения можно определенным образом упорядочить или пе­ренумеровать. Для таких типов для каждой пары элементов можно всегда определить, какой из них предшествует другому. Для порядковых типов оп­ределены следующие три функции:

ORD(X)  возвращает порядковый номер значения выражения X;

PRED(X)  возвращает значение, предшествующее х в его типе, т.е.

ORD(PRED(X)) = ORD(X) - 1;

SUCC(X)  определяет следующее по порядку за X значение:

ORD(SUCC(X)) = ORD(X) + 1.

К вещественным типам указанные функции применить нельзя, количес­тво возможных значений вещественных типов настолько велико, что сопос­тавить с каждым из них число (его номер) невозможно.