Изучая программирование в основной школе, сталкиваешься с проблемой визуализации основных алгоритмических конструкций. Это, прежде всего, связано с тем, что мы учителя в большей степени, выбираем для решения числовые задачи из курса математики, физики. При изучении циклов в языке Турбо Паскаль использую метод многократного вывода точки на экран монитора. Ниже представлены ряд задач, реализующий данный метод.
Задача №1
Нарисовать прямую, состоящую из точек длиной в 300 пикселей параллельной оси 0Х.
Идея этой задачи реализована циклом с параметром, который выполняетcя 300 раз. В теле цикла изменяется координата X. Если изменять одновременно координату Y, получиться смещение прямой на некоторый угол.
program Graf_1; uses Crt,Graph; {Подключение модуля Crt и модуля графики Graph} Var i,gd,gm,x,y:integer; begin gd:=detect; initGraph(gd,gm,'bgi'); if GraphResult<>grOK then {проверка инициализации графики} begin Writeln('Ошибка графики'); readln; Halt(1) end; for i:=1 to 300 do begin x:=i; y:=10; putpixel(x,y,13); end; readln; End.
Задача №2 (Вложенные циклы)
Используя результат предыдущей задачи нарисовать закрашенный прямоугольник.
Идея решения задачи сводится к тому, чтобы рисовать линии одной длины и спускаться по координате Y на одну точку. Замените блок цикл с предыдущей задачи на блок представленный ниже. Блоки инициализации графики для всех программ идентичны, поэтому в дальнейшем мы их описывать не будем, а лишь сконцентрируем внимание на фрагменты решения самой задачи.
for y:=100 to 300 do for x:=200 to 400 do begin putpixel(x,y,13); end;
Попробуйте нарисовать разноцветный прямоугольник. Эффект будет поразительный.
Задача №3
Вывести на экран случайным образом 1000 точек разными цветами.
Как мы уже знаем, графический экран монитора в Турбо Паскале ограничен координатами GetMaxX и GetMaxY.
Поэтому используем всю область экрана для вывода точки используя функцию генерации случайного числа random(a). В Турбо Паскале предусмотрены 16 цветов для вывода от 0 – черный, до 15 – белый. Функция n:= random(15) сгенерирует случайный цвет.
Ниже приведен текст программы.
program Graf_3; uses Crt,Graph; Var i,gd,gm,x,y:integer; begin gd:=detect; initGraph(gd,gm,'bgi'); if GraphResult<>grOK then begin Writeln('Ошибка графики'); readln; Halt(1) end; for i:=1 to 1000 do begin x:=random(getMaxX); y:=random(GetMaxY); n:= random(15); putpixel(x,y,n); end; readln; End.
Задача №4
Нарисовать из точек окружность радиуса R.
Окружность имеет уравнение x2 + y2 = R2. Будем циклом пробегать все значения от –R до +R. Значение Y вычисляем дважды. Ордината Y используем для построения верхней дуги, а –Y для нижней. Ниже приведен фрагмент программы построения окружности.
Функция Round округляет полученное значение. При выводе точки смещаем окружность по оси X на 300 точек, по оси Y на 200 точек от начала координат (левого верхнего угла монитора).
r:=100; for x:=-r to r do begin y:=Round(sqrt(sqr(r)-sqr(x))); putpixel(x+300,y+200,13); putpixel(x+300,-y+200,13); end;
Задача №5
Нарисовать кольцо с внешним радиусом R1 и внутренним радиусом R2
Задача аналогична предыдущей.
Задача №6
Вывести точки случайным образом, случайного цвета в область кольца.
Задача интересна тем, что нам необходимо вывести область, удовлетворяющая условию попадания точки в кольцо ограниченная двумя окружностями. Так как, данные кольца вписаны в квадрат со стороной 2*r1, то достаточно пройти вложенными циклами все точки квадрата построчно и выбрать при построении только те точки, которые удовлетворяют условию попадания в кольцо (x2+y2<=r12) and (x2+y2>=r22)
r1:=100; r2:=80; for x:=-r1 to r1 do for y:=-r1 to r1 do begin n:=random(15); if ((sqr(x)+sqr(y))>=sqr(r2)) and ((sqr(x)+sqr(y))<=sqr(r1)) then putpixel(x+300,y+200,n); end;
Задача №7
Построить эффект взрыва, увеличивающийся с центра до краев экрана.
Алгоритм решения задачи построен на попадание случайной точки с координатами x,y в область увеличивающейся окружности. Введем величины:
r1– внешний радиус круга взрыва;
r – увеличивающийся радиус взрыва;
n – количество случайных точек, чем больше r , тем больше точек выводим на экран;
delay(250-r) – задержка вывода на экран, r в цикле увеличивается до 200, задержка вывода уменьшается.
Функция random генерирует случайное положительное число, то вывод точки происходит только в положительную область декартовой системы координат. Так как точки симметричны относительно системы координат, вместо вывода одной точки выводим 4 точки.
r1:=200; r:=1; while r<=r1 do begin n:=1; while n<=r do begin x:=random(r); y:=random(r); if sqr(x)+sqr(y)<=sqr(r) then begin putpixel(x+300,y+200,4); putpixel(-x+300,-y+200,4); putpixel(-x+300,y+200,4); putpixel(x+300,-y+200,4); end; delay(250-r); n:=n+1; end; r:=r+1; end;
Задачи для самостоятельного решения.
1. Запросить номер четверти координатной плоскости и закрасить ее точками.
2. Нарисовать прямоугольник в центре экрана, состоящий из 4-х прямых.
3. Нарисовать фигуры.