Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Создание графических изображений. Модуль Graph



Задача 1. Построить различные геометрические фигуры.

Uses Graph, Crt;

VAR

Gd, Gm: INTEGER;

Radius, I, Width, K: INTEGER;

Y0, Y1, Y2, X1, X2: INTEGER;

Pattern: FillPatternType;

Points: ARRAY[1..6] OF PointType;

BEGIN

Gd: =vga; Gm: =1;

{ Инициализация графического режима }

InitGraph(Gd, Gm, 'C: \tp7\bgi'); IF GraphResult< > 0 THEN HALT(1);

SetBkColor(0); SetColor(2); {Цвет фона и изображения}

I: =0;

FOR Radius: =1 TO 5 DO Begin {Построение окружностей }

SetColor(Radius+4);

Circle(150, 150, Radius*25);

Inc(I); IF I=4 THEN I: =0;

End;

ReadLn;

ClearDevice; SetBkColor(1); SetColor(5); SetLineStyle(0, 0, 3);

Ellipse(130, 130, 0, 360, 30, 50); {эллипс}

ReadLn;

ClearDevice; SetColor(4); Ellipse(130, 130, 0, 180, 100, 70); { эллиптическая дуга}

ReadLn;

ClearDevice; K: =4;

FOR Radius: =1 TO 5 DO Begin

SetColor(K);

Arc(300, 100, 0, 90, Radius*20); {дуги}

Inc(K);

end;

ReadLn;

ClearDevice; Width: =20; SetColor(1); SetBkColor(11);

FOR I: =1 TO 5 DO Begin

SetFillStyle(7, I+4); {определение стиля заполнения}

Bar(I*Width, I*20, Succ(I)*Width, 200); {построение прямоугольников}

end;

SetFillStyle(5, 12); Bar(150, 150, 250, 250);

ReadLn;

{Построение параллелепипеда с верхней плоскостью}

SetFillStyle(8, 4); ClearDevice;

Y1: =100; Y2: =200; X1: =230; X2: =300;

SetLineStyle(3, 0, 3); {Определение стиля линии}

Bar3d(x1, y1, x2, y2, 10, topon);

ReadLn;

{Построение параллелепипеда без верхней плоскости}

ClearDevice;

SetLineStyle(0, 0, 1); setfillstyle(11, 1); bar3d(x1, y1, x2, y2, 10, topoff);

ReadLn;

{Пользовательский шаблон заполнения}

CleardDevice; SetColor(6); SetLineStyle(0, 0, 3); { Стиль линии}

{заполнение массива}

Pattern[1]: =31; Pattern[2]: =62; Pattern[3]: =124; Pattern[4]: =248;

Pattern[5]: =124; Pattern[6]: =62; Pattern[7]: =31; Pattern[8]: =0;

SetFillPattern(pattern, 12); {Задание шаблона пользователя}

Bar(10, 10, GetMaxX Div 2, GetMaxY Div 2);

Rectangle(10, 10, GetMaxX Div 2, GetMaxY Div 2);

ReadLn;

{Построение закрашенного сектора эллипса}

ClearDevice; SetBkColor(3); SetColor(4); SetFillStyle(7, 14);

Sector(100, 100, 0, 90, 50, 70);

ReadLn;

ClearDevice; SetFillStyle(1, 14); {Построение закрашенного сектора круга}

Pieslice(150, 150, 90, 360, 100);

ReadLn;

{Построение эллипса, заполненного текущим цветом}

ClearDevice; SetFillStyle(6, 13); SetLineStyle(3, 0, 1);

FillEllipse(200, 200, 50, 100);

ReadLn;

{Построение закрашенного многоугольника}

ClearDevice; Randomize; SetLineStyle(0, 0, 1); SetFillStyle(11, 1);

{Определение случайных координат вершин}

FOR I: =1 TO 5 DO Begin

Points[I].X: =Random(GetMaxX); Points[I].Y: =Random(GetMaxY);

End;

Points[6].X: =Points[1].Y; Points[6].Y: =Points[1].Y;

Fillpoly(6, Points);

ReadLn;

CloseGraph;

END.

Задача 2. Написать систему ниспадающего меню, которая в зависимости от выбора пользователя выводит на экран: красит экран в белый и черный цвет; термометр, у которого ртутный столбик поднимается; термометр, у которого ртутный столбик опускается.

USES Graph, Crt;

VAR

Dr, Md, M, X, Y, I: INTEGER; Ch: CHAR;

BEGIN

Dr: =Detect;

InitGraph(Dr, Md, 'c: \tp7\bgi'); IF GraphResult< > 0 then HALT(1);

REPEAT

