Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Алгоритмизация и программирование. Учебное пособие
.pdf
71
clBlack – черный
clPurple – фиолетовый
clWhite – белый
clMaroon – темно-красный
clRed – красный
clNavy – темно-синий
clGreen – зеленый
clBrown – коричневый
clBlue – синий
clSkyBlue – голубой
clYellow – желтый
clCream – кремовый
clAqua – бирюзовый
clOlive – оливковый
clFuchsia – сиреневый
clTeal – сине-зеленый
clGray – темно-серый
clLime – ярко-зеленый
clLtGray – светло-
серый
clMedGray – серый
clSilver – серебряный
clMoneyGreen – цвет
зеленых денег
psColid
psClear
psDash
psDot
psDashDot
psDashDotDot
CenterWindow; ‒ размещает окно по центру экрана.
Цветовые константы
Модуль GraphABC содержит константы, которые используются
для работы с цветами. Стандартные цвета задаются следующими символическими константами:
Перо (Pen) по сути, является инструментом рисования контуров. Все
настройки пера распространяются на параметры нарисованных впоследствии линий и контуров фигур. Основные процедуры для работы с пером:
SetPenColor(color: integer); – устанавливает цвет пера, задавае-
мый параметром color.
SetPenWidth(w: integer); – устанавливает ширину пера, равную
w пикселам.
SetPenStyle(ps: integer); – устанавливает стиль пера, задаваемый
параметром ps.
Стили пера задаются следующими именованными константами:
Действия с пером

72
Действия с кистью
Инструмент кисть (Brush) предназначен для определения параметров
цвета закрашенных фигур и параметров заливки. Для работы с ним используются следующие процедуры:
SetBrushColor(color: integer); - устанавливает цвет кисти, зада-
ваемый параметром color.
SetBrushPicture(fname: string); - устанавливает в качестве образ-
ца для закраски кистью шаблон, хранящийся в файле fname, при
этом текущий цвет кисти при закраске игнорируется.
ClearBrushPicture; - очищает рисунок-образец, выбранный для
кисти.
SetBrushStyle(bs: integer); - устанавливает стиль кисти, задавае-
мый параметром bs.
Графические примитивы
Изображение в Паскале формируется из простейших геометриче-
ских объектов – графических примитивов. Отметим, что в различных версиях Паскаля (даже различных версиях ПаскальАВС) процедуры и функции построения графических примитивов могут существенно отличаться
по синтаксису, механизмам работы и т.д. Поэтому, приступая к работе
с графикой, рекомендуется сверить предлагаемый ниже перечень инструментов со справкой используемой версии Паскаль.
Процедуры и функции для построения графических примитивов
procedure SetPixel(x,y,color: integer); – закрашивает один пиксел
с координатами (x,y) цветом color.
function GetPixel(x,y): integer; – возвращает текущее значение
цвета для пиксела с координатами (x,y).
procedure MoveTo(x,y: integer); – передвигает невидимое перо к
точке с координатами (x,y); эта функция работает в паре с функцией LineTo(x,y).
procedure LineTo(x,y: integer); – рисует отрезок от текущего по-
ложения пера до точки (x,y); координаты пера при этом также
становятся равными (x,y).
procedure Line(x1,y1,x2,y2: integer); – рисует отрезок с началом в
точке (x1,y1) и концом в точке (x2,y2).
procedure Circle(x,y,r: integer); – рисует окружность с центром в
точке (x,y) и радиусом r.

73
procedure Ellipse(x1,y1,x2,y2: integer); – рисует эллипс, заданный
своим описанным прямоугольником с координатами противоположных вершин (x1,y1) и (x2,y2).
procedure Rectangle(x1,y1,x2,y2: integer); – рисует прямоуголь-
ник, заданный координатами противоположных вершин (x1,y1)
и (x2,y2).
procedure RoundRect(x1,y1,x2,y2,w,h: integer); – рисует прямо-
угольник со скругленными краями; (x1,y1) и (x2,y2) задают пару
противоположных вершин, а w и h – ширину и высоту эллипса,
используемого для скругления краев.
procedure Arc(x,y,r,a1,a2: integer); – рисует дугу окружности
с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 –
вещественные, задаются в градусах и отсчитываются против
часовой стрелки).
procedure Pie(x,y,r,a1,a2: integer); – рисует сектор окружности,
ограниченный дугой (параметры процедуры имеют тот же смысл,
что и в процедуре Arc).
procedure Chord(x,y,r,a1,a2: integer); – рисует фигуру, огра-
ниченную дугой окружности и отрезком, соединяющим ее
концы (параметры процедуры имеют тот же смысл, что и в
процедуре Arc).
procedure TextOut(x,y: integer; s: string); – выводит строку s в
позицию (x,y) (точка (x,y) задает верхний левый угол прямоугольника, который будет содержать текст из строки s).
procedure FloodFill(x,y,color: integer); – заливает область одного
цвета цветом color, начиная с точки (x,y).
procedure FillRect(x1,y1,x2,y2: integer); – заливает прямоуголь-
ник, заданный координатами противоположных вершин (x1,y1)
и (x2,y2), цветом текущей кисти.
procedure Polygon(var a; n: integer); – строит ломаную по n
точкам, координаты которых заданы в массиве a элементов типа
Point.
procedure Polyline(var a; n: integer); – строит замкнутую ло-
маную по n точкам, координаты которых заданы в массиве a
элементов типа Point.
Задание. Построить изображение “Колокольчик” (Рис 2.)

