Графическое представление работы цикла в Турбо Паскале

Разделы: Информатика


Изучая программирование в основной школе, сталкиваешься с проблемой визуализации  основных алгоритмических конструкций. Это, прежде всего, связано с тем, что мы учителя в большей степени, выбираем для решения числовые задачи из курса математики, физики. При изучении циклов в языке  Турбо Паскаль использую метод многократного вывода точки на экран монитора. Ниже представлены ряд задач, реализующий данный метод.

Задача №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. Нарисовать фигуры.