Процедуры и функции модуля GRAPH
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

Процедуры для работы с геометрическими объектами

Процедура PutPixel(x,y:integer;Pixel:word);

Высвечивание на экране точки с координатами (x, y) и цветом Pixel.

 

ПроцедураLineTo(x,y:integer);

Проведение прямой из точки с текущими координатами в точку (x, y) текущим цветом.

 

ПроцедураLineRel(dx,dy:integer);

Проведение прямой из точки с текущими координатами в точку с приращением координат от текущих на dx, dy текущим цветом. Текущими становятся координаты полученной точки.

 

ПроцедураLine ( x 1, y 1, x 2, y 2: integer );

Проведение прямой из точки (x1, y1) в точку (x2, y2) текущим цветом.

 

ПроцедураRectangle(x1,y1,x2,y2:integer);

Изображение прямоугольника с координатами диагонали (x1, y1) и (x2, y2).

 

ПроцедураCircle(x,y:integer;Radius:word);

Проведение окружности с центром в точке (x, y) и радиусом Radius.

 

ПроцедураArc(x,y:integer;AL1,AL2,Radius:word);

Создание дуги окружности с центром в точке (x, y) радиусом Radius, начальным углом AL1 и конечным углом AL2. Углы измеряются в градусах и от оси абсцисс против часовой стрелки.


 

ПроцедураEllipse(x,y:integer;AL1,AL2,XRad,YRad:word);

Изображение эллипса или дуги эллипса с центром в точке (x, y), с полуосями XRad, Yrad, начальным AL1 и конечным AL2 углами.

 

ПроцедураSetLineStyle(LineStule,Pattern,Thick:word);

Задание способа рисования линии.

LineStule – тип линии, может принимать значения:

0 – сплошная;

1 – точечная;

2 – прерывистая, штрихпунктирная;

3 – прерывистая, штриховая.

Pattern - параметр используется только при пользовательском типе линии (если LineStule = 4), во всех остальных случаях он игнорируется.

Thick - определяет толщину линий и может принимать два значения: 1 (нормальная) и 3 (утолщенная).

 

Процедуры задания цвета и заливки области

 

ПроцедураSetColor ( Color : word );

Установка цвета выводимого графического объекта. Параметр Color задает цвет рисунка в соответствии с описанной ранее таблицей 10.1 цветов (кроме мерцания).

 

ПроцедураSetBkColor ( Color : word );

Установка цвета фона.

 

ПроцедураSetFillStyle(Pattern:word;Color:word);

Подготовка (установка параметров) к заливке. Pattern – параметр, определяющий способ заливки, может принимать значения от 1 до 11.

Некоторые значения:

0 - заливка цветом фона;

1 - сплошная заливка;

2 - штриховка горизонтальными линиями;

3 - штриховка наклонными линиями;

10 – штриховка точками.

 

ПроцедураFloodFill(x,y:integer;Border:word);

Заливка замкнутой области. x, y – точка, из которой начинается заливка, Border – параметр, задающий цвет границы области, в которой производится заливка. Если внутри области закраски есть точки с цветом, отличным от Border, то они закрашиваются.

 




Процедуры работы с текстом

 

ПроцедураOutText ( TextString : string );

Вывод на экран строки, начиная с текущей позиции светового пера.

 

ПроцедураOutTextXY(x,y:integer;TextString:string);

Выдача на экран строки текста, начиная с точки, имеющей координаты x , y.

 

ПроцедураSetTextJustify(horiz,vert:word);

Горизонтальная и вертикальная привязка выводимого текста относительно текущего положения светового пера. Параметр horiz может принимать значения: 0 – левое выравнивание; 1 – центрирование; 2 – правое выравнивание. Параметр vert может принимать значения: 0 – нижнее выравнивание; 1 – центрирование; 2 – верхнее выравнивание.

 

 

Примеры использования модуля GRAPH

 

Задача 11.1. Нарисовать дом (рисунок 11.2).

В программе приняты следующие обозначения:

x n, y n - координаты левого нижнего угла дома;

l       - ширина дома;

ras   - расстояние от дома до дерева;

