Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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: 373; Нарушение авторских прав |