nepriama rekurzia

Autotest

  1. Nepriama rekurzia je, ak:
    • A volá B áno nie
    • A volá B a B volá C áno nie
    • A volá B a B volá A áno nie
    • D volá A, C volá F, A volá C, F volá D áno nie

  2. Rozhodnite, v ktorých dejoch sa použiť nepriama rekurzia
    • Striedanie dňa a noci áno nie
    • Sedenie a státie

      áno nie
    • Východ a západ Slnka áno nie
    • Školský rok a letné prázdniny áno nie
    • Obiehanie Zeme okolo Slnka áno nie
    • Slnečný deň a daždivý deň áno nie

  3. Rozhodnite, pomocou ktorého príkazu v hlavnom programe sa zavolá procedúra, na vykreslenie daného obrázka.
    retiazka
      viem K1 :a  

    viem K2 :a

      ak :a>5  

    ak :a>5

      [ nechfp "modra2   [ nechfp "zelena2
        ph do :a/2     ph do :a/2
        pd     pd
        kruh :a     kruh :a
        ph     ph
        do :a/2    

    do :a/2

        pd    

    pd

        K2 :a-10    

    K1 :a-10

      ]   ]
      koniec   koniec

    K1 100 K2 100
    K1 100; K2 100 K2 100 K1 100

  4. Sú dané dve procedúry X a Y deklarované takto:
      procedure X(i:integer; n:char); forward;
      procedure Y(i:integer; n:char);
      begin
        write(n);
        X(i-1,n);
      end;
         
      procedure X(i:integer; n:char);
      begin
        if i>0 then
        begin
          Y(i,n);
          write(n);
        end
        else write('c');
      end;

    V hlavnom programe je príkaz X(3,a). Čo bude výsledkom volania procedúry X(3,a)?
    aaa
    aaac
    aaacaaa
    caaa

  5. Doplňte deklaračnú časť tohto programu tak, aby po zavolaní procedúry príkazom

    if 10 mod 2=0 then parne(10) else neparne(10)

    sme do dostali na výstupe výpis čísel od 10 po 1.
      procedure neparne(A); forward;
    procedure parne(B);
    begin
      if n>0 then
      begin
        write(n,' ');
        neparne(n-1);
      end
      else write(n);
    end;
     
    procedure neparne(A);
    begin
      write(n,' ');
      parne(n-1);
      end;

    A n:integer;   B n:float;
      n:float;     n:double;
      n:double;     n:integer;

  6. Rozhodnite, čo robí daný program
    viem Y :i :a :n viem X :i :a :n
     do :a
    vl 360*(:i-1)/:i
    X :i :a :n-1

    ak :n >0

     

    [ opakuj 3
    [do :a vl 120 ]
    Y :i :a :n
    ]
    konieckoniec 

    obrázok   obrázok
    obrázok   obrázok

  7. Rozhodnite, čo robí daný program:
    procedure X(i:integer; a,b:string); forward;
     
    procedure Y(i:integer;a,b:string);
    begin
     write(a);
    X(i-1,a,b) ;
    end;

    procedure X(i:integer;a,b:string);
    begin
     if i>0 then
    begin
      Y(i,a,b);
    write(b);
     end;
    end;

    vypíše reťazec v tvare aib i   vypíše raťazec v tvare (ab) i
    vypíše raťazec v tvare aib   vypíše raťazec v tvare (ba) i

  8. Rozhodnite, či skončí toto rekurzívne volanie x 50.
    viem X :a viem Y :a
      ak :a>5   ak :a>5
      [ nechfp "fialova4   [ nechfp "modra7
        ph do ?     ph do ?
        pd     pd
        kruh ?     kruh :a
        vl ?     vp ?
        ph     ph
        do ?     do ?
        pd     pd
        Y :a     X :a
    ]   ]
    koniec koniec

    áno   nie

  9. Doplňte chýbajúce príkazy tak, aby sa pomocou týchto procedúr dal vykresliť útvar na obrázku.
    obrázok
      viem ciaraL :a   viem C :b
      A   B
      [ do 50   [ F
        E     vl 60
        ciaraR :a-1     D
      ]   ]
      koniec   koniec

    A ak :a>0   D ciaraL :a -1
      ak :a<0     ciaraR :b-1
      ak2 :a<0[ciaraR :a]     ciaraL :b-1
             
    B ak :b>0   E vp 60
      ak :b<0     vl 60
      ak2 :b<0[ciaraL :b]     vp 30
             
    C ciaraR   F do 50
      ciaraL :a     do 25
      ciaraR :a     do 100