l 0, h 0 - ширина и высота окон;

2a    - расстояние между окнами;

ld     - ширина ствола дерева;

h 1, h 2 - высота первого этажа дома и крыши;

P      - расстояние от пола до окна;

hd    - высота ствола дерева;

h k    - расстояние от земли до центра кроны;

 

rdx, rdy – полуоси эллипса, изображающего крону.

Рисунок 11.2 – Схема дома


Программа решения задачи показана на рисунке 11.3.

 

Program Example_21;

uses GRAPH;

Const xn=150; yn=300; l=120; ras=100; lo=40; a=10; ld=10;

ho=60; h1=100; h2=50; p=25; hd=67; hk=120; rdx=25; rdy=55;

var gd,gm,x,y,x1,y1,x2,y2 : integer;

begin

gd:=detect;             { автовыбор адаптера }

initgraph(gd,gm,' ');   { инициализация графического режима }

SetColor(6);            { установка коричневого цвета }

Rectangle(xn,yn,xn+l,yn-h1); { рисование первого этажа }

x:=xn+l div 2 -a; y:=yn-p;

x1:=x-lo; y1:=y-ho;

Rectangle(x,y,x1,y1);   { левое окно }

x2:=x-lo div 2; y2:=y-ho div 2;

line(x,y2,x2,y);        { ромбик в левом окне }

line(x2,y,x1,y2);

line(x1,y2,x2,y1);

line(x2,y1,x,y2);

x:=x+2*a; x1:=x+lo;

Rectangle(x,y,x1,y1);   { правое окно }

x2:=x+lo div 2;

line(x,y2,x2,y);        { ромбик в правом окне }

line(x2,y,x1,y2);

line(x1,y2,x2,y1);

line(x2,y1,x,y2);

x:=xn+ l div 2; y:=yn-h1;

Ellipse(x,y,0,180,l div 2,h2); { крыша }

y:=y-h2 div 2;

Ellipse(x,y,0,360,15,20);    { окно на чердаке }

Line(x-15,y,x+15,y);       { рама в окне на чердаке }

Line(x,y-20,x,y+20);

x:=xn+l+ras; y:=yn;

Rectangle(x,y,x+ld,y-hd);  { ствол дерева }

x1:=x+ld div 2; y1:=y-hk;

Ellipse(x1,y1,0,255,rdx,rdy); { крона дерева }

Ellipse(x1,y1,285,360,rdx,rdy);

SetFillStyle(10,2);        { закраска кроны }

FloodFill(x1,y1,6);

SetFillStyle(1,6);         { закраска ствола}

FloodFill(x1,y1+rdy,6);

Line(xn-20,yn,xn+l+ras+ld+20,yn); { основание - земля }

readln;                    { фиксация изображения }

CloseGraph                 { закрытие графического режима}

end.

 

Рисунок 11.3 – Программа Example_21

 

Задача 11.2. Построить спираль вокруг точки с координатами (x c, y c), число витков – 20, начальное направление спирали образует с осью абсцисс угол a.

Параметрическое уравнение спирали:

x = R × cos t

y = R × sin t

R = t

a £ t £ 2 p n

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

В качестве двух рядом расположенных точек выберем такие точки, для которых значение параметра t отличается на 1°.

Первоначально луч на экране устанавливаем в точку с координатами (x c, yc).

В программе, представленной на рисунке 11.4, приняты следующие обозначения:

x c, yc – координаты центра экрана;

n    - количество витков спирали;

t     - параметр уравнения, описывающего спираль;

R   - радиус спирали;

x, y - координаты текущей точки.

При написании программы следует учитывать, что координаты экрана выражаются целыми величинами.

 

Program Example_22;

uses GRAPH;

Const xc=320; yc=200; n=20; { координаты центра и количество витков }

var gradus,t,r :real;

k,gd,gm,i,x,y : integer;

begin gradus:=pi/180;         { 1 градус в радианах }

t:=pi/4;                { начальный угол - 45 градусов }

gd:=detect;             { автовыбор адаптера }

initgraph(gd,gm,' ');   { инициализация графического режима }

MoveTo(xc,yc);          { установка луча в центр экрана }

