Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Дополнительные процедуры и функции модуля Graph




END.

BEGIN

END.

BEGIN

End.

Begin

END.

BEGIN

END.

BEGIN

BEGIN

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

End.

Begin

End.

Begin

doo;re;mi;fa;sol;la;si;la;sol;fa;mi;re;doo

Теперь вам нужно собрать оба куска в единую программу. Для этого вы можете скопировать текст из файла вашего друга в свой файл (как это делается, расказано в части IV). Но если вы не хотите этого делать, чтобы, скажем, не увеличивать свой файл, вы можете воспользоваться директивой компилятора $I. Директива компилятора - это специальная инструкция, вставленная в текст вашей программы на Паскале и предназначенная для управления компьютером на этапе компиляции вашей программы. Директива компиляции имеет вид {$.... } и Паскаль не путает ее с обычным комментарием только из-за наличия значка доллара. Символы, стоящие после значка доллара, и являются управляющей информацией для компилятора. Директива {$I c:\PASC\F25 } является приказом компилятору подставить в это место текст, находящийся в файле F25 из каталога PASC диска c. Если файл находится в текущем каталоге, то достаточно указать его имя. Вот ваша готовая к работе программа с директивой:

USES CRT;

PROCEDURE doo; BEGIN Sound(523); Delay(300); NoSound END;

PROCEDURE re; BEGIN Sound(587); Delay(300); NoSound END;

PROCEDURE mi; BEGIN Sound(659); Delay(300); NoSound END;

 

{$I VSTAVKA} {Директива компилятору на вставку текста из файла VSTAVKA}

 

doo;re;mi;fa;sol;la;si;la;sol;fa;mi;re;doo

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

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

VAR step:Real;

i:Word;

step:=1;

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

st:=step

end;

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

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

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

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

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

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

 

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

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

 

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

FUNCTION st;

VAR step:Real;

i:Word;

step:=1;

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

st:=step

end;

 

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

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

USES Mathemat;

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

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

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

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

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

Когда вы в первый раз запустите на выполнение программу, вызывающую ваш новый модуль, этот модуль откомпилируется и сохранится на диске под именем 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; {Переменные для инициализации графики}

d:=0;

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

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

SetLineStyle(0,0,ThickWidth);

Rectangle(10,10,630,470);

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

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

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

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

USES Mygraph,Graph;

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

krest(200,150,80);

Circle(100,350,40);

ReadLn;

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

 

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

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

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

 

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

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

Функция Смысл
GetMaxX:Integer Выдает максимально возможную горизонтальную координату экрана
GetMaxY:Integer Выдает максимально возможную вертикальную координату экрана
GetPixel(x,y:Integer):Word Выдает номер цвета пиксела с координатами x и y.

А вот еще процедуры рисования:

Процедура Смысл
Arc(x,y:Integer; fi1,fi2,r:Word) Рисует дугу окружности с центром в точке x,y и радиусом r. Дуга начинается от угла fi1 градусов и кончается углом fi2 градусов.
PieSlice(x,y:Integer; fi1,fi2,r:Word) Закрашенный сектор круга. Дуга сектора определяется так же, как в процедуре Arc. Цвет и стиль заливки определяются процедурой SetFillStyle.
FillEllipse(x,y:Integer; rx,ry:Word) Закрашенный эллипс с центром в точке x,y и радиусами rx,ry. Цвет и стиль заливки определяются процедурой SetFillStyle.
Sector(x,y:Integer; fi1,fi2,rx,ry:Word) Закрашенный сектор эллипса. Опирается на дугу эллипса с центром в точке x,y и радиусами rx,ry. Дуга начинается от угла fi1 градусов и кончается углом fi2 градусов.
Bar(x1,y1, x2,y2:Integer) Закрашенный прямоугольник с противоположными углами в точках (x1,y1) и (x2,y2)
Bar3D(x1,y1, x2,y2:Integer; tol:Word; top:Boolean) Трехмерный параллелепипед, обращенный к нам прямоугольной гранью с противоположными углами в точках (x1,y1) и (x2,y2). Толщина параллелепипеда – tol. Если top равно TopOff, то параллелепипед – без верха, если top равно TopOn, то – с верхом.



Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 508; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.019 сек.