Ispitni zadaci sa rešenjima


(vanredni decembarski rok 2000. iz Osnova programiranja - 3. tok - 16.12.2000.)

    Zadaci

  1. Izvršiti sledeći program i ispisati dejstvo svih writeln-iskaza:
    program dokument(output); 
    var x, y, z: integer; 
    	procedure M(var w: integer); 
    	var x, y: integer; 
    		procedure N(var z: integer); 
    		var x: integer; 
    		begin 
                   x := 3; 
                   y := y+1; 
                   z := z+2; 
                   writeln( x, y, z ) 
                end; {Kraj N}
    	begin 
    		w := w+3; 
                x := w+1; 
                y := w-1; 
                N( x ); 
                writeln( x, y, z ); 
    	end; { Kraj M }
    begin 
      x := 0; 
      y := 1; 
      z := 2; 
      M(x); 
      writeln( x, y, z ); 
      M(y); 
      writeln( x, y, z ); 
      M(z);
      writeln( x, y, z ); 
    end. 								
    
  2. Za dati ceo broj n (1 <= n <= 400) generisati niz brojeva koji počinje sa 1, a završava se datim brojem n. Niz treba da bude ispisan "spiralno", polazeći "iznutra" kao u donjem primeru za n=22:
                      21 20 19 18 17 
                      22  7  6  5 16 
                          8  1  4 15 
                          9  2  3 14 
                         10 11 12 13 
    
  3. Sastaviti program koji će, koristeći rekurziju, ispisati sve moguće načine da se razmeni novčanica od 100 dinara na manje apoene (zaključno sa apoenom od jednog dinara). Voditi računa o tome da se program ne "zaglavi u beskonačnoj petlji".


    Rešenja

  1. 
    	3 5 6
    	6 5 2
    	3 1 2
    	3 6 7
    	7 6 2
    	3 4 2
    	3 7 8
    	8 7 5
    	3 4 5
    
  2. program dec00b(input,output);
    const n=20;
    var
        mat:array [1..20,1..20] of integer;
        s: array[1..4,1..2] of integer;
    {* x -- uneseni broj *}
    {* k -- brojac pocine od 1 do x *}
    {* i,j -- indeksi u matrici mat *}
    {* m -- odbrojava cetiri pravca kretanja, od 1 do 4 *}
    {* l -- duzina stranice pocinje sa 1 *}
    var x,k:integer;
        i,j:integer;
        m,l,ll:integer;
    begin {* Pravci kretanja *}
       s[1,1]:=0;  s[1,2]:=-1;
       s[2,1]:=1;  s[2,2]:=0;
       s[3,1]:=0;  s[3,2]:=1;
       s[4,1]:=-1; s[4,2]:=0;
       for i:=1 to n do
          for j:=1 to n do
              mat[i,j]:=0;
       writeln('Unesi zeljeni broj (manji od 400):');
       readln(x);
       i:=11; j:=10;
       k:=1; l:=-1;
       while (k<=x) do
       begin
          m:=0;l:=l+2; i:=i-1; j:=j+1;
          while ((m<4) and (k<=x)) do
          begin
             ll:=1;m:=m+1;
             while ((ll<=l) and (k<=x)) do
             begin
                i:=i+1*s[m,1] ; j:=j+1*s[m,2] ;
                mat[i,j]:=k;
                k:=k+1;
                ll:=ll+1
             end;
          end
       end;
       for i:=1 to n do
       begin
          for j:=1 to n-1 do
            if mat[i,j]=0 then
               write(' ':4)
            else
               write(mat[i,j]:4);
          writeln
       end
    end.
    
  3. program dec00c(input,output);
    var vrednost,num: array[1..5] of integer;
    procedure Razmeni(Ostatak,Nivo: Integer);
    var novcanice: Integer;
        i: Integer;
    begin
       if Nivo=5 then
       begin
          num[5]:=Ostatak;
          for i:=1 to 5 do write(num[i]:5);
          writeln
       end
       else
       begin
          novcanice:=Ostatak div vrednost[Nivo];
          repeat
             num[Nivo]:=novcanice;
             Razmeni(Ostatak - novcanice*vrednost[Nivo],Nivo + 1);
             novcanice:=novcanice-1
          until (novcanice<0)
       end
    end;
    begin
       vrednost[1]:=50; vrednost[2]:=20; vrednost[3]:=10; vrednost[4]:=5; vrednost[5]:=1;
       Razmeni(100,1);
    end.
    

    Deo rezultata izvršavanja izgleda ovako:

        2    0    0    0    0
        1    2    1    0    0
        1    2    0    2    0
        1    2    0    1    5
        1    2    0    0   10
        1    1    3    0    0
        1    1    2    2    0
        1    1    2    1    5
        1    1    2    0   10
        1    1    1    4    0
        1    1    1    3    5
        1    1    1    2   10
        1    1    1    1   15
        1    1    1    0   20
        1    1    0    6    0
    ...............................
        1    0    0    2   40
        1    0    0    1   45
        1    0    0    0   50
        0    5    0    0    0
        0    4    2    0    0
        0    4    1    2    0
        0    4    1    1    5
        0    4    1    0   10
        0    4    0    4    0
        0    4    0    3    5
        0    4    0    2   10
        0    4    0    1   15
        0    4    0    0   20
        0    3    4    0    0
    ...............................
        0    0    0    9   55
        0    0    0    8   60
        0    0    0    7   65
        0    0    0    6   70
        0    0    0    5   75
        0    0    0    4   80
        0    0    0    3   85
        0    0    0    2   90
        0    0    0    1   95
        0    0    0    0  100