for i:=1 to n do begin  { цикл по виткам спирали }

    for k:=1 to 360 do begin { построение 1-го оборота спирали }

       t:=t+gradus;

       r:=t*1;

       x:=round(r*cos(t))+xc;

       y:=round(r*sin(t))+yc;

       LineTo(x,y)

    end

end;

readln;                 { фиксация изображения }

CloseGraph                { закрытие графического режима}

end.

 

Рисунок 11.4 – Программа Example_22

 



МОДУЛИ

Модуль – это автономно компилируемая программная единица, включающая в себя различные компоненты раздела описаний (типы, константы, переменные, функции и процедуры) и, возможно, некоторые исполняемые операторы. Наличие модулей в ТУРБО ПАСКАЛЕ позволяет программировать и отлаживать программу по частям, создавать библиотеки подпрограмм и данных, воспользоваться возможностями стандартных модулей, практически неограниченно увеличивать кодовую (содержащую коды команд) часть программы.

Структура модуля показана на рисунке 12.1.

 

UNIT   <имя_модуля>;

INTERFACE

<интерфейсная часть>;

IMPLEMENTATION

<исполняемая часть>;

BEGIN

<секция инициализации>

END.

 

Рисунок 12.1 – Структура модуля

 

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

Интерфейсная часть содержит объявления всех глобальных объектов (типов, констант, переменных и подпрограмм), которые должны стать доступными в основной программе, в данном модулеи/или в других модулях. При объявлении глобальных подпрограмм в интерфейсной части указывается только их заголовок, например:

Unit MyModule;

Interface

type Mas=array[1..20] of real;

var Ier:integer;

Procedure Sum(x:Mas; n:integer; Var S:real);

При такой интерфейсной части в основной программе, использующей модуль MyModule, и в самом модуле станут доступны тип Mas, переменная Ier и процедура Sum.

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


Описанию подпрограммы, объявленной в интерфейсной части модуля, в исполняемой части должен предшествовать заголовок, как, например, это показано на рисунке 12.2.

 

 

Unit MyModule;

Interface

type Mas=array[1..20] of real;

var Ier : integer;

Procedure Sum(x :Mas; N :integer; Var S :real);

Implementation

Procedure Sum(x :Mas; N :integer; Var S :real);

     Var i :integer;

     Begin

           S :=0;

           For i :=1 to N do S :=S+X[i]

     end;

end.

 

 

Рисунок 12.2 – Пример модуля

 

Секция инициализации завершает модуль. Она может отсутствовать вместе с начинающим её словом BEGIN или быть пустой – тогда за BEGIN сразу следует END.

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

 

Задача. Вычислить . Для вычисления интеграла использовать метод левых прямоугольников. Подпрограмму, реализующую метод, записать в модуль.

Для вычисления интеграла методом левых прямоугольников отрезок интегрирования делится на n равных частей длиной h и используется формула:

.

 

На рисунке 12.3 представлена программа Example_22, а на рисунке 12.4 текст модуля, к которому обращается программа.


 

Program Example_23;

uses Studious;

var n : integer;

s,a,b : real;

Function f1(x:real):real;

begin

f1:=sin(x)

end;

Function f2(x:real):real;

begin

f2:=x*x+1

end;

Begin

write('Введите N '); Read(n);

write('Введите A,B '); Read(a,b);

S:=Integral(a,b,n,f1)+Integral(a,b,n,f2); 

write('S=',s:6:3)

end.

 

Рисунок 12.3 – Программа Example_23

 

Unit Studious;

Interface

uses CRT;

Type fun=function(x:real):real;

Function Integral(a,b:real;n:integer;f:fun):real;

Implementation

Function Integral(a,b:real;n:integer;f:fun):real;

var s,h:real;

i:integer;

begin

h:=(b-a)/n;

s:=0;

for i:=1 to n-1 do s:=s+f(a+i*h)*h;

integral:=s

end;

begin

clrscr;

Writeln('Работает модуль студента Сидорова')

end.

Рисунок 12.4 – Текст модуля Studious

 

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





Дата: 2019-03-05, просмотров: 193.