Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АЯП лекции.doc
Скачиваний:
16
Добавлен:
03.12.2018
Размер:
634.37 Кб
Скачать

Циклические ссылки модулей друг на друга.

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

Пример. Вычислить y=n! + x^n; для решения задачи создать модуль, в который разместить функцию вычисления факториала и положительной степени.

В отдельном файле создаем модуль (отдельное окно интегрированной среды).

unit mymod;

interface

var x:real;

n:integer;

function fact (n:integer):integer;

function step (x:real;n:integer):

implementation real;

function fact (n:integer):integer;

begin

if n=0 then fact:=1

else fact:=n*fact(n-1);end;

function step (x:real;n:integer):real;

begin

if n=0 then step:=1

else step:=x*step(x,n-1);

end;end;

В отдельном файле формируем программу:

uses mymod;

var y:real;

begin writeln(‘Введите x и n’);

read(x,n);

y:=fact(n)+step(x,n);

writeln(y:0:2);

end.

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

Стандартные модули в Паскале.

Когда создаются стандартные модули, то соблюдаются следующие правила: подпрограммы, входящие в модули, группируются по функциональному признаку, но вместе с тем модули не должны быть слишком большими. В интегрированных и визуальных средах программированные модули объединяются в библиотеки. В интегрированной среде Паскаль библиотека располагается в файле turbo. Единственный модуль, не входящий в библиотеку – GRAPH.TPU. Модули в библиотеке: system. Он подключается автоматически. Подпрограммы, собранные в нем, определяют в целом работу программы. Он включает операторы ввода-вывода в текстовом режиме. Crt: объединяет подпрограммы, которые отвечают за работу программы с экраном в текстовом режиме и управляет зуммером. В текстовом режиме единицей подпрограммной сетки является символ (8*8 pxl), следовательно, левая верхняя координата – (1*1). В текстовом режиме – 80 символов в 25 строках.

Основные подпрограммы модуля crt:

  1. очистка экрана CLRSCR;

  2. GOTOXY(x,y);

  3. READKEY (чтение информации без отображения на экране);

  4. KEYPRESSED (логическая функция, становится истиной, если нажата любая клавиша).

Функции управления зуммером:

  1. sound(f) (f – целое число типа word.nosound);

  2. delay(t) (t в мс);

Существует несколько специализаций модулей: windos, mouse.

PRINT содержит подпрограмму обеспечения перенаправления информации на принтер. Он замечателен тем, что он единственный из стандартных модулей содержит раздел инициализации. В данном разделе файловая переменная связана с текстовым файлом LST. Данная переменная связывается со специальным текстовым файлом опережающей системы, чтобы через него программа могла связаться с принтером.

GRAPH определяет необходимый набор const и переменных, а также подпрограмм, обеспечивающих работу программы в графическом режиме. Для работы программы в графическом режиме его необходимо инициализировать. Используется процедура INITGRAPH (d,m,st). d – значение, которое определяет вид драйвера. Данный параметр должен быть определен до вызова программы. m – режим работы. st – путь к драйверу.