26.02.2015 Views

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

SHOW MORE
SHOW LESS

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!