[Back to TURTLE SWAG index] [Back to Main SWAG index] [Original]

    (* ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
       ³ Programated by Vladimir Zahoransky                        ³
       ³                Vladko software                            ³
       ³ Contact      : zahoran@cezap.ii.fmph.uniba.sk             ³
       ³ Program tema : Squards in squard - norekusion             ³
       ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ *)

    {
         This is very popular effekt to present rekusion. This version
     (how in all programs) is no rekusion version. This program is typycal
     sort of rekusions. To undestatnd a rekusion is not diffycult, but to
     undestand to no rekusion version. The rekusion is easy (writed with
     one trick - rekpic20.pas), but for no rekusion version stay a big
     difficult problem. For N=1 it is bigest squard.  For N=2 it is :

       ÚÄÄÄÂÄÄÄÂÄÄÄ¿    And here is a problem. In N=1 it is ONE squard,
       ³   ³   ³   ³  but in N=2 are there 4 small squards, for N=3 ... .
       ÃÄÄÄÙ   ÀÄÄÄ´  This problem is not difficult, if you change this
       ³           ³  problem for Ostack. (Object stack for turtle graphic)
       ÃÄÄÄ¿   ÚÄÄÄ´  It is very easy for all who undestand Ostack. (statical
       ³   ³   ³   ³  and dynamical) We work with v - rekusive variable,
       ÀÄÄÄÁÄÄÄÁÄÄÄÙ  N - level of rekusion and a (s) - it is direction.

     This program (for easy version) is good to work in parts.
     Part1 : vhere is primitive part (nathing)
             and penetrate part
     Part2-4 : emerge of rekusion

     First work : Init stack. (The stack is empty) If we do something then
     push or pop from stack. If we penetrare (for smallest squard) then
     push if emerge then pop. We give to stack v=1 (we are penetrating)
     with input parameters. Then is a cykle. Finish work if is stack
     empty. (work is finished) If we work one course of cycle then we
     pop one data from stack. One case item muth push somedata!
     Well, it is good and what make case ?
     1 : there is penetration - decrementation of n to level 1 in
         momental situation. If you are N squard level (exm. 3) and
         you want to finish this level you muth to draw x-mal squard
         effekt N-1. This part draw lines to level 1. push(2,n,a);
     2..4 : make increment  of v. It finish level from minimalized N from
         part 1.  If v<4 then push(v+1,n,a); This command make v for end
         of N for this squardpart.

              Situation is: We are in N=3 (for example we have level of
         rekusion n=5) Part1 draw situation for 1 squard - (to smallest
         squard) and 2..4 finish all levels from 1 to momental N. (n=3)
         Then begin momental n=4. And work part 1 then 2..4. If we are
         in momental level Nm=N-1 then one don't work because it is
         finished.

         Well, it is full documentation. If you want other information,
         please see rekusion version (rekpic20.pas) or make krokuj:=true
         then you will step program in graphic mode.
     }

    uses oKor, oStack_b;

    type MyKor=object(Kor)
               Procedure Squard(n:integer; a:real);
               End;

    procedure MyKor.Squard(n:integer; a:real);
    var v:integer;
        s:Stack;
    begin
      with s do
        begin
          init;
          push(1,n,a);
          while not empty do
            begin
              pop(v,n,a);
              case v of
                1:     if n=0 then
                       else
                         begin
                           Dopredu(a); Vlavo(90);
                           push(2,n,a);
                           push(1,n-1,2*a/5);
                         end;
                2,3,4: begin
                         Dopredu(a); Vlavo(90);
                         if v<4 then push(v+1,n,a);
                         push(1,n-1,2*a/5);
                         end;
              end  {case}
            end    {while}
        end        {with}
    end;

    var k:MyKor;

    begin
      with k do
        begin
          Init(200,-200,0);
          Squard(6,400);
          PresunXY(-300,230); Pis('Squards level 6 - Norekusion');
          CakajKlaves;
          Koniec;
        End
    End.

[Back to TURTLE SWAG index] [Back to Main SWAG index] [Original]