Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Алгоритмизация и программирование. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
1 Мб
Скачать
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.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]