Модули программиста

  • docx
  • 06.05.2020
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

0.1. Модули программиста
Иконка файла материала 101.docx

0.1. Модули программиста

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

FUNCTION st(a:Real;  n:Word) :Real;

     VAR    step    :Real;

              i           :Word;

     BEGIN

          step:=1;

          for i:=1 to n do step:=step*a;

          st:=step

     end;

BEGIN

     WriteLn(st(2,3))      {Это 2 в кубе, то есть 8}

END.

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

·     Описать st и другие часто встречающиеся процедуры и функции в другом файле и использовать директиву $I.

·     Описать st и другие часто встречающиеся процедуры и функции в другом файле и оформить этот файл, как новый модуль.

Второй способ немного сложнее, но намного лучше первого. Вот как будет выглядеть ваш модуль:

UNIT Mathemat;         {Заголовок модуля с придуманным вами именем}

 

INTERFACE              {Раздел ИНТЕРФЕЙСА}

FUNCTION st(a:Real; n:Word) :Real;

 

IMPLEMENTATION    {Раздел РЕАЛИЗАЦИИ}

FUNCTION st;

          VAR   step   :Real;

                   i         :Word;

          BEGIN

              step:=1;

              for i:=1 to n do step:=step*a;

              st:=step

          end;

 

BEGIN                       {Раздел ИНИЦИАЛИЗАЦИИ, у нас он пуст}

END.

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

USES Mathemat;

Begin

     WriteLn(st(10,6)  :20:4);         {Это 10 в шестой степени}

     WriteLn(st(5, 3)  :20:4);         {Это 5 в кубе}

End.

Файл-модуль на первых порах сохраняйте в том же каталоге, что и файл вызывающей его программы.

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

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

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

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

UNIT Mygraph;

 

INTERFACE                                 {Раздел ИНТЕРФЕЙСА}

PROCEDURE krest(x_tsentr,  y_tsentr,  razmer:Word);

                                                    {Задаются координаты центра и размер креста}

PROCEDURE treug(x1, y1, x2, y2, x3, y3 :Word);

                                                    {Задаются координаты трех вершин треугольника}

 

IMPLEMENTATION                       {Раздел РЕАЛИЗАЦИИ}

USES Graph;                                {Без этого не будет работать процедура Line}

PROCEDURE krest;   BEGIN

          Line(x_tsentr-razmer,  y_tsentr,  x_tsentr+razmer,  y_tsentr);

          Line(x_tsentr,  y_tsentr-razmer,  x_tsentr,  y_tsentr+razmer);

                                 END;

PROCEDURE treug;  BEGIN

          Line(x1,y1,x2,y2);

          Line(x2,y2,x3,y3);

          Line(x3,y3,x1,y1);

                                 END;

                                                    {Раздел ИНИЦИАЛИЗАЦИИ}

VAR d,m :Integer;                          {Переменные для инициализации графики}

BEGIN                                         

     d:=0;

     InitGraph(d,m,'<путь к гр.др>');{Инициализация графики}

     SetColor(Yellow);                     {Рисуем рамочку}

     SetLineStyle(0,0,ThickWidth);

     Rectangle(10,10,630,470);

     SetColor(White);                       {Возвращаем нормальный цвет}

     SetLineStyle(0,0,NormWidth)    {Возвращаем нормальную толщину линии}

END.

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

Вот программа, чертящая крест, треугольник и кружок:

USES Mygraph,Graph;

BEGIN

     treug(500,50,600,300,450,450);

     krest(200,150,80);

     Circle(100,350,40);

     ReadLn;

END.

Обращение здесь к модулю Graph понадобилось только из-за желания нарисовать кружок.

 

Использование модулей лучше использования директивы $I хотя бы по двум причинам:

·         Модуль уже откомпилирован и не требует каждый раз компиляции.

·         Объем программы без модулей не может превышать 64К. Каждый модуль может вмещать в себя дополнительные 64К.

 

Задание 129: Если хотите, создайте себе модули Music, Graphica или какие-нибудь другие.


 

Скачано с www.znanio.ru