Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
listing_2003_7.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
233.98 Кб
Скачать

2. Создание рисунков с использованием прямоугольников

2.1. Использование процедур Rectangle, Bar

Задание 2.1.1. Нарисовать пять квадратов, лежащих на одной прямой и соприкасающихся друг с другом, причем сторона каждого следующего квадрата в два раза меньше стороны предыдущего. С клавиатуры вводятся координаты точки, из которой проводится линия, служащая основанием всех пяти квадратов.

uses

graph, crt;

var

x, x1, x2, y, y1, y2, i, err, gd, gm, rebro: integer;

begin

writeln('Введите координаты начальной точки построения x и y:');

readln(x, y);

writeln('Введите значение ребра квадрата:');

readln(rebro);

gd:=vga;

gm:=vgahi;

initgraph(gd, gm, 'd:\bp\bgi');

err:=graphresult;

if err<>grok then

begin

writeln('Ошибка открытия графики');

halt(1)

end;

x1:=x; {x1 и y1 - координаты верхнего левого}

y1:=y-rebro; {угла каждого квадрата}

y2:=y; {х2 и у2 - нижнего правого угла}

for i:=1 to 5 do

begin

setcolor(4);

x2:=x1+rebro;

rectangle(x1, y1, x2, y2);

x1:=x2; {х1 данного квадрата совпадает с х2 предыдущего}

rebro:=rebro div 2;

y1:=y1+rebro

end;

readln;

closegraph;

end.

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

uses

graph, crt;

const

x1=1;

y1=1;

var

x2, y2, i, err, gd, gm, rebro, period, kol_kv: integer;

begin

writeln('Введите значения ребер большого и малого квадратов,

а также количество квадратов:');

readln(rebro, period, kol_kv);

gd:=vga;

gm:=vgahi;

initgraph(gd, gm, 'd:\bp\bgi');

err:=graphresult;

if err<>grok then

begin

writeln('Ошибка открытия графики');

halt(1)

end;

for i:=1 to kol_kv do

begin

setcolor(4);

x2:=x1+rebro;

y2:=y1+rebro;

rectangle(x1, y1, x2, y2);

x1:=x1+rebro-period; {x1 и y1 - координаты нового квадрата}

y1:=y1+rebro-period

end;

readln;

closegraph;

end.

Задание 2.1.3. Нарисовать рамку для картины, состоящую из пересекающихся между собой квадратов (или ромбов). Приведенная программа рисует рамку последовательно из нижнего левого угла против часовой стрелки с небольшой задержкой, что создает дополнительный зрительный эффект. Программа упростится, если одновременно рисовать по две горизонтальные цепочки и по две вертикальные. Такой вариант подойдет для случая, когда рамка появляется одновременно вместе с размещенной в ней "картиной". При рисовании вертикальных цепочек используется прием переориентации осей координат. Очевидно, что для решения этой задачи можно использовать процедуры пользователя.

uses

graph, crt;

const

a=20;

x=80;

y=455;

var

x2, x3, y2v, y2n, err, gd, gm, i, j: integer;

begin

gd:=vga;

gm:=vgahi;

initgraph(gd, gm, 'd:\bp\bgi');

err:=graphresult;

if err<>grok then

begin

writeln('Ошибка открытия графики');

halt(1)

end;

y2v:=y-a;

y2n:=y+a;

for i:=1 to 14 do

begin {нижняя цепочка}

x2:=x+a;

x3:=x2+a;

moveto(x, y);

lineto(x2, y2v);

lineto(x3, y);

lineto(x2, y2n);

lineto(x, y);

x:=x3- a div 2;

delay(10000)

end;

x:=y;

y:=x3;

y2v:=y-a;

y2n:=y+a;

for i:=1 to 14 do

begin {правая цепочка}

x2:=x-a;

x3:=x2-a;

moveto(y, x);

lineto(y2v, x2);

lineto(y, x3);

lineto(y2n, x2);

lineto(y, x);

x:=x3+ a div 2;

delay(10000);

end;

x:=y;

y:=x3;

y2v:=y-a;

y2n:=y+a;

for i:=14 downto 1 do

begin {верхняя цепочка}

x2:=x-a;

x3:=x2-a;

moveto(x, y);

lineto(x2, y2v);

lineto(x3, y);

lineto(x2, y2n);

lineto(x, y);

x:=x3+a div 2;

delay(10000)

end;

x:=y;

y:=x3;

y2v:=y-a;

y2n:=y+a;

for i:=14 downto 1 do

begin {левая цепочка}

x2:=x+a;

x3:=x2+a;

moveto(y, x);

lineto(y2v, x2);

lineto(y, x3);

lineto(y2n, x2);

lineto(y, x);

x:=x3- a div 2;

delay(10000)

end;

readln;

closegraph;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]