SetBkColor(1); SetColor(6); SetTextStyle(0, 0, 2);

ClearDevice;

{ Вывод меню }

OutTextXY(50, 140, 'Пробел - Красим экран');

OutTextXY(50, 170, 'Стрелка вверх - Столбик поднимается');

OutTextXY(50, 200, 'Стрелка вниз - Столбик опускается');

OutTextXY(50, 230, 'ESC - Выход');

REPEAT

Ch: =ReadKey; {разветвление программы по нажатию клавиши}

CASE Ch OF

#32: Begin { Красим экран }

ClearDevice;

SetBkColor(0); SetFillStyle(1, 15);

Bar(0, 0, GetMaxX div 2, GetMaxY);

SetFillStyle(1, 0);

Bar(GetMaxX div 2, 0, GetMaxX, GetMaxY);

OutTextXY(70, GetMaxY-25, 'Нажмите DEL');

End;

#72: Begin { Ртутный столбик поднимается }

ClearDevice; SetLineStyle(0, 0, 1); SetBkColor(1); SetColor(4);

X: =GetMaxX div 2; Y: =GetMaxY div 2;

Rectangle(X, Y, X+40, GetMaxY-20);

FOR I: =1 TO120 DO Begin

SetColor(4); SetLineStyle(0, 0, 3);

Line(X, GetMaxY-20-I, X+40, GetMaxY-20-i);

Delay(250);

End;

OutTextXY(70, GetMaxY-25, 'Нажмите DEL');

End;

#80: Begin { Ртутный столбик опускается }

ClearDevice; SetLineStyle(0, 0, 1); SetBkColor(1); SetColor(4);

X: =GetMaxX div 2; Y: =GetMaxY div 2;

Rectangle(x, y, x+40, GetMaxY-20);

SetFillStyle(1, 4);

Bar(x, GetMaxY-140, x+40, GetMaxY-20);

FOR I: =1 TO 117 DO Begin

SetColor(1); SetLineStyle(0, 0, 3);

Line(x+1, GetMaxY-140+i, x+39, GetMaxY-140+i);

Delay(250);

End;

SetColor(4); OutTextXY(70, GetMaxY-25, 'Нажмите DEL');

End;

End;

