Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






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





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

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 или какие-нибудь другие.

Date: 2015-09-17; view: 342; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию