
- •Лекція №13. Модулі.
- •Interface
- •Vvod(X,3,3);
- •Vvod(y,3,3);
- •Vivod(z,3,3);
- •7.2. Стандартні модулі.
- •Var X,y,z:integer;
- •Var X,y:integer;
- •Var index, smeh, kolstrok, dlstroki, pam: word;
- •Var I,k:integer;
- •X,y:real;
- •Var n,X,x1,y,y1,x2,y2,z,q,g,V,g1,v1,g2,v2:integer;
- •I,j,k:byte;
- •Var r:string;
- •InitGraph(GraphDriver,GraphMode,PathToDriver);
- •Interface
- •Implementation
- •Var r:string;
X,y:real;
begin
gd:=detect;
initgraph(gd,gm,'c:\tp\bgi');
if graphresult<>grok then halt(1);
{побудова осів x та y}
line(320,480,320,0);
line(0,240,640,240);
{побудова ліній масштабу}
for i:=1 to 640 do line(i+(i*19),239,i+(i*19),241);
for i:=1 to 480 do line(321,i+(i*19),319,i+(i*19));
{Побудова графіку функції для значень x[-5,5]}
for i:=-50 to 50 do
begin
x:=0.1*i;
y:=0.5*x*x-2;
putpixel(round(320+20*x),round(240-20*y),14);
end;
readln;
closegraph;
end.
Звичний для нас оператор WRITE в графічному режимі не працює. Тому існують спеціальні процедури:
Таблиця 7.10. Процедури роботи з текстом.
OutText(s:snhing) |
Виведення послідовності символів |
OutTextXY(x,y: integer; s: string) |
Виведення послідовності символів, починаючи з вказаних координат |
Наприклад OutText(‘графік’);
OutText(120,200,‘графік’);
Деяку частину зображення можна переміщувати з одного місця екрану на інший. Для цього треба визначити розмір зображення, занести в пам’ять визначений фрагмент зображення, а потім у вказані координати помістити зображення. Для цього використовують такі процедури та функції:
Таблиця 7.11.
ImageSize(x1,y1,x2,y2: integer): word |
Функція отримання розміру зображення |
GeyImaage(x1,y1,x2,y2: integer: var p) |
Збереження зображення в буфері пам’яті |
PutImage(x,y: integer; var p; bb:word) |
Виведення зображення з буферу пам’яті на екран |
Значення константи bb для процедури PutImage означає, яким чином передається зображення на екран. Так, якщо bb = 1, то при накладанні зображення не буде видно і це використовують для знищення зображення в даній області екрану.
Таблиця 7.12. Значення константи bb для процедури PutImage.
0 |
mov |
1 |
xor |
2 |
or |
3 |
and |
4 |
not |
Приклад 7.4. Переміщення зображення:
uses graph, crt;
var
a,t, gd, gm, i,x,y : Integer;
Size : Word;
y0, y1, y2, x1, x2 : Integer;
P : Pointer;
begin
gd:=detect;
initgraph(gd,gm,'c:\bp\bgi');
if graphresult<>grok then halt(1);
for i:=1 to 10 do
circle(100,100,i*10);
readln;
size:=imagesize(0,0,250,250);
getmem(p,size);
getimage(0,0,250,250,p^);
setcolor(yellow);
putimage(300,300,p^,4);
readln;
size:=imagesize(50,100,150,450);
getmem(p,size);
getimage(50,100,200,450,p^);
for x:=50 to 260 do begin putimage(x,100,p^,1); delay(10); if x<>260 then putimage(x,100,p^,1);end;
readln;
closegraph;
end.
Якщо треба змінювати зображення всього екрану, використовують відеосторінки.
Таблиця 7.13.Процедури управління екраном, вікном, сторінкою.
ClearDevice |
Очистка графічного екрану |
ClearViewPort |
Очистка графічного вікна |
SetActivePage(p: word) |
Завдання активної сторінки |
SetAspectRatio(x,y:wordd) |
Зміна відносного масштабу зображення по горизонталі та по вертикалі |
SetviewPort(x1,y1,x2,y2:integer, clip:boolean) |
Завдання розмірів вікна |
SetVisualPage(p:word) |
Завдання відеосторінки |
Приклад 7.5. Керування відеосторінками.
uses graph,crt;
var
a,t, gd, gm, i,x,y : Integer;
size:word;
P : Pointer;
begin
gd:=detect;
initgraph(gd,gm,'c:\tp\bgi');
if graphresult<>grok then halt(1);
setactivepage(0);
setfillstyle(1,cyan);
setcolor(cyan);
Circle(200,200,50);
floodfill(210,210,cyan);
setactivepage(1);
setfillstyle(1,red);
setcolor(red);
Circle(200,200,50);
floodfill(210,210,red);
setactivepage(2);
setvisualpage(2);
readln;
setvisualpage(0);
readln;
setvisualpage(1);
readln;
closegraph;
end.
Приведемо графічну частину програми для прикладу „Рівновага”:
Uses Crt,Graph,giry;
{Описуємо константи для зображення гирів}
const
Triangle: array[1..8] of PointType = ((X:10; Y: 22),(X: 15; Y: 24),
(X: 5; Y: 26),(X: 5; Y: 37), (X: 30; Y: 37),(X: 30; Y: 26),
(X: 20; Y: 24),(X:25; Y: 22));
Triangle1: array[1..8] of PointType = ((X: 10; Y: 22),(X: 15; Y: 24),
(X: 5; Y: 26),(X: 10; Y: 37), (X: 25; Y: 37),(X: 30; Y: 26),
(X: 20; Y: 24),(X:25; Y: 22));
Triangle2: array[1..10] of PointType = ((X: 10; Y: 17),(X: 15; Y: 19),
(X: 15; Y: 20),(X: 3; Y: 22),(X: 6; Y: 37), (X: 29; Y: 37),
(X: 32; Y: 22),(X: 20; Y: 20),
(X: 20; Y: 19),(X:25; Y: 17));
Triangle3: array[1..14] of PointType = ((X: 15; Y: 12),(X: 10; Y: 14),
(X: 10; Y: 16),(X: 15; Y: 18),(X: 15; Y: 20),(X: 3; Y: 22),
(X: 8; Y: 37), (X: 40; Y: 37),(X: 45; Y: 22),(X: 33; Y: 20),
(X: 33; Y: 18),(X:38; Y: 16),(X: 38; Y: 14),(X: 33; Y: 12));
Triangle4: array[1..33] of PointType = ((X: 15; Y: 10),(X: 10; Y: 12),
(X: 10; Y: 14),(X: 15; Y: 16),(X: 15; Y: 18),(X: 13; Y: 19),
(X: 10; Y: 20),(X: 8; Y: 21),(X: 6; Y: 22),(X: 4; Y: 23),
(X: 3; Y: 24),(X: 2; Y: 26),(X: 2; Y: 33),(X: 8; Y: 35),(X: 9; Y: 36),
(X: 9; Y: 37),(X: 43; Y: 37),(X: 43; Y: 36),(X: 44; Y: 36),
(X: 45; Y: 35),(X: 51; Y: 33),(X: 51; Y: 26),(X: 50; Y: 24),
(X: 49; Y: 23),(X: 47; Y: 22),(X:45; Y: 21),(X: 43; Y: 20),
(X: 40; Y: 19),(X: 37; Y: 18),(X: 37; Y: 16),(X: 42; Y: 14),
(X: 42; Y: 12),(X: 37; Y: 10));
type mas=array [1..100] of longint;