KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Александр Цветков - Язык программирования PASCAL

Александр Цветков - Язык программирования PASCAL

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн "Александр Цветков - Язык программирования PASCAL". Жанр: Программирование издательство неизвестно, год неизвестен.
Перейти на страницу:

SetWindowSize(512,512);

SetPenStyle(psDash);

SetBrushStyle(bsClear);

Circle (256,256,WindowHeight div 2);

end.

- 12 -


Задание стиля и цвета кисти

* SetBrushColor(цвет) – устанавливает цвет кисти

* SetBrushPicture(имя файла) – устанавливает в качестве образца для закраски кистью образец, хранящийся в файле, при этом текущий цвет кисти при закраске игнорируется.

* ClearBrushPicture – очищает рисунок-образец, выбранный для кисти.

* SetBrushStyle(стиль) – устанавливает стиль кисти, задаваемый параметром bs.


Возможные стили кисти:

bsSolid bsClear bsCross bsDiagCross bsHorizontal bsBDiagonal bsVertical bsFDiagonal

Текущей кистью закрашиваются все замкнутые фигуры, контур фигур рисуется текущим пером. Чтобы нарисовать не закрашенную фигуру, используйте SetBrushColor(bsClear).


Пример:

Program Gr03;

Uses GraphABC;

Var i,j : integer;

begin

SetWindowSize(512,512);

SetBrushColor(rgb(128,0,255));

SetBrushStyle(bsDiagCross);

Rectangle(10,10,WindowWidth-10,WindowHeight-10);

end.


Некоторые графические примитивы[6]

* Line(x1, y1, x2, y2) – рисует отрезок с началом в точке (x1,y1) и концом в точке (x2,y2).

* 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.


Интересных эффектов можно добиться, используя так называемый «генератор случайных чисел». Встроенная функция random (N) возвращает случайное число в диапазоне от 0 до N– 1. Посмотрите, как эта возможность применяется в следующей программе.

Program RandomLines;

uses graphABC;

var i : integer;

begin

SetWindowSize (400,400);

for i:=1 to 200 do

Line(Random(400),Random(400),Random(400),Random(400));

end.


Задание №5. Дополните вашу графическую программу узором, получаемым с помощью цикла for.

- 16 -

Тема №5 Оператор if

В языке Pascal существуют операторы, позволяющие изменить линейный ход программы.

Их можно разделить на две группы: развилки и циклы.

Развилки Циклы if ... then ... else ... while if ... then repeat ... until case for

Развилки


Оператор if

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

if логическое условие then оператор-1 else оператор-2;


Пример: if x>0 then z:=1 else z:=–1;


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


Пример:


if x>0 then

begin

z:=1;

x:=2*x;

end

else

begin

z:=-1;

x:=-x;

end;


Обратите внимание, что перед else точка с запятой не ставится. Точка с запятой используется только для разделения операторов друг от друга. Можно было бы и не ставить запятую после операторов x:=2*x и x:=-x, поскольку begin и end не являются операторами, а являются скобками. Паскаль будет интерпретировать[8] точку с запятой перед end, как наличие пустого оператора между ней и end.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*