UNTIL (Ch=#83) or (Ch=#27);

UNTIL (Ch=#27);

CloseGraph;

END.

Задача 3. Написать систему ниспадающего меню, которая в зависимости от выбора пользователя выводит на экран день и ночь.

USES Crt, Graph;

LABEL Ex, New;

VAR Gd, Gm: INTEGER; Av: CHAR;

PROCEDURE DAY; {процедура-солнечное затмение}

VAR X, Y, X1, Y1: INTEGER; U: REAL;

BEGIN

ClearDevice; SetFillStyle(1, 14); SetColor(14);

X: =GetMaxX DIV 2; Y: =GetMaxY DIV 2;

FillEllipse(X, Y, 50, 50); {солнце}

FOR Gm: =1 TO 150 DO Begin

U: =Random(359);

X1: =Trunc(Random (200)*COS(U))+X; Y1: = Trunc (Random (200)*SIN(U))+Y;

Line(X, Y, X1, Y1); {солнечные лучи}

End;

SetFillStyle(1, 8); SetColor(8);

FillEllipse(X-15, Y, 50, 50); {тень луны}

REPEAT

UNTIL KeyPressed; {задержка до нажатия любой клавиши}

END;

PROCEDURE NOCH; {процедура - лунная ночь со звездами}

VAR R, X, Y, I: INTEGER;

BEGIN

ClearDevice; SetFillStyle (1, 15); SetColor (15);

FOR I: =1 TO 50 DO Begin

R: = Random (2);

PutPixel(Random (GetMaxX), Random (GetMaxY), 15);

PutPixel(Random (GetMaxX), Random (GetMaxY), 15);

FillEllipse(Random (GetMaxX), Random (GetMaxY), R, R);

End;

SetFillStyle (1, 15); SetColor (15); FillEllipse (200, 100, 50, 50);

SetFillStyle (1, 0); SetColor (0); FillEllipse (180, 100, 50, 50); {луна}

REPEAT

UNTIL KeyPressed; {задержка до нажатия любой клавиши}

END;

BEGIN{основная программа}

Gd: =Detect; InitGraph(Gd, Gm, 'C: \tp7\BGI');

WHILE true DO Begin

SetFillStyle (1, 1); FloodFill(10, 10, 1); SetFillStyle (1, 0);

Bar(215, 115, 415, 365);

SetColor (5); SetFillStyle (1, 5);

Bar(200, 100, 400, 350); {меню}

SetTextStyle(7, 0, 5); SetColor (0);

OutTextXY(237, 117, 'MENU'); OutTextXY (237, 287, 'EXIT');

SetColor (12); OutTextXY (235, 115, 'MENU');

SetColor (4); OutTextXY (235, 285, 'EXIT');

SetTextStyle (0, 0, 3); SetColor (0);

OutTextXY (227, 207, 'D: ДЕНЬ'); OutTextXY (227, 247, 'N: НОЧЬ');

SetColor (3); OutTextXY (225, 205, 'D: ДЕНЬ'); OutTextXY (225, 245, 'N: НОЧЬ');

SetColor (15); SetTextStyle (0, 0, 2);

OutTextXY (100, 450, 'использовать клавиши D, N, ESC');

Av: =ReadKey;

CASE Av OF {разветвление программы по нажатию клавиши}

'D', 'd': DAY;

'N', 'n': NOCH;

CHR(27): GOTO Ex;

End;

End;

Ex: CloseGraph;

END.

Задача 4. Построить график функции.

USES Crt, Graph;

VAR

Gd, Gm: INTEGER;

X0, Y0: INTEGER; { Начало осей координат }

X, Y: INTEGER; Mx, My, I: INTEGER;

A, B, H, F: REAL;

BEGIN

WriteLn('Введите интервал и шаг изменения функции'); ReadLn(A, B, H);

WriteLn('Введите масштаб по X и Y'); ReadLn(Mx, My);

Gd: =Detect; Gm: =1;

InitGraph(Gd, Gm, 'c: \tp7\bgi'); IF GraphResult< > 0 THEN HALT(1);

{ Построение осей координат }

X0: =GetMaxX div 2; Y0: =GetMaxY div 2;

Line(10, Y0, GetMaxX, Y0); Line(X0, 10, X0, GetMaxY);

{ Построение стрелок }

Line(X0, 10, X0-10, 20); Line(X0, 10, X0+10, 20);

Line(GetMaxX, Y0, GetMaxX-10, Y0-10);

Line(GetMaxX, Y0, GetMaxX-10, Y0+10);

OutTextXY(X0-25, 10, 'X'); OutTextXY(GetMaxX-20, Y0+20, 'Y');

{ Разметка осей координат }

I: =X0;

REPEAT

I: =I+Mx;

PutPixel(I, Y0-1, 15); PutPixel(2*X0-I, Y0-1, 15);

UNTIL I> GetMaxX;

I: =Y0;

REPEAT

I: =I+My;

PutPixel(X0+1, I, 15); PutPixel(X0+1, 2*Y0-I, 15);

UNTIL I> GetMaxY;

{ Построение графика функции }

REPEAT

F: =A*A; { функция }

X: =Trunc(X0+A*Mx); Y: =Trunc(Y0-F*My);

PutPixel(X, Y, 15); A: =A+H;

UNTIL A> B;

ReadLn;

END.

Задача 5. Построить круговую диаграмму.

USES Сrt, Graph;

VAR

Gd, Gm: INTEGER; I, N, S, C: INTEGER;

M: ARRAY[1..10] OF INTEGER;

Nk, Kk: INTEGER; P: REAL;

BEGIN

WriteLn('Введите количество значений'); ReadLn(N);

S: =0;

FOR I: =1 TO N DO Begin

Writeln('Введите ', I, ' значение'); ReadLn(M[I]);

S: =S+M[I];

end;

P: =360/S; {приходится радиан на 1% }

Gd: =Detect; Gm: =1;

InitGraph(Gd, Gm, 'c: \tp7\bgi'); IF GraphResult< > 0 THEN HALT(1);

S: =0; C: =1;

FOR I: =1 TO N DO Begin

Nk: =Trunc(P*S); { Начальный угол }

Kk: =Trunc(P*(S+M[I])); { Конечный угол }

SetFillStyle(1, C);

PieSlice(GetMaxX div 2, GetMaxY div 2, nk, kk, 100);

S: =S+m[i];

C: =C+1; IF C=14 THEN C: =1; { Изменение цвета }

End;

ReadLn;

CloseGraph;

END.

Задача 6. Построить пятиконечную звезду.

USES Crt, Graph;

VAR

Gd, Gm: INETEGER; X, Y, Rb, Rm: INETEGER;

Points: ARRAY [1..11] OF PointType; {Массив вершин }

I, A: REAL;

BEGIN

Gd: =Detect; Gm: =1;

InitGraph(Gd, Gm, 'c: \tp7\bgi'); IF GraphResult< > 0 THEN HALT(1);

Rb: =150; Rm: =70;

ClearDevice; SetBkColor(3); SetColor(4); SetFillStyle(1, 4);

I: =1; A: =0.94;

{ Определение координат вершин звезды }

WHILE (I< =10) DO Begin

X: =Trunc(Rb*COS(A))+300; Points[I].X: =X;

Y: =Trunc(Rb*SIN(A))+200; Points[I].Y: =Y;

Inc(I); A: =A+0.628;

X: =Trunc(Rm*COS(A))+300; Points[I].X: =X;

Y: =Trunc(RM*SIN(A))+200; Points[I].Y: =Y;

Inc(I); A: =A+0.628;

End;

{ Связь координат первой и последней вершин }

Points[11].X: =Points[1].X; Points[11].Y: =Points[1].Y;

FillPoly(11, Points); { Построение звезды }

ReadLn;

CloseGraph;

END.

Задача 7. Построить объект, который передвигается с помощью навигационных клавиш.

USES Crt, Graph;

VAR

Gd, Gm: INTEGER; Av: CHAR;

X, Y, I, T, Z, K: INTEGER; St: STRING[225];

BEGIN

Gd: =Detect; InitGraph(Gd, Gm, 'C: \tp7\BGI');

ClearDevice;

X: =GetMaxX DIV 2; Y: =GetMaxY DIV 2;

T: =0; I: =0; K: =500;

REPEAT

SetColor(15);

{ Построение объекта }

Line(X, Y-10, X, Y-3); Line (X, Y+10, X, Y+3);

Line (X-10, Y, X-3, Y); Line (X+10, Y, X+3, Y);

Circle(X, Y, 7);

Av: =ReadDKey;

{ Изменение координат при нажатии клавиши }

IF CHR(75)=Av THEN T: =-10; IF CHR(77)=Av THEN T: =10;

IF CHR(72)=Av THEN I: =-10; IF CHR(80)=Av THEN I: =10;

SetColor (0);

Line (X, Y-10, X, Y-3); Line (X, Y+10, X, Y+3);

Line (X-10, Y, X-3, Y); Line (X+10, Y, X+3, Y);

Circle(X, Y, 7);

X: =X+T; Y: =Y+I; I: =0; T: =0;

IF X> (GetMaxX-2) THEN X: =GetMaxX-2; IF X< 2 THEN X: =2;

IF Y> (GetMaxY-2) THEN Y: =GetMaxY-2; IF Y< 2 THEN Y: =2;

UNTIL ORD(Av)=27; { Пока не нажата клавиша Esc }

END.

Задача 8. Построить орнамент.

USES Crt, Graph;

VAR

Gd, Gm: INTEGER; Av: CHAR;

X1, Y1, X, Y: INTEGER; U, H: REAL;

BEGIN

Gd: =Detect; InitGraph(Gd, Gm, 'C: \tp7\BGI');

SetFillStyle(1, 14); SetBkColor(5); SetColor(14);

X: =GetMaxX DIV 2; Y: =GetMaxY DIV 2;

U: =2*Pi;

While U> =0 DO Begin

X1: =Trunc(100*COS(U))+X; Y1: =Tunc(100*SIN(U))+Y;

Circle(X1, Y1, 3);

Delay(1000); U: =U-0.1;

End;

H: =-5;

While H< =45 DO Begin

X: =Trunc(100+H*10); Y: =Trunc(100-SIN(H)*10);

Circle(X, Y, 2);

Delay(500); H: =H+0.5;

End;

H: =-5;

While H< =45 DO Begin

X: =Trunc(100+H*10); Y: =Trunc(380-SIN(H)*10);

Circle(X, Y, 2);

Delay(500); H: =H+0.5;

End;

ReadLn;

END.

.....................................................................................................................................

Практические задания

.....................................................................................................................................

1. Построить семейство одинаковых окружностей, центры которых лежат на окружности большего диаметра.

2. По периметру экрана построить семейство разноцветных квадратов, а в середине – множество разноцветных точек.

3. Построить движущиеся изображения двух прямоугольников и круга, на которых помещены слова из фразы “ КТО СКАЗАЛ МЯУ? ”.

4. Построить движущиеся НЛО на фоне звездного неба.

5. Написать систему ниспадающего меню, которая в зависимости от выбора пользователя выводит на экран круг, квадрат или треугольник.

 

uses crt;

var

i: byte;

CH: CHAR;

begin

clrscr;

for i: =0 to 255 do write (chr(i): 2);

REPEAT

CH: =READKEY;

WRITE(ORD(CH): 4);

UNTIL CH='D';

end.


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-05-30; Просмотров: 879; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.084 с.)
Главная | Случайная страница | Обратная связь