Государственное бюджетное общеобразовательное учреждение
гимназия №66 Приморского района Санкт-Петербурга
Учебно-методическое пособие
Графические возможности
языков программирования
Разработчик: учитель информатики
ГБОУ гимназия №66
Калинина Мария Владимировна
Санкт-Петербург
2012г.
Представление данных на мониторе компьютера в графическом виде впервые было реализовано в середине 50-х годов для больших ЭВМ, применявшихся в научных и военных исследованиях. С тех пор графический способ отображения данных стал неотъемлемой принадлежностью подавляющего числа компьютерных систем.
Существует специальная область информатики, изучающая методы и средства создания и обработки изображений с помощью программно-аппаратных вычислительных комплексов, – компьютерная графика. Она охватывает все виды и формы представления изображений, доступных для восприятия человеком либо на экране монитора, либо в виде копии на внешнем носителе. Все современные языки программирования включают в себя поддержку графики.
Тема «Программирование» является одной из самых трудных для изучения в курсе «Информатика и ИКТ» в школе. Для начинающего программиста увидеть результат своего труда в виде напечатанного на консоли числа представляется не очень впечатляющим.
Использование графических возможностей языков программирования помогает при изучении данного материала, т.к. позволяет:
1)сделать изучение программирования эмоционально привлекательным;
2)наглядно продемонстрировать результат выполнения алгоритма;
3)изучить циклы, подпрограммы, рекурсию на примере рисования графических объектов;
4)расширить спектр решаемых задач.
Исследуемая тема связывает главы «Технология обработки графических изображений» и «Программирование» школьной программы, обеспечивая понимание целостности предмета информатики в глазах учащихся.
В начале изучения данной темы можно столкнуться с непониманием учащихся. "А зачем так сложно, если в любом графическом редакторе можно сделать то же самое?" Мотивацией может служить то, что зная приемы программирования, создаются быстро такие элементы, на которые в графическом редакторе уйдет много времени и не будет возможности многократного повторения и внесения быстрых изменений в рисунок. Программирование дает возможность управлять созданием графики на более низком уровне.
Необходимо познакомить учеников с основными понятиями компьютерной графики. Следующим шагом будет введение графических операторов, которые поддерживает изучаемый язык программирования. При введении операторов, необходимо идти из практических соображений. Ввод оператора должен сопровождаться некой практической задачей, которая после введения оператора будет успешно решаться. Академический подход, при котором перечисляются все операторы и их описание, здесь не допустим.
При решении задач обращать внимание школьников не на запоминание графических операторов и их синтаксиса (это можно найти в любом справочнике), а на алгоритм решения задачи, последовательность действий, оформленность логических модулей программы в процедуры и функции, использование циклов для повторяющихся элементов.
После теоретических моментов школьники выполняют лабораторные работы и сохраняют свои результаты в отдельных папках с последующей их защитой перед преподавателем. При проверке следует также обращать внимание на «красоту» алгоритма, а не рисунка, при необходимости давать ученику на доработку.
Возможно проводить обмен рисунков между школьниками, а также устраивать компьютерный вернисаж и конкурсы. Такие мероприятия стимулируют развитие познавательной и творческой активности.
Для учащихся начальной школы на дополнительных занятиях или для учащихся 5-8 классов (в зависимости от программы) при первом знакомстве с темой «Программирование» хорошо подойдет изучение языка программирования Лого, позволяющее писать несложные программы для графического учебного исполнителя с интересными результатами.
Для более старших школьников при изучении языков программирования высокого уровня, например, Pascal, VisualBasicили других на уроках или факультативных занятиях, также будет уместно изучить графические возможности этих языков.
Изучение графических возможностей языков программирования, несомненно, разнообразит тему «Программирование», позволит рассмотреть класс интересных задач, будет способствовать развитию творческих способностей учащихся.
I. ЛОГО
1. Для начинающих изучать программирование лучше всего подойдут программы, реализующие линейные алгоритмы для рисования фигур. Они под силу даже учащимся начальной школы и для них достаточно знать следующие команды:
pd– перо опусти
fd<число> - вперед на заданное число шагов
bk<число> - назад на заданное число шагов
lt<градус> - поворот по часовой стрелке на заданное число градусов
rt<градус> - поворот против часовой стрелки на заданное число градусов
pu – перо подними
Текст программы |
Результат выполнения |
to f1 pd fd 80 rt 90 fd 30 bk 60 pu end
to f2 pd fd 80 bk 40 rt 90 fd 50 lt 90 fd 40 bk 80 pu end
to f3 pd fd 80 bk 40 rt 90 fd 40 bk 80 pu end
to f4 pd fd 80 rt 135 fd 40 bk 40 rt 90 fd 40 pu end |
f1:
f2:
f3:
f4:
|
Eще задание на линейные алгоритмы – написать программы для рисования цифр индекса:
Текст программы |
Результат выполнения |
to zero pd fd 80 rt 90 fd 40 rt 90 fd 80 rt 90 fd 40 rt 90 pu end
to one pd fd 80 lt 135 fd 60 bk 60 lt 45 fd 80 seth 0 pu end
to two pd lt 90 fd 40 rt 135 fd 60 lt 45 fd 40 lt 90 fd 40 pu lt 90 fd 80 lt 90 fd 40 seth 0 end
to three pd rt 45 fd 60 lt 135 fd 40 rt 135 fd 60 lt 135 fd 40 lt 90 pu fd 80 seth 0 end
to four pd fd 80 bk 40 lt 90 fd 40 rt 90fd 40 pu bk 80 rt 90 fd 40 seth 0 end
to five pd rt 90 fd 40 lt 90 fd 40 lt 90 fd 40 rt 90 fd 40 rt 90 fd 40 lt 90 pu bk 80 seth 0 end
to six pd lt 90 fd 40 rt 90 fd 40 rt 45 fd 60 bk 60 rt 45 fd 40 rt 90 fd 40 pu seth 0 end
to seven pd fd 40 rt 45 fd 60 lt 135 fd 40 pu seth 0 bk 80 end
to eight pd fd 80 lt 90 fd 40 lt 90 fd 40 lt 90 fd 40 bk 40 rt 90 fd 40 lt 90 fd 40 seth 0 pu end
to nine pd rt 45 fd 60 lt 45 fd 40 lt 90 fd 40 lt 90 fd 40 lt 90 fd 40 lt 45 bk 60 pu seth 0 end |
|
3. Программы из предыдущего примера для рисования цифр индекса можно использовать как подпрограммы для изображения любых чисел: 26, 190, 345, 7586 и т.д. Этот пример наглядно показывает прием использования в программах процедур и дает возможность выполнения индивидуального задания для каждого учащегося.
Текст программы |
Результат выполнения |
to ch_26 two rt 90 fd 80 seth 0 six end
to ch_190 one rt 90 fd 40 seth 0 nine rt 90 fd 70 seth 0 zero end
to ch_345 three rt 90 fd 110 seth 0 four rt 90 fd 50 seth 0 five end
to ch_7586 seven rt 90 fd 50 seth 0 five rt 90 fd 50 seth 0 eight rt 90 fd 50 seth 0 six end
|
|
4. Следующий шаг – объяснение циклических алгоритмов. Это можно сделать на примере программы для рисования квадрата. Используя только знания о линейных алгоритмах, квадрат можно написать такую программу:
tokv
pd
fd 40 rt 90 fd 40 rt 90 fd 40 rt 90 fd 40 rt 90
pu
end
Очевидно, что нецелесообразно писать 4 раза одни и те же команды, а можно заменить эту длинную запись, используя оператор repeat:
repeat4 [fd40 rt90]
Для рисования приведенных ниже фигур также используется цикл repeat, в теле которого описываются команды для рисование повторяющегося элемента фигуры:
Текст программы |
Результат выполнения |
to figura1 seth 90 pd repeat 4 [fd 50 rt 90 fd 50 rt 90 fd 50 lt 90] end
to figura2 seth 90 pd repeat 4 [fd 40 lt 135 fd 20 rt 90 fd 20 lt 135 fd 40 rt 90] end
to figura3 seth 90 pd repeat 4 [lt 30 fd 40 lt 120 fd 40 rt 60] end
|
|
5. Теперь можно познакомить учащихся с программами для рисования окружностей и дуг. Окружности получатся при рисовании 360‑угольника с маленькой стороной (например, равной 1):
repeat360 [fd1 rt1]
Для полуокружности параметр цикла не 360, а 180:
repeat180 [fd1 rt1]
А для четверти окружности – 90:
repeat90 [fd1 rt1]
Для того, чтобы получить окружность, полуокружность, четверть окружности меньшего радиуса, нужно менять шаг, а для рисования их в противоположную сторону оператор rtна lt, например:
repeat 360 [fd 1 rt 0.5]
repeat 180 [fd 1 lt 0.3]
repeat 90 [fd 1 lt 0.5]
Данные знания можно применить для создания программ, рисующих фигуры:
Текст программы |
Результат выполнения |
to in_jan pd seth 0 repeat 360 [fd 1 rt 1] repeat 180 [fd 0.5 rt 1] repeat 180 [fd 0.5 lt 1] end
to veer pd seth 0 repeat 180[fd 1 lt 1] repeat 90 [fd 0.5 lt 1] repeat 90 [fd 0.5 rt 1]rt 180 repeat 90 [fd 0.5 rt 1] repeat 90 [fd 0.5 lt 1] rt 180 repeat 90 [fd 0.5 rt 1] rt 90 repeat 180 [fd 0.5 lt 1] end
to sekira pd seth 0 repeat 180[fd 1 lt 1] seth 0 repeat 180 [fd 0.5rt 1] seth 0 repeat 180 [fd 0.5 rt 1] end
to zont pd seth 0 repeat 180 [fd 1 lt 1] rt 180 repeat 3 [seth 0 repeat 180 [fd (1/3) rt 1]] seth 0 repeat 180 [fd (1/3) lt 1] seth 0 repeat 90 [fd (1/3) lt 1] seth 180 fd 80 repeat 180 [fd (1/3) lt 1] end
to konek pd seth 0 repeat 180 [fd 0.5lt 1] seth 0 repeat 180 [fd 1 lt 1] repeat 180 [fd 0.5lt 1] seth 180 repeat 180 [fd 1 lt 1] end
to peshka pd seth 270 repeat 180 [fd 1 rt 1] seth 270 repeat 90 [fd 1 rt 1] seth 180 repeat 90 [fd 1 rt 1] seth 90 repeat 180 [fd 1 rt 1] seth 90 fd 120 end
|
|
В эти программы можно добавить оператор заливки Fillи получить раскрашенные картинки:
6. Как вариант рисования дуг, можно создавать различные лепестки:
Текст программы |
Результат выполнения |
to lepest_1 pd setcolor 104 setpensize 3lt 30 repeat 30 [fd 5 rt 2] rt (180 - 30 * 2) repeat 30 [fd 5 rt 2] rt (180-30) pu end
to lepest_2 pd setcolor 135 setpensize 3 repeat 90 [fd 0.5 rt 1] repeat 90 [fd 1 lt 1] rt 180 repeat 90 [fd 0.5 rt 1] repeat 90 [fd 1 lt 1] pu end
to lepest_3 pd setcolor 85 setpensize 3 repeat 90 [fd 1 rt 1] repeat 90 [fd 1 lt 1]rt 180 repeat 90 [fd 2 rt 1] pu end
to lepest_4 pd setcolor 65 setpensize 3 repeat 90 [fd 1 lt 1] repeat 90 [fd 1 rt 1]rt 180 repeat 90 [fd 2 lt 1] pu end
to lepest_5 pd rt 180 setcolor 25 setpensize 3 repeat 180 [fd 1 rt 1] repeat 180 [fd 0.5 lt 1]rt 180 repeat 180 [fd 1 rt 1] repeat 180 [fd 0.5 lt 1] pu end
to lepest_6 pd setcolor 115 setpensize 3 repeat 180 [fd 1 rt 1] repeat 180 [fd 0.5 rt 1] repeat 180 [fd 0.5 lt 1] pu end |
|
Используя предыдущие программы в цикле repeat, можно рисовать цветки:
Текст программы |
Результат выполнения |
to zvetok_1; pd setpensize 3 repeat 14 [lt 30 repeat 30 [fd 5 rt 2 setcolor color + 3] rt (180 - 30 * 2) repeat 30 [fd 5 rt 2 setcolor color + 3] rt (180-30)rt 360 / 14] pu end
to zvetok_2; pd repeat 14 [lepest_2rt 360 / 7] pu end
to zvetok_3; pd repeat 20[lepest_3rt 360 / 10] pu end
to zvetok_4; pd repeat 20[lepest_4 rt 360 / 10] pu end
to zvetok_5; pd repeat 10[lepest_5 rt 360 / 10] pu end
to zvetok_6; pd repeat 10[lepest_6 rt 360 / 5] pu end
|
|
7. Процедуры с параметром.
Текст программы |
Результат выполнения |
1. Квадраты tokv :d pd repeat 4 [fd :d rt 90] pu end to kv_16 setpensize 2setcolor 115 make "a 5 repeat 10 [kv :a make "a :a + 10 setcolor color -10] end 2. Окружности to okr_pr :a pd repeat 360[fd :a rt 1] end to okr_lt :a pd repeat 360[fd :a lt 1] end to okr setpensize 2 setcolor 115 make "c 0.2 repeat 8 [okr_pr :c okr_lt :c make "c :c + 0.2 setcolor color -10] end 3. Цветок to lepest :d pd lt 40 repeat 40 [fd :d rt 2] rt (180 - 40 * 2) repeat 40 [fd :d rt 2] rt (180 - 40)pu end to zv :d repeat 7[lepest :d rt (360 / 5)] end to tsv :d setpensize 2 setcolor 85 repeat 5[zv :d make "d :d + 0.5 setcolorcolor+ 10] end
4. Веер to pero :d pd repeat 90 [fd :d /2 rt 1] repeat 90 [fd :d lt 1] lt 180 repeat 90 [fd :d / 2 rt 1] repeat 90 [fd :d lt 1] rt 180 pu end to veer :d seth 240setpensize 2setcolor 85 repeat 5[pero :d make "d :d + 0.1 rt 20 setcolor color + 10]make "d :d - 0.2 repeat 4[pero :d make "d :d - 0.1 rt 20setcolor color + 10] end |
|
8. Рекурсия
Текст программы |
Результат выполнения |
1. Разворачивающаяся квадратная спираль toa:x pdsetpensize3 setcolor17 fd:xrt90 if:x<100 [a:x+ 5] pu end
2. Сворачивающаяся квадратная спираль tob:x pdsetpensize3 setcolor26 fd:xrt90 if:x>1 [b:x- 5] pu end
3. Разворачивающаяся прямоугольная спираль to c :x :y pd setpensize 3 setcolor 106 fd :x rt 90 fd :y rt 90 if :x<100 [c :x + 10 :y + 5] pu end
4. Раскручивающаяся круглая спираль tou:r pd setpensize 3 setcolor 127 repeat 180 [fd :r rt 1] if :r<1 [u :r + 0.1] pu end
5. Скручивающаяся круглая спираль tow:r pd setpensize 3 setcolor 59 repeat 180 [fd :r rt 1] if :r>0.1 [w :r - 0.1] pu end
|
|
II. TURBOPASCAL7.0
1. Графические возможности языка программирования Pascal.
Большинство языков программирования имеют свои стандартные графические библиотеки. Так, у Basicграфические команды являются встроенными; система программирования TurboPascalсодержит графическую библиотеку (модуль Graph.tpu), имеющую в своем составе процедуры и функции обработки простейших графических примитивов.
В модуле GRAPHсодержится 79 графических процедур, функций, десятки стандартных констант и типов данных. В состав модуля входит ряд программ драйверов для наиболее распространенных видеоадаптеров: CGA, MCGA, EGA, VGA, HERCULES, AT&T, 3270 PC. Эти драйверы хранятся в файлах с расширением BGI [4].
Для работы графики её надо инициализировать, а для этого необходимо определить возможный графический режим. Это можно сделать с помощью следующей процедуры.
UsesGraph
…
ProcedureInitGraph;
Var grD,grM: Integer;
Begin
grD:=detect;
InitGraph(grD,grM,’c:\TP7\BGI’); {вызовпроцедурыGRAPH}
End;
…
BEGIN
InitGraph;
… Графические операторы …
CloseGraph;
END.
INITGRAPH (драйвер, режим, 'путь' ) - подключает графический режим. Драйвер - это переменная целого типа, определяющая тип графического дисплея. Режим - это переменная целого типа, определяющая режим работы графического адаптера. Путь - указывает путь к файлу sgavga.bgi.
DETECT - режим автоматического определения типа.
CLOSEGRAPH - прекращает работу графического адаптера и восстанавливает текстовый режим работы экрана.
Таким образом, все графические операторы работают только при инициализированном графическом режиме, в противном случае будет выводиться ошибка.
Для вывода графических примитивов на экран следует использовать следующие процедуры модуля Graph.
Вывод точки:
PUTPIXEL(x, y, цвет) - выводит точку с координатами (x, y);
Установка цвета:
SETCOLOR (цвет) - устанавливает текущий цвет для выводимых линий и символов;
SETBKCOLOR (цвет) - устанавливает цвет фона,
где цвет- это число от 0 до 15 (Табл. 1).
Цвет: |
|
0 |
черный |
1 |
синий |
2 |
зеленый |
3 |
голубой |
4 |
красный |
5 |
лиловый |
6 |
коричневый |
7 |
светло-серый |
8 |
темно-серый |
9 |
светло-синий |
10 |
светло-зеленый |
11 |
светло-голубой |
12 |
светло-красный |
13 |
светло-лиловый |
14 |
желтый |
15 |
белый |
Управление курсором вывода:
MOVETO(x,y) - переводит курсор в позицию x,y, точка при этом не высвечивается.
Рисование графических примитивов, с цветом установленных операторами SETCOLOR и SETBKCOLOR:
LINE(x1, y1, x2, y2) – рисует линию от точки с координатами (x1, y1) до точки с координатами (x2,y2).
LINETO(x, y) - рисует линию от текущей позиции курсора до x, y;
LINEREL(Dx, Dy) - рисует линию от текущей позиции на относительное расстояние Dx, Dy;
|
CIRCLE(x, y, r) - выводит окружность, с центром x, y, радиуса r;
ARC(x, y, начальный угол, конечный угол, r)
- выводит дугу (углы измеряются в градусах против часовой стрелки);
RECTANGLE(x1,y1,x2,y2) - прямоугольник, где x1, y1 - координаты левого верхнего угла, x2, y2 - правого нижнего угла;
BAR(x1, y1, x2, y2) - закрашенный прямоугольник;
BAR3D(x1, y1, x2, y2, глубина, false или true) - параллелепипед;
где x1, y1 - координаты левого верхнего угла; x2, y2 - координаты правого нижнего угла, true - верхняя грань есть, false - верхняя грань отсутствует.
FILLELLIPSE(x, y, Rx, Ry) - закрашенный эллипс;
SECTOR(x, y, нач.угол, кон.угол, Rx, Ry) - сектор закрашенный;
SETFILLESTYLE(штриховка (Табл. 2), цвет) - каким цветом или какими штрихами будет закрашена замкнутая область;
Штриховка: |
|
0 |
фоном |
1 |
сплошная |
2 |
_ _ _ |
3 |
//// |
4 |
толстыми/// |
5 |
\\\\ |
6 |
толстыми \\\ |
7 |
++++ |
8 |
x x x |
9 |
квадратами |
10 |
редкими точками |
11 |
частыми точками |
12 |
пользовательские
|
FLOODFILL(x, y, цвет,цвет границы) - штрихует произвольную замкнутую область;
Вывод текста.
Специально для графического режима разработаны процедуры, обеспечивающие вывод сообщений различными шрифтами в горизонтальном и вертикальном расположении с изменением размеров и т.д.
OUTTEXT(ТЕКСТ) - вывод текста, начиная с текущей позиции
OUTTEXTXY(x, y, текст) - вывод текста, начиная с точки с координатами (x,y)
SETTEXTSTYLE(шрифт, направление, размер) - процедура устанавливает стиль текстового вывода на графический экран, где
шрифт: 0 - стандартный шрифт, 1 - штриховой шрифт, 2 - уменьшенный, 3 - прямой, 4 - готический;
направление: 0 - слева - направо, 1 - снизу - вверх;
размер: 1-32 для стандартного шрифта, 1-10 для штриховых
SETUSERCHARSIZ(x1, x2, y1, y2) - позволяет изменить ширину и высоту символа для штрихового шрифта
2. Задачи
1. Написать программу, которая рисует на экране Государственный флаг России.
Текст программы |
Результат выполнения |
uses Graph, Crt; var grD, grM, x, y, l, h, w, res:integer; begin grD:=detect; InitGraph (grD,grM,'с:\tp7\bgi');
x:=100; y:=100; l:=200; h:=50; w:=round(h/3); setfillstyle(solidfill, white); bar(x,y,x+l,y+2*w); setfillstyle(solidfill, blue); bar(x,y+2*w,x+l,y+4*w); setfillstyle(solidfill, red); bar(x,y+4*w,x+l,y+6*w); readln; CloseGraph; end.
|
|
2. Написать программу, которая рисует на экране смайл.
Текст программы |
Результат выполнения |
uses Graph, Crt; var grD, grM:integer; begin grD:=detect; InitGraph (grD,grM,'с:\tp7\bgi');
setfillstyle(solidfill, yellow); setcolor(yellow); PieSlice(100, 100, 0, 360, 20); setcolor(black); arc(100, 102, 180, 360, 10); circle(93, 93, 2); circle(107, 93, 2); readln; CloseGraph; еnd
|
|
3. Написать программу, которая вычерчивает на экране кораблик.
Текст программы |
Результат выполнения |
uses Graph; const dx=5; dy=5; var grD, grM, ErrCode, x, y:integer; begin grD:=detect; InitGraph (grD,grM,'с:\tp7\bgi');
x:=10; y:=200; MoveTo(x,y); LineTo(x,y-2*dy); LineTo(x+10*dx,y-2*dy); LineTo(x+ll*dx,y-3*dy); LineTo(x+17*dx,y-3*dy); LineTo(x+14*dx,y); LineTo(x,y); MoveTo(x*3*dx,y-2*dy); LineTo(x+4*dx,y-3*dy); LneTo(x+4*dx,y-4*dy); LineTo(x+13*dx,y-4*dy); LineTo(x+13*dx,y-3*dy); Line(x+5*dx,y-3*dy,x+9*dx,y-3*dy); Rectangle(x+8*dx,y-4*dy,x+ll*dx,y-5*dy); Rectangle(x+7*dx,y-4*dy,x+8*dx,y-7*dy); Circle(x+12*dx,y-2*dy,Trunc{dx/2)); Circle(x+14*dx,y-2*dy,Trunc(dx/2)); Line(x+10*dx,y-5*dy,x+10*dx,y-10*dy); MoveTo(x+17*dx,y-3*dy); LineTo(x+10*dx,y-10*dy); LineTo(x,y-2*dy); readln; CloseGraph; end.
|
|
4. Написать программу, которая выводит на экран пятиконечную звезду.
Текст программы |
Результат выполнения |
uses Graph; const pi=3.1415; var grD, grM, a, i, r,x0, y0:integer; k:real; p: array [1..10] of PointType; begin grD:=detect; InitGraph (grD,grM,'с:\tp7\bgi');
хО:=100; уО:=100; r:=20; k:=2*pi/360; а:=18; for i:=l to 10 do begin if (i mod 2) <> 0 then begin p[i].x:=xO+Round(r*cos(a*k)); p[i].y:=yO-Round(r*sin(a*k)); end else begin p[i].x:=xO+Round(r/2*cos(a*k)); p[i].y:=yO-Round(r/2*sin(a*k)); end; a:=a+36; if a > 360 then a:=18; end; SetFillStyle(SolidFill,Red); FillPoly(10,p); readln end. |
|
5. Написать программу, которая рисует на экране 12 концентрических окружностей разного цвета.
Текст программы |
Результат выполнения |
uses Graph, Crt; var grD, grM, ErrCode, x, y, r, dr, i:integer; begin grD:=detect; InitGraph (grD,grM,'с:\tp7\bgi'); x:=100; y:=100; r:=5; dr:=5; for i:=1 to 12 do begin setcolor(i); circle(x,y,r); r:=r+dr end; readln; CloseGraph; end. |
|
6. Написать программу, которая рисует на экране узор из окружностей.
Текст программы |
Результат выполнения |
uses Graph, Crt; var grD, grM, x, y, r, l, i, j:integer; begin grD:=detect; InitGraph (grD,grM,'с:\tp7\bgi'); y:=100; r:=20; l:=30; for i:=1 to 4 do begin x:=100; for j:=1 to 5 do begin circle(x, y, r); x:=x+l; end; y:=y+l; end; readln; CloseGraph; end. |
|
7. Написать программу, которая рисует на экране узор из квадратов.
Текст программы |
Результат выполнения |
uses Graph; var grD, grM, x, y, d, n, l, i, j:integer; begin grD:=detect; InitGraph (grD,grM,''с:\tp7\bgi');
y:=100; d:=30; l:=10; for i:=1 to 5 do begin if ((i mod 2) = 1) then begin n:=5; x:=100; end else begin n:=4; x:=100+round(d/2+l/2); end; for j:=1 to n do begin rectangle(x,y,x+d,y+d); x:=x+d+l; end; y:=y+round(d/2+l/2); end; readln; CloseGraph; end.
|
|
8.Рекурсия. Написать программу, которая выводит на экран приведенный ниже узор.
Текст программы |
Результат выполнения |
uses Graph; procedure elem(x,y,r,p:integer); begin if p>=0 then begin circle(x,y,r); elem(x+r,y,round(r/2),p-1); elem(x,y-r,round(r/2),p-1); elem(x-r,y,round(r/2),p-1); elem(x,y+r,round(r/2),p-1); end; end; var grD, grM:integer; begin grD:=detect; InitGraph (grD,grM,'');
elem(320,240,60,3); readln; CloseGraph; end. |
|
III. VISUALBASIC2010
1. Графические возможности языка программирования VisualBasic2010.
Для работы с графическими объектами необходимо инициализировать графический модуль:
Dimgraf As Graphics = CreateGraphics()
Прямая:
graf.DrawLine(pen As System.Drawing.Pen, x1 As Single, y1 As Single, x2 As Single, y2 As Single) – проводитлинию, соединяющуюдветочки, задаваемыепарамикоординат.
Пример:
Dimpen1 As New Pen(Color.Red, 5)
graf.DrawLine(pen1, 2, 5, 400, 500)
Прямоугольник:
graf.DrawRectangle(pen As System.Drawing.Pen, x As Integer, y As Integer, width As Integer, height As Integer) – рисуетпрямоугольник, которыйопределяетсяпаройкоординатлевойверхнейвершины, ширинойивысотой.
graf.FillRectangle (Brush As System.Drawing.Brush, x As Integer, y As Integer, width As Integer, height As Integer) – рисуетзакрашенныйвнутрипрямоугольник.
Пример:
graf.DrawRectangle(Pens.Crimson, 150, 150, 400, 200)
graf.FillRectangle(Brushes.Chartreuse, 150, 150, 400, 200)
Эллипс:
graf.DrawEllipse(pen As System.Drawing.Pen, x As Integer, y As Integer, width As Integer, height As Integer) – рисуетэллипс, ограниченныйпрямоугольником((x, y) – леваяверхняявершинапрямоугольника, width, height – ширинаивысотапрямоугольника)
graf.FillEllipse(Brush As System.Drawing.Brush, x As Integer, y As Integer, width As Integer, height As Integer) – рисуетзакрашенныйвнутриэллипс.
Пример:
graf.DrawEllipse(Pens.Crimson, 240, 120, 300, 350)
graf.FillEllipse(Brushes.BlanchedAlmond, 240, 120, 300, 350)
Заливкафона:
graf.Clear(ColorAsSystem.Drawing.Color)- очищает всю поверхность рисования и выполняет заливку указанным цветом фона.
Пример:
graf.Clear(Color.BurlyWood)
2. Проекты.
1. Российский флаг
Текст процедуры обработчика события |
Результат выполнения |
PublicClass Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dimgraf As Graphics = CreateGraphics() Dimpen1 As New Pen(Color.Brown, 5) graf.Clear(Color.Black) graf.DrawLine(pen1, 200, 40, 200, 350) graf.FillRectangle(Brushes.White, 203, 40, 200, 50) graf.FillRectangle(Brushes.Red, 203, 90, 200, 50) graf.FillRectangle(Brushes.Blue, 203, 140, 200, 50) EndSub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
EndSub EndClass
|
|
2. Олимпийские кольца
Текст процедуры обработчика события |
Результат выполнения |
PublicClass Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dimgraf As Graphics = CreateGraphics() Dimpen1 As New Pen(Color.Blue, 5) Dimpen2 As New Pen(Color.Black, 5) Dimpen3 As New Pen(Color.Red, 5) Dimpen4 As New Pen(Color.Yellow, 5) Dimpen5 As New Pen(Color.Green, 5) graf.Clear(Color.BurlyWood) graf.DrawEllipse(pen1, 100, 50, 100, 100) graf.DrawEllipse(pen2, 170, 50, 100, 100) graf.DrawEllipse(pen3, 240, 50, 100, 100) graf.DrawEllipse(pen4, 135, 100, 100, 100) graf.DrawEllipse(pen5, 205, 100, 100, 100) End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
EndSub EndClass
|
|
3. Мишень
Текст процедуры обработчика события |
Результат выполнения |
PublicClass Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim graf As Graphics = CreateGraphics() Dim x As Single Dim y As Single Dim w As Single Dim I As Integer x = 20 y = 20 w = 200 For I = 1 To 10 Step 1 If I Mod 2 = 1 Then graf.FillEllipse(Brushes.Black, x, y, w, w) Else : graf.FillEllipse(Brushes.White, x, y, w, w) End If x = x + 10 y = y + 10 w = w - 20 Next
End Sub EndClass
|
|
4. Олимпиада
Текст процедуры обработчика события |
Результат выполнения |
PublicClass Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim graf As Graphics = CreateGraphics() Dim x As Single Dim y As Single Dim w As Single Dim h As Single Dim I As Integer Dim pen1 As New Pen(Color.Red, 2) x = 100 y = 300 w = 400 h = 20 For I = 1 To 10 Step 1 graf.DrawRectangle(pen1, x, y, w, h) x = x + 20 y = y - 20 w = w - 40 Next
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
EndSub EndClass
|
|
5. Рупор
Текст процедуры обработчика события |
Результат выполнения |
PublicClass Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim graf As Graphics = CreateGraphics() Dim pen1 As New Pen(Color.CadetBlue, 2) Dim x As Integer Dim y As Integer Dim w As Integer Dim I As Integer x = 0 y = 200 w = 2 For I = 1 To 50 Step 1 graf.DrawEllipse(pen1, x, y, w, w) x = x + 5 y = y - 2 w = w + 5 Next End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
EndSub EndClass
|
|
6. Узор из квадратов
Текст процедуры обработчика события |
Результат выполнения |
PublicClass Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim graf As Graphics = CreateGraphics() Dim pen1 As New Pen(Color.Red, 2) Dim x As Integer Dim y As Integer Dim I As Integer Dim J As Integer Dim w As Integer w = 70 x = 50 y = 50 For J = 1 To 3 Step 1 x = 50 For I = 1 To 5 Step 1 graf.DrawRectangle(pen1, x, y, w, w) x = x + w + w \ 2 Next I y = y + w + w \ 2 Next J x = 102 y = 102 For J = 1 To 2 Step 1 For I = 1 To 4 Step 1 graf.DrawRectangle(pen1, x, y, w, w) x = x + w + w \ 2 Next I x = 102 y = y + w + w \ 2 Next J End Sub EndClass
|
|