Изучая программирование в основной школе, сталкиваешься с проблемой
визуализации основных алгоритмических конструкций. Это, прежде всего,
связано с тем, что мы учителя в большей степени, выбираем для решения
числовые задачи из курса математики, физики. При изучении циклов в
языке Турбо Паскаль использую метод многократного вывода точки на
экран монитора. Ниже представлены ряд задач, реализующий данный метод.
Задача №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. Нарисовать фигуры.
|