Skripte za vezbe iz SPA1 - Univerzitet u Novom Sadu
Skripte za vezbe iz SPA1 - Univerzitet u Novom Sadu
Skripte za vezbe iz SPA1 - Univerzitet u Novom Sadu
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
BEGIN<br />
REPEAT<br />
WrStr('n = ');<br />
n := RdCard();<br />
WrLn<br />
UNTIL OK;<br />
WrStr('n! = ');<br />
RFakto(n, rez);<br />
WrLngCard(rez, 1);<br />
WrStr(' = ');<br />
SFakto(n, rez);<br />
WrLngCard(rez, 1)<br />
END Faktor.<br />
5. (ispitni)<br />
MODULE Rek1;<br />
FROM Stek1 IMPORT Stack, adresa, InfoTip, MakeNull,<br />
Empty, Top, Pop, Push;<br />
IMPORT IO;<br />
VAR<br />
X : ARRAY [1..20] OF INTEGER;<br />
PROCEDURE Max(d, g: INTEGER) : INTEGER;<br />
VAR<br />
m1, m2 : INTEGER;<br />
BEGIN<br />
IF d>g THEN<br />
RETURN MIN(INTEGER)<br />
ELSIF d=g THEN<br />
RETURN X[d]<br />
ELSE<br />
m1 := Max(d, (d+g) DIV 2);<br />
m2 := Max((d+g) DIV 2 +1, g);<br />
IF m1 > m2 THEN<br />
RETURN m1<br />
ELSE<br />
RETURN m2<br />
END<br />
END<br />
END Max;<br />
PROCEDURE SMax(d, g: INTEGER) : INTEGER;<br />
VAR<br />
S : Stack;<br />
el : InfoTip;<br />
ok, jos : BOOLEAN;<br />
m1, m2, rez : INTEGER;<br />
BEGIN<br />
MakeNull(S);<br />
REPEAT<br />
WHILE dg THEN<br />
rez := MIN(INTEGER)<br />
ELSE (* d=g *)<br />
rez := X[d]<br />
END;<br />
jos := TRUE;<br />
WHILE jos AND NOT Empty(S) DO<br />
Top(S, el, ok);<br />
Pop(S, ok);<br />
d := el.d;<br />
g := el.g;<br />
m1 := el.m1;<br />
IF el.adr = prvi THEN<br />
m1 := rez;<br />
el.m1 := m1;<br />
el.adr := drugi;<br />
Push(S, el, ok);<br />
d := (d+g) DIV 2 + 1;<br />
jos := FALSE<br />
ELSE (*el.adr = drugi*)<br />
m2 := rez;<br />
IF m1 > m2 THEN<br />
rez := m1<br />
ELSE<br />
rez := m2<br />
END<br />
END<br />
END<br />
UNTIL Empty(S);<br />
RETURN rez<br />
END SMax;<br />
11<br />
BEGIN (* glavni program *)<br />
X[1] := 3;<br />
X[2] := 2;<br />
X[3] := 5;<br />
X[4] := -7;<br />
X[5] := 0;<br />
IO.WrCard(Max(1, 5), 3);<br />
IO.WrLn;<br />
IO.WrCard(SMax(1, 5), 3);<br />
IO.WrLn<br />
END Rek1.<br />
6. (ispitni)<br />
MODULE Rek2;<br />
FROM Stek2 IMPORT Stack, adresa, InfoTip, MakeNull,<br />
Empty, Top, Pop, Push;<br />
IMPORT IO;<br />
PROCEDURE g(x : CARDINAL; y : CARDINAL; n : CARDINAL) :<br />
CARDINAL;<br />
BEGIN<br />
IF n < 3 THEN<br />
RETURN x + y<br />
ELSIF ODD(n) THEN<br />
RETURN g(g(x+1, y, n-2), y, n-3)<br />
ELSE<br />
RETURN g(x, g(x, y+1, n-2), n-3)<br />
END<br />
END g;<br />
PROCEDURE Sg(x : CARDINAL; y : CARDINAL; n : CARDINAL)<br />
: CARDINAL;<br />
VAR<br />
S : Stack;<br />
el : InfoTip;<br />
ok, jos : BOOLEAN;<br />
rez : CARDINAL;<br />
BEGIN<br />
MakeNull(S);<br />
REPEAT<br />
WHILE n >= 3 DO<br />
IF ODD(n) THEN<br />
el.x := x;<br />
el.y := y;<br />
el.n := n;<br />
el.adr := prvi;<br />
Push(S, el, ok);<br />
INC(x);<br />
DEC(n, 2)<br />
ELSE<br />
el.x := x;<br />
el.y := y;<br />
el.n := n;<br />
el.adr := treci;<br />
Push(S, el, ok);<br />
INC(y);<br />
DEC(n, 2)<br />
END<br />
END;<br />
rez := x+y;<br />
jos := TRUE;<br />
WHILE jos AND NOT Empty(S) DO<br />
Top(S, el, ok);<br />
Pop(S, ok);<br />
x := el.x;<br />
y := el.y;<br />
n := el.n;<br />
IF el.adr = prvi THEN<br />
el.adr := drugi;<br />
Push(S, el, ok);<br />
x := rez;<br />
DEC(n, 3);<br />
jos := FALSE<br />
ELSIF el.adr = treci THEN<br />
el.adr := cetvrti;<br />
Push(S, el, ok);<br />
y := rez;<br />
DEC(n, 3);<br />
jos := FALSE<br />
END<br />
END<br />
UNTIL Empty(S);<br />
RETURN rez<br />
END Sg;<br />
BEGIN (* glavni program *)<br />
IO.WrCard(g(2, 3, 10), 3);<br />
IO.WrCard(Sg(2, 3, 10), 3);<br />
END Rek2.