Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Все вопросы..docx
Скачиваний:
11
Добавлен:
25.09.2019
Размер:
158.31 Кб
Скачать

11.Опережающее описание процедур

P Q

P Q

W

В цепочку процедуры могут быть связаны сколько угодно подпрограмм. Но суть всегда одна - сначала разворачивается стек, затем сворачивается.

Должен стоять хотя бы один условный оператор.

Не понятно, что идет раньше, а что потом, для этого и используется опережающее описание подпрограмм, которое заключается в описании подпрограммы только полным заголовком.

Пример для двух:

Function p(x:byte):real;

Forward;{Говорит о том что тело будет ниже}

Function Q:real;

Begin{Q}

If …… p(5);

End;{Q}

Function p; {Сокращенный заголовок}

Begin{P}

If …… Q(a);

End;{P}

Пример для трех:

Function P (x:byte):real;

Forward;

Procedure W (a,b:byte; var c:real);

Forward;

Function Q(x:byte):real;

Begin

If ……

L:=P(5);

End;{Q}

Function P;{Сокращенный заголовок }

Begin

If ……then w(a,b,c);

Else…..

End;{P}

Procedure W;

Begin

If….Q(3)

End;{W}

…далее основная программа.

Таким образом, транслятор знает, сколько нужно отвести места.

12.Параметры процедурного типа:

Иногда требуется настроить подпрограмму на выполнение разных процедур. Предположим нам нужно вычислить интеграл приближенным методом, в теле основной программы есть функция integral(fan,a,b)

Fan-вид функции a,b-начальное и конечное значение отрезка на котором рассматривается функция.

(рисунок рисуем отрезок от А до Б и делим его на части, образуя домики, штрихуем 1 домик).

Type T=function (x:real):real;

Var a,b:real;

{$F+}

Function Q(x:real):real;

Begin{Q}

Q:=x+sin(x);

End;{Q}

{$F-}

{$F+}

Function P(x:real):real;

Begin

P:=x-cos(x);

End;{P}

{$F-}

Function integral (a,b:real;fun:T):real;

…тело подпрограммы где сумма площадей …

-Функция процедурного типа всегда транслируется в опциях.

-Функция не может быть объявлена в других процедурах и функциях

-Функция не может быть стандартной, но это можно обойти записав например 0.0+sin(x);

-Внутри процедур и функций нельзя использовать директивы inline, interrupt.

13.Внешние модули, реализованные на других языках программирования. Структура основной программы, вызывающей процедуру. Присоединение текстового файла.

Модуль – это единица компиляции, содержащая одну или несколько подпрограмм. Преимущества использования внешних модулей:

·Ускорение отладки

·Использование общей библиотеки

·Позволяет работать с программами, превышающими ресурсы памяти.

Присоединяемые модуле могут быть написаны как на Паскале и иметь расширения *.pas и *.tpu (turbo pascal unit), так и на других языках программирования.

Подсоединение модулей на других языках программирования

Структура основной программы с внешним модулем

Program OSN;

поля описаний

Procedure LIN_UR (список параметров);

EXTERNAL; {внешний}

Begin {основная программа}

LIN_UR;

End. {основная программа}

Как правило, используются внешний модули, написанные на Фортране или Ассемблере. Подсоединение идет на этапе компоновки (линковки).

При подсоединении возникают следующие сложности:

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

Подсоединение подпрограмм, написанных на других языках программирования, дает возможность программисту пользоваться большой библиотекой и делать программы значительно более эффективные по времени (например, программы на Фортране в 5 раз более эффективны по времени, чем на Паскале, а программы в машинных кодах в 8 раз)

Подсоединяя модули, написанные на Фортране, следует помнить:

·Двумерные массивы в Паскале хранятся по строкам, а в Фортране по столбцам. Соответственно для массива с М строками и N столбцами на Паскале j+N*(i-1), а на Фортране i+M*(j-1).

В Фортране следует поменять типы индексов при описании массива (строки на столбцы и наоборот). Если же массив трехмерный, то заменить следует строки и плоскости.

·В модулях на Фортране должна быть исключена печать элементов, поскольку там вывод состоит из двух операторов: исполняемого и неисполняемого, но Паскаль не понимает указаний к исполнительной системе Фортрана.

Включение тестового файла (*.pas) в текст программы.

В Turbo Pascal используется опция {$I имя файла} (имя файла без апострофов, I сокращенно от include). Эта опция позволяет подсоединить файл с расширением pas в то место программы, где находится эта опция. Чаще всего используются для подсоединения процедур и функций. Глубина вложения include не более 7!

Данная директива не запрещает использование, как tpu-модулей, так и модулей на других языках программирования. Это делает работу программиста более гибкой, но вместе с тем не позволяет экономить память. Всю ответственность за согласование параметров при этом несет транслятор (т.е. подсоединение идет на этапе трансляции).