1 Модули Лекция 4 План 1. Общая характеристика модулей. 2. Модуль CRT и GRAPH 3. Нестандартные модули. Составление программ с использованием модулей Лектор: профессор, д.т.н. Иванчина Эмилия Дмитриевна
2 1. Общая характеристика модулей Модуль - это программная единица, включающая в себя различные компоненты раздела описаний (типы, константы, переменные, процедуры и функции) и исполняемые операторы. Наличие модулей в программе позволяет решать сложную задачу по частям, создавать библиотеки подпрограмм, пользоваться возможностями стандартных модулей. Модуль содержит описания констант и переменных, а также подпрограммы, которые используются в расчетах. Подпрограмму имеет смысл включать в состав модуля в том случае, если она реализует действия, которые повторяются. Подпрограммы, входящие в модуль, можно написать один раз, а использовать многократно.
3 Доступ к описаниям, функциям и процедурам модуля обеспечивает оператор использования Uses, в котором указывается имя модуля. Этот оператор размещается в разделе описаний главной программы сразу после заголовка. Если в главной программе используется не один модуль, а несколько, то необходимо указать имена всех модулей, перечислив их через запятую. Модуль начинается заголовком unit _name; где name – имя модуля, которое выбирается в соответствии с общими правилами. Файл, содержащий модуль, обязан иметь то же имя, что и модуль.
4 Каждый модуль начинается с зарезервированного слова unit и заканчивается словом end, за котором следует точка. Для этого end не требуется соответствующего слова begin, хотя можно и поставить его непосредственно перед end. Interface Интерфейсная секция описание заголовков процедур и функций Implementation Секция реализации содержит обращение к процедурам и функциям Секция инициализации содержит обращение к модулю.
5 2. Модуль CRT и GRAPH TextColor(Color:n) - устанавливает цвет n выводимых на экран символов.TextBackGround(Color:m) - устанавливает цвет фона m, т.е. цвет области, которая окружает отображаемый на экране символ. ClrScr - очищает активное окно и устанавливает курсор в верхний левый угол экрана. GotoXY(x,y:byte) - перемещает курсор в позицию с координатами X,Y экрана. WhereX - возвращает X-координату текущей позиции курсора. WhereY - возвращает Y-координату текущей позиции курсора.
6 Пример 1. Массив X(N) напечатать на экране, выделить элементы цветом, превышающие по значению величину К. PROGRAM P1; USES Crt; VAR x:array[1..20] of real; i, N, M:integer; K:real; BEGIN readln(N,M,K); FOR i:=1 TO N DO readln(x[i]); ClrScr; FOR i:=1 TO N DO IF x[i]>K THEN BEGIN TextColor(14);TextBackGround(4); END ELSE BEGIN TextColor(15);TextBackGround(1); END; write(x[i]:6:4);END; END.
7 Модуль Graph позволяет работать с экраном в графическом режиме В этом режиме любое изображение на экране синтезируется из мельчайших элементов, называемых пикселями. Каждый пиксель представляет собой светящуюся точку таких размеров, при которых промежутки между отдельными пикселями отсутствуют. Если группа смежных пикселей светится, то они воспринимаются не как совокупность отдельных точек, а как сплошной участок. В графическом режиме экран разделяется прямоугольной сеткой, каждый элемент которой имеет свои координаты. Левый верхний угол экрана имеет координаты (0,0). Значение левой координаты (X) увеличивается в горизонтальном направлении слева направо. Значение правой координаты (Y) увеличивается в вертикальном направлении сверху вниз.
8 Установка цвета линий осуществляется процедурой SetColor(Color:integer). Пример 2. USES Graph; VAR Gd,Gm:integer; BEGIN Gd:=Detect; InitGraph(Gd,Gm,'d:\bp\bgi'); rectangle(100,50,200,100); line(100,50,200,100); line(100,100,200,50); ellipse(150,75,0,360,50,25); readln; CloseGraph; END.
9 Графический режим инициализируется с помощью стандартной процедуры InitGraph. При этом переменным Gd и Gm необходимо указать значение Detect, описанной в модуле Graph для автоматического распознавания типа адаптера. Третий параметр процедуры InitGraph - путь до файла с загрузочным модулем драйвера bgi. Если путь отсутствует, то поиск этого файла будет осуществляться в текущей директории. Для выхода из графического режима используется стандартная процедура CloseGraph. Эта процедура восстанавливает режим, существовавший до инициализации графики.
10 Для создания графических изображений модуль Graph предоставляет широкий набор процедур и функций. Рассмотрим точки и линии. 1. PutPixel(X,Y:integer;Color:word) - ставит на экране точку с координатами (X,Y) цвета Color. 2. Line(X1,Y1,X2,Y2:integer) - выводит на экран линию, соединяющую точки с координатами (X1,Y1) и (X2,Y2). 3. Rectangle(X1,Y1,X2,Y2:integer) - выводит на экран изображение прямоугольника с координатами диагонали (X1,Y1) и (X2,Y2). 4. Circle(X,Y:integer;Radius) - выводит на экран изображение окружности с координатами центра (X,Y) и радиусом (Radius).
11 3. Нестандартные модули Заголовок модуля состоит из зарезервированного слова unit и имени модуля. Имя модуля должно быть единственным. Модуль должен быть помещен в файл, имя которого совпадает с именем модуля, а его расширение -.pas. Пример заголовка: UNIT mod; Имя модуля не может состоять более чем из восьми символов.
12 Интерфейсная часть начинается словом interface. Через интерфейс осуществляется взаимодействие основной программы с модулем (модуля с модулем). В интерфейсе указываются константы, типы, переменные, процедуры и функции, которые могут быть использованы основной программой (модулем) при вызове этого модуля. В разделе объявления процедур и функций указываются лишь заголовки подпрограмм. Сами подпрограммы приводятся в исполнительной части.
13 Пример 3. Составить модуль для пересчета весовых долей парафиновых Углеводородов СnH2n+2 по формуле m.d.i =( v.d.i/Mi)/Сумма(v.d.i/Mi) и средний молекулярный вес углеводородов МS. i=1,..,6 M i =12*i+2*i+2
14 unit Mol; имя модуля Interface интерфейсная часть Type mas=array[1..6] of real; тип массива Function MS(var m:mas):real; заголовок функций Procedure MolDol(var Md,Mv:mas); заголовок процедур Var Md,Mv,M:mas; i:integer;
15 Implementation описание действий функции Function MS(var m:mas):real; var i:integer; S:real; Begin MS:=0; For i:=1 to 6 do M[i]:=12*i+2*(i+2); For i:=1 to 6 do S:=S+M[i]; MS:=S/6; end;
16 Procedure MolDol(var Md,Mv:mas); var i:integer; S:real; begin S:=0; For i:=1 to 6 do S:=S+Mv[i]/(12*i+2*(i+2)); For i:=1 to 6 do Md[i]:=(Mv[i]/(12*i+2*(i+2)))/S; end;end.
17 Program MM; Инициализация uses Mol; используем модуль Var i:integer; Begin For i:=1 to 6 do readln(Mv[i]); moldol(Md,Mv); обращение к процедуре For i:=1 to 6 do writeln(Md[i]); writeln(ms(m)); обращение к функции end.