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

1.2. Использование процедуры Line

Задание 1.2.1. Нарисовать лист из нотной тетради. Вычерчивается 12 полос по пять линий, причем сначала рисуется нижняя (пятая) линия в каждой полосе, а в последнюю очередь - верхняя.

uses

graph, crt;

var

j, i, err, gd, gm: integer;

begin

gd:=vga;

gm:=vgahi;

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

err:=graphresult;

if err<>grok then

begin

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

halt(1)

end;

setcolor(blue);

setbkcolor(white);

for i:=1 to 12 do

for j:=1 to 5 do

line(0, i*40-j*4, 640, i*40-j*4);

readln;

closegraph;

end.

Задание 1.2.2. Подготовить лист в косую линейку, как в тетради-прописи для младших школьников (с полями).

uses

graph, crt;

var

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

begin

gd:=vga;

gm:=vgahi;

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

err:=graphresult;

if err<>grok then

begin

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

halt(1)

end;

setcolor(blue);

setbkcolor(white);

for i:=1 to 12 do

begin

line(x, i*40, x+640, i*40); {Две горизонтальные линии - узкая}

line(x, i*40-10, x+640, i*40-10); {полоска высотой в 10 пикселей}

line(i*90, y, x, i*90) {Косая линия}

end;

setcolor(red);

line(580, 0, 580, 480); {Красная линия - поля}

readln;

closegraph;

end.

Задание 1.2.3. Нарисовать зигзаг из линий. В программе задаются координаты начальной точки, а также расстояние между зубцами по горизонтали и высота зубцов зигзага.

uses

graph, crt;

const

x=100;

y=240;

a=40;

var

err, gd, gm, i: integer;

begin

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 10 do

begin

line(x, y, x+a div 2, y-a);

line(x+a div 2,y-a, x+a, y);

x:=x+a

end;

readln;

closegraph;

end.

Задание 1.2.4. Нарисовать вертикальные жалюзи, которые медленно опускаются. Опускание жалюзи происходит за счет использования процедуры Delay (значение в данной процедуре нужно подбирать для каждого компьютера индивидуально, все примеры приводятся для Pentium с частотой 1000 Мгц). Если рисовать не каждую линию, то можно получать более "редкие" жалюзи или, наоборот, добиться эффекта полного закрашивания прямоугольника. Значения параметров в цикле отличаются на 1 от значений координат опорных точек линий, вычерчивающих контур прямоугольника. Это сделано с тем, чтобы при работе программы контур оставался закрашенным в свой цвет, в нашем случае это белая рама окна и голубые жалюзи. В качестве аналогичного задания можно предложить учащимся написать программу для двух пар горизонтальных жалюзи, которые раздвигаются в разные стороны или движутся навстречу друг другу. Можно использовать этот прием для имитации открытия или закрытия театрального занавеса.

uses

graph, crt;

var

err, gd, gm, i: integer;

begin

gd:=vga;

gm:=vgahi;

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

err:=graphresult;

if err<>grok then

begin

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

halt(1)

end;

line(100, 100, 300, 100); {Рисуется контур окна}

line(100, 100, 100, 400);

line(100, 400, 300, 400);

line(300, 400, 300, 100);

setcolor(blue);

for i:=101 to 399 do

begin {Опускаются жалюзи}

delay(1000);

if i mod 5 = 0 then line(101, i, 299, i)

end;

readln;

closegraph;

end.

Задание 1.2.5. Провести диагональную штриховку квадрата: из левого нижнего угла в правый верхний проводится линия, а остальные линии проводятся параллельно на расстоянии, задаваемом как шаг. Число линий штриховки определяется как результат целочисленного деления стороны квадрата на шаг штриховки. Можно предложить учащимся задание провести диагональную штриховку квадрата, аналогичную штриховке, описанной в предыдущей задаче, только направление линий выбирается параллельным диагонали, проведенной из левого верхнего угла квадрата в правый нижний.

uses

graph, crt;

var

x, y, error, gd, gm, a, v, i, z, w: integer;

begin

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

readln(x, y);

writeln('Введите длину стороны квадрата и шаг штриховки:');

readln(a, v);

gd:=vga;

gm:=vgahi;

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

error:=graphresult;

if error<>grok then

begin

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

halt(1)

end;

moveto(x,y); {Рисуется квадрат}

linerel(a, 0);

linerel(0, a);

linerel(-a, 0);

linerel(0, -a);

moveto(x, y);

z:=x+a; {Вычисляются координаты точки,}

w:=y+a; {из которой начнется штриховка}

for i:=1 to a div v do

begin

line(x, w-i*v, x+i*v, w); {Заполняется верхний треугольник квадрата}

line(x+i*v, y, z, w-i*v) {Заполняется нижний треугольник квадрата}

end;

readln;

closegraph;

end.

Задание 1.2.6. Нарисовать два заштрихованных треугольника, расположенных на одной диагонали квадрата.

uses

graph, crt;

var

x, y, error, gd, gm, a, v, i, z, w: integer;

begin

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

readln(x, y);

writeln('Введите длину стороны квадрата и шаг штриховки:');

readln(a, v);

gd:=vga;

gm:=vgahi;

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

error:=graphresult;

if error<>grok then

begin

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

halt(1)

end;

moveto(x, y); {Рисуется квадрат}

linerel(a, 0);

linerel(0, a);

linerel(-a, 0);

linerel(0, -a);

moveto(x, y);

z:=x+a div 2; {Вычисляются координаты центра квадрата,}

w:=y+a div 2; {откуда начнется штриховка}

for i:=1 to (a div 2) div v do

begin

line(z, w-i*v, z-i*v, w);

line(z+i*v, w, z, w+i*v)

end;

readln;

closegraph;

end.

Задание 1.2.7. Нарисовать горизонтальную бабочку из линий штриховки путем вращения одной из диагоналей треугольника вокруг горизонтальной оси квадрата. Примечание. Использование разных шагов штриховки и подбор значений процедуры Delay позволяют добиваться эффектных результатов.

uses

graph, crt;

var

x, y, error, gd, gm, a, v, i, z, w: integer;

begin

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

readln(x, y);

writeln('Введите длину стороны квадрата и шаг штриховки:');

readln(a, v);

gd:=vga;

gm:=vgahi;

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

error:=graphresult;

if error<>grok then

begin

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

halt(1)

end;

moveto(x, y);

linerel(a, 0);

linerel(0, a);

linerel(-a, 0);

linerel(0, -a);

moveto(x, y);

z:=x+a;

w:=y+a;

for i:=1 to (a div v)+1 do

line(x, y+(i-1)*v, z, w-(i-1)*v);

readln;

closegraph;

end.

Задание 1.2.8. Нарисовать цветок, лепестками которого будут служить прямые линии. Если изменять значения радиуса и коэффициенты перед функциями sin и cos, то размер лепестков и их количество будут меняться.

uses

graph, crt;

var

x, y, err, gd, gm, i, r: integer;

begin

gd:=vga;

gm:=vgahi;

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

err:=graphresult;

if err<>grok then

begin

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

halt(1)

end;

r:=10;

for i:=1 to 360 do

begin

setcolor(11);

y:=240+round(5*sin((i*pi)/180))*r;

x:=320+round(5*cos((i*pi)/180))*r;

line(320, 240, x, y)

end;

readln;

closegraph;

end.