74
Решение. Для написания программы рекомендуется построить
схематический рисунок в системе координат (на листе в клетку) и определить координаты точек, необходимые
для задания графических примитивов.
Построим сначала контуры колокольчика.
Рис. 2. Схема изображения
“Колокольчик”
Текст программы.
Uses GraphABC;
BEGIN
Circle(400,140,13); {Ушко колокольчика}
Arc(400,200,50,0,180); {Полукруг}
Line(350,199,325,300); {Линии справа и слева}
Line(450,199,475,300);
Ellipse(390,325,410,375); {Язычок колокольчика}
Rectangle(300,300,500,350); {Ободок в нижней части}
END.
Раскрасим полученный рисунок. Отметим, что некоторые графи-
ческие примитивы изображаются уже закрашенными (в нашем случае
круг, эллипс и прямоугольник). Для того чтобы они отображались цветными достаточно установить до их прорисовки цвет кисти. Область
от “ушка” до “ободка” колокольчика закрасим с помощью процедуры
FloodFill, указав точку, лежащую в области.
Текст программы.
Uses GraphABC;
BEGIN
SetbrushColor(clYellow);{Устанавливаем цвет кисти}
Circle(400,140,13);
Arc(400,200,50,0,180);
Line(350,199,325,300);
Line(450,199,475,300);
Ellipse(390,325,410,375);
Rectangle(300,300,500,350);
FloodFill(400,200, clyellow); {Закрашиваем центральную часть}
END.

75
Текст программы.
Uses GraphABC;
Var x,y: integer;
BEGIN
x:=300;
y:=100;
SetbrushColor(clYellow);
Circle(x+100,y+40,13);
Arc(x+100,y+100,50,0,180);
Line(x+50,y+99,x+25,y+200);
Line(x+150,y+99,x+175,y+200);
Ellipse(x+90,y+225,x+110,y+275);
Rectangle(x,y+200,x+200,y+250);
FloodFill(x+100,y+100, clyellow);
END.
Рис. 3. Схема изображения
“Колокольчик” с привязкой к
одной точке
Интересные возможности открываются при построении изображения, привязанного к одной точке. Так, наш колокольчик можно в координатной сетке размером 200 на 300 пикселей, как показано на рисунке. Координаты левого верхнего угла примем за (x, y). Прибавляя к x и y некоторые значения, можно рассчитать координаты всех точек, необходимых
для построения рисунка (Рис. 3). Программа примет следующий вид.
Мы получили возможность размещать наш рисунок в любом месте
экрана, указывая лишь координаты x и y. Например, в последнем примере за левый верхний угол изображения (точнее, координатной сетки) мы
взяли точку (300, 100). С помощью циклов такой рисунок можно быстро
“размножить”. В частности, можно определить несколько точек со случайными координатами и отобразить несколько колокольчиков в случайных позициях экрана или, напротив, выстроить колокольчики в некотором заранее определённом порядке.
Задание. Изобразить два ряда колокольчиков по три колокольчика
в каждом.
Текст программы.
Uses GraphABC;
Var x,y,a,b: integer;
BEGIN
x:=0; {задаём координаты первого изображения}
y:=0;
for b:=1 to 2 do begin

76
for a:=1 to 3 do begin
SetbrushColor(clYellow); {строим изображение}
Circle(x+100,y+40,13);
Arc(x+100,y+100,50,0,180);
Line(x+50,y+99,x+25,y+200);
Line(x+150,y+99,x+175,y+200);
Ellipse(x+90,y+225,x+110,y+275);
Rectangle(x,y+200,x+200,y+250);
FloodFill(x+100,y+100, clyellow);
x:=x+210; {переходим к следующему "столбцу"}
end;
x:=0; {возвращаемся к первому "столбцу"}
y:=y+250; {переходим к следующей строке}
end;
END.
С помощью привязки изображения к одной точке можно поучать
простейшие эффекты анимации. Например, изменяя ключевые координаты, прорисовывая изображения и, затем, очищая окно можно добиться эффекта движения объекта по экрану.
Задание. Создать анимацию движения колокольчика слева на право.
Текст программы.
Uses GraphABC;
Var x,y: integer;
BEGIN
y:=0;
for x:=1 to 550 do begin
ClearWindow;
SetbrushColor(clYellow);
Circle(x+100,y+40,13);
Arc(x+100,y+100,50,0,180);
Line(x+50,y+99,x+25,y+200);
Line(x+150,y+99,x+175,y+200);
Ellipse(x+90,y+225,x+110,y+275);
Rectangle(x,y+200,x+200,y+250);
FloodFill(x+100,y+100, clyellow);
end;
END.
Данная анимация имеет ряд недостатков. Во-первых, изображение
мерцает и не успевает окрашиваться. Во-вторых, само движение слиш-

