Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Построение алгоритма

Автор:   •  Апрель 20, 2018  •  Контрольная работа  •  3,006 Слов (13 Страниц)  •  438 Просмотры

Страница 1 из 13

Рекурсия

[pic 1][pic 2]

Рис.1                                                         рис. 2

        Алгоритм построения данного изображения следующий:

  • описать  процедуру изображения одной окружности с четырьмя окружностями поменьше;
  • для изображения каждой окружности следующего уровня использовать эту же процедуру, только с другими значениями параметров – координат центра, величин радиусов и т.д.

Известно:

R         – радиус окружности с центром (х,у);

(x,y)         – координаты центра окружности R;

r1        – радиус орбиты – расстояние от точки (х,у) до центров окружности окружения (спутников);

r*         - радиус окружности окружения (спутника).

k1  = r*/R; k2 = r1/R.

        Процедура построения:

Procedure pic(x,y,r,r1: Integer);

Begin

{Изобразить окружность с центром (х,у) и радиусом r}

For i:=1 To 4 Do

   Begin

{вичислить координаты центра (х1,у1) i-ой окружности}

        Pic(x1,y1,< новое значение r >,r1);

   End;

End;

Координаты х1,у1 выражаем через х,у: x1 = x + dx, y1 = y + dy

Для нахождения приращений dx, dy воспользуемся определением тригонометрических функций SIN, COS:

dx = r1 * COS(L);

dy = r1 * SIN(L),                  где L = pi/2, pi, 3pi/2,  2pi                 (90°, 180°, 270°, 360°)

Для того, чтобы программа «незацикливала» вводится величина n, которая уменьшается на 1 и выполняет роль специальной «заглушки», ограничивающей количество вызовов процедуры. Центр самой большой окружности располагается в центре экрана.


Program Ex_61; {р е к у р с и я рис. 1}

Uses Crt, Graph;

    Const pi=3.14;

Var x,y,n,r,r1,cd,gm: Integer;

              k1, k2: real;

Procedure Pic2(x,y,r,r1,n: Integer);

Var x1,y1,i: Integer;

Begin

  If n > 0 Then {заглушка}

     Begin

       Circle(x,y,r); r1:= trunc(r*k2); {радиус орбиты}

       For i:=1 To 4 Do

          Begin

      x1:= Trunc(x+r1*Cos(pi/2*i));{координаты центра i–ой окружности}

      y1:= Trunc(y+r1*Sin(pi/2*i));

           Pic2(x1,y1,Trunc(r*k1),r1,n-1);

          End;

     End;

End;

Begin {программа}

    ClrScr;

    Write('n => '); ReadLn (n); Write('r => '); ReadLn (r);

    k1:=0.3; k2:=2;

    cd:=detect; Gm:=1; Initgraph(cd,Gm,'..\Bgi');

    x:=GetMaxX Div 2;  y:=GetMaxY Div 2;{координаты центра большой окружности}

    Pic2(x,y,r,r1,n);

 Readln;

 CloseGraph;

End.

Program Ex_61a; {K237 р е к у р с и я рис. 2}

Uses Crt, Graph;

Const pi=3.14;

Var      r,n,x,y,cd,gm: Integer;

Procedure Pic2(x,y,r,n: Integer);

Begin

  If n > 0 Then

     Begin

       Circle(x,y,r);

       Pic2(x+r,y,Round(r/2),n-1);  Pic2(x,y-r,Round(r/2),n-1);

       Pic2(x-r,y,Round(r/2),n-1);  Pic2(x,y+r,Round(r/2),n-1);

     End;

End;

Begin

    ClrScr;

    Write('n => '); ReadLn (n); Write('r => '); ReadLn (r);

    cd:=detect; Gm:=1; Initgraph(cd,Gm,'..\Bgi');

    x:=GetMaxX Div 2;  y:=GetMaxY Div 2; Pic2(x,y,r,n);

 Readln;

 CloseGraph;

End.


Снежинка. Разработать программу, которая обеспечивает рисование снежинки, число звеньев и количество ветвей задаёт пользователь. На рисунке 3 изображена снежинка, состоящая из 3-х звеньев и 8-ми ветвей.

Длину каждого звена рассчитываем по известному значению n – количеству звеньев и величины экрана. Считаем, что снежинка строится в квадрате 400 х 400 точек. Центр снежинки совпадает с центром квадрата, а длина отрезка каждого очередного звена в 4 раза меньше предыдущего. Если L длина 1-ого звена, то справедливо следующее равенство:

L +L/4 + L / 42 + … = 200 или L * (1 –1/4n) / (1-  ¼) =200 (Сумма членов геометрической прогрессии), то есть L = 200 * 3 * 4n-1 / (4n – 1).

Если снежинка состоит из 1-го звена и р ветвей, то  фрагмент программы выглядит следующим образом:

For i:=1 To р DO

    Begin

x1:=Trunc(x + L * (COS(2 * PI  * (i – 1)/p));         {координаты конца очередного звена}

y1:=Trunc(y + L * (SIN(2 * PI  * (i – 1)/p));

 Line(x,y,x1,y1);                                 {рисование звена}

    End;

Здесь х,у – координаты точи центра окружности. Снежинка рисуется как бы много раз, приэтом длины звеньев изменяются, поэтому их надо просчитать один раз и запомнить в массиве L из n звеньев. Длина каждого звена уменьшается в 4 раз по отношению к предыдущему. Длина 1-го звена определяется из того, что в квадрате из 400х400 точек необходимо построить снежинку из n звеньев. Схематично это можно изобразить следующим образом:[pic 3]

...

Скачать:   txt (17.8 Kb)   pdf (556.2 Kb)   docx (414.3 Kb)  
Продолжить читать еще 12 страниц(ы) »
Доступно только на Essays.club