Выбрать главу

* Circle(x,y,r) – рисует окружность с центром в точке (x,y) и радиусом r.

* Ellipse(x1, y1, x2, y2) – рисует эллипс, заданный своим описанным прямоугольником с координатами противоположных вершин (x1,y1) и (x2,y2).

* Rectangle(x 1,y1,x2,y2) – рисует прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2).

* RoundRect(x 1,y1,x2,y2,w,h) – рисует прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев.

* Arc(x,y, r, a1,a2) – рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки).

* Pie(x,y,r,a1,a2) – рисует сектор окружности, ограниченный дугой (параметры процедуры имеют тот же смысл, что и в процедуре Arc).

* Chord(x,y, r, a1,a2) – рисует фигуру, ограниченную дугой окружности и отрезком, соединяющим ее концы (параметры процедуры имеют тот же смысл, что и в процедуре Arc).

* FloodFill(x,y,color) – закрашивает область одного цвета, начиная с точки (x,y) цветом color.

Задание:

Напишите программу, использующую не менее трех процедур рисования, которая рисовала бы несложный рисунок (домик, автомобиль, и т.п.)

- 13 -

Пример решения задания

Program avto;

uses graphABC;

var i : integer;

begin

SetWindowSize (800,600);

SetPenStyle (psClear); // верхняя часть автомобиля

setBrushColor (Clgreen);

rectangle (250,250,550,351);

setBrushColor (ClAqua); // окна

rectangle (255,255,395,345);

rectangle (405,255,545,345);

setBrushColor (Clgreen); // корпус

rectangle (50,350,750,500);

setBrushColor (ClYellow); // фары

rectangle (749,375,764,400);

setBrushColor (ClRed);

rectangle (35,375,51,400);

setBrushColor (ClLightGray); // бампер

RoundRect (725,450,775,475,10,10);

RoundRect (25,450,75,475,10,10);

SetPenStyle (psSolid); // двери

Line(250,350,250,425);

Line(250,425,300,500);

Line (400,250,400,500);

Line (550,350,550,425);

Line (550,425,500,500);

setBrushColor (ClBlack); // колеса

Circle (200,500,50);

setBrushColor (ClLightGray);

Circle (200,500,25);

setBrushColor (ClBlack);

Circle (600,500,50);

setBrushColor (ClLightGray);

Circle (600,500,25);

end.

- 14 -

Тема №4 Цикл for

Цикл for используется для повторения фрагментов программы заданное число раз.

Синтаксис оператора:

for i:=N1 to N2 do оператор;

или

for i:=N1 to N2 do

begin

оператор1;

оператор2;

....

end;

Составной оператор – это группа операторов, заключенная в операторные скобки begin ... end.

Здесь

i – индекс цикла (обязательно переменная целочисленного типа),

N 1 – целочисленное выражение, определяющее нижнюю границу индекса цикла,

N2 – целочисленное выражение, определяющее верхнюю границу индекса цикла, N2 должно быть больше или равно N 1, для того чтобы цикл выполнился хоть один раз.

Алгоритм выполнения оператора такой:

1. Индексу цикла присваивается значение выражения N 1.

2. Проверяется условие i<=N2. Если условие истинно, то переход к п. 3, иначе к п.6.

3. Выполняются операторы тела цикла.

4. Значение индекса цикла увеличивается на единицу (автоматически!).

5. Переход к п. 2.

6. Конец цикла.

Пример: Построить таблицу квадратов чисел от 1 до 10.

Program Square;

var i, j : integer;

begin

for i:=1 to 10 do

begin

j:=sqr(i);

writeln(i:4,j:4);

end;

end.

или проще:

Program Square;

var i: integer;

begin

for i:=1 to 10 do

writeln(i:4,sqr(i):4);

end.

Обратите внимание на указание формата вывода целого числа в операторе writeln.Число после двоеточия указывает на количество символов, отводимых для представления целого числа. Если число занимает меньшее количество цифр, то при выводе оно слева дополняется необходимым числом пробелов.

- 15 -

Цикл fordownto

Иногда возникает желание выполнить цикл for наоборот, так чтобы индекс цикла не возрастал, а убывал. Эту возможность реализует следующая конструкция:

for i:=N2 to N1 downto оператор;

Здесь подразумевается, что N2 должно быть больше или равно N 1.

Использование цикла for для построения изображений

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

Program Concentric;

uses graphABC;

var i : integer; // для цикла for

begin

SetWindowSize (400,400);

SetBrushStyle (bsClear);

// строятся 10 окружностей с

// радиусами 20, 40, ... 200

for i:=1 to 10 do Circle(200,200,i*20);

end.

Вот более сложный пример, разберитесь с ним сами. Ответьте на вопрос: «Почему используется цикл не forto, а fordownto

Program Concentric2;

uses graphABC;

var i : integer; // для цикла for

begin

SetWindowSize (400,400);

SetPenStyle(psClear);

for i:=20 downto 1 do

begin

SetBrushColor (RGB(10*i,0,0));

Circle(200,200,i*10);

end;

end.