77
1)
2)
ком быстрое. Поступим следующим образом. Перед каждой прорисовкой будем запрещать отображение процесса рисования (LockDrawing).
После прорисовки показывать построенное изображение (Redraw). При
каждом обороте цикла делать паузу в работе программы на необходимое
число мили секунд (Sleep(m)). Получим следующую программу.
Текст программы.
Uses GraphABC;
Var x,y: integer;
BEGIN
y:=0;
for x:=1 to 550 do begin
ClearWindow; {Очищаем окно}
LockDrawing; {Скрываем процесс построения изображения}
SetbrushColor(clYellow);
Circle(x+100,y+40,13);
Arc(x+100,y+100,50,0,180);
Line(x+50,y+99,x+25,y+200);
Line(x+150,y+99,x+175,y+200);
Ellipse(x+90,y+225,x+110,y+275);
Rectangle(x,y+200,x+200,y+250);
FloodFill(x+100,y+100, clyellow);
Redraw; {Показываем построенное изображение}
Sleep(5); {Устанавливаем паузу в работе программы на 5 мс}
end;
END.
Задания для самостоятельной работы
Используя графические примитивы, постройте следующие изображения:

78
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
1. Андреева Т. А. Программирование на языке Pascal: учебное по-
собие / Т. А. Андреева. – Москва : Интернет-Университет Информационных Технологий (ИНТУИТ), Ай Пи Ар Медиа, 2020. – 277 с. – Текст :
непосредственный.
2. Андрианова А. А. Алгоритмизация и программирование. Прак-
тикум: учебное пособие / А. А. Андрианова, Л. Н. Исмагилов, Т. М. Мухаторова. – 1-е изд. – Санкт-Петербург : Лань, 2019. – 240 с. – Текст : непосредственный.
3. Алексеев Е. Р. Free Pascal и Lazarus : учебник по программиро-
ванию / Е. Р. Алексеев, О. В. Чеснокова, Т. В. Кучер. – Саратов: Профобразование, 2019. – 438 с. – Текст : непосредственный.
4. Зыков С. В. Введение в теорию программирования. Объектно-
ориентированный подход: учебное пособие для СПО / С. В. Зыков. – Саратов: Профобразование, 2021. – 187 с. – Текст : непосредственный.
5. Бедердинова О. И. Программирование на языках высокого
уровня: учебное пособие / О. И. Бедердинова. – Архангельск: САФУ, 2019.
– 159 с. – Текст : непосредственный.
6. Ламонина Л. В. Практикум по алгоритмизации и программиро-
ванию / Л. В. Ламонина, Т. Ю. Степанова. – Омск: Омский ГАУ, 2021. –
123 с. – Текст : непосредственный.
7. Маляров А. Н. Объектно-ориентированное программирование:
учебник для СПО / А. Н. Маляров. – Саратов: Профобразование, 2021. 331 с. – Текст : непосредственный.
8. Павловская Т. А. Программирование на языке высокого уровня
Паскаль / Т. А. Павловская. – Москва: Интернет-Университет Информационных Технологий (ИНТУИТ), 2021. – 153 c. – Текст : непосредственный.
9. Паронджанов В. Д. Алгоритмические языки и программирова-
ние: ДРАКОН: учебное пособие для СПО / В. Д. Паронджанов. – Москва:
Юрайт, 2021. – 436 с. – Текст : непосредственный.
10. Трофимов В. В. Алгоритмизация и программирование: учебник
для вузов / В. В. Трофимов, Т. А. Павловская. – Москва: Издательство
Юрайт, 2020. – 137 с. – Текст : непосредственный.
11. Тюльпинова Н. В. Алгоритмизация и программирование: учеб-
ное пособие / Н. В. Тюльпинова. – Саратов : Вузовское образование, 2019.
– 200 с. – Текст : непосредственный.
12. Тюльпинова Н. В. Технология алгоритмизации и программиро-
вания на языке Pascal: учебное пособие / Н. В. Тюльпинова. – Саратов: Вузовское образование, 2019. – 244 с. – Текст : непосредственный.

ФЗ
№ 436-ФЗ
Издание не подлежит маркировке
в соответствии с п. 1 ч. 4 ст. 11
Учебное издание
АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ
Составитель
СОРОКИН Геннадий Геннадьевич
В авторской редакции
Подписано в печать 04.10.2022. Формат 60х90 1/16. Усл. печ. л. 4,93.
Тираж 500 экз. Заказ № 2500.
Библиотечно-издательский комплекс
федерального государственного бюджетного образовательного
учреждения высшего образования
«Тюменский индустриальный университет».
625000, Тюмень, ул. Володарского, 38.
Типография библиотечно-издательского комплекса.
625039, Тюмень, ул. Киевская, 52.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
