Zadaci
- 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.
- 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
- 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
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
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.
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
|