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.
WriteInt(Max,3);<br />
WriteString(' u intervalu od ');<br />
WriteCard(Ood,3);<br />
WriteString(' do ');<br />
WriteCard(Doo,3)<br />
END MaxNi<strong>za</strong>1.<br />
MODULE MaxNi<strong>za</strong>2;<br />
(* Drugo resenje: O(n^2). Koristi se cinjenica da je<br />
suma X[d..g] <strong>iz</strong>racunljiva <strong>iz</strong> X[d..g-1]. *)<br />
FROM InOut IMPORT<br />
WriteString,ReadInt,WriteInt,WriteCard,WriteLn;<br />
CONST<br />
N = 10;<br />
TYPE<br />
Interval = [1..N];<br />
VAR<br />
Max, Suma : INTEGER;<br />
d,g,i,Ood,Doo : Interval;<br />
X : ARRAY Interval OF INTEGER;<br />
BEGIN<br />
WriteString(' Unesite n<strong>iz</strong> X ');<br />
WriteLn;<br />
FOR i := 1 TO N DO<br />
ReadInt(X[i]);<br />
WriteLn<br />
END;<br />
Max := 0;<br />
FOR d := 1 TO N DO<br />
Suma := 0;<br />
FOR g := d TO N DO<br />
Suma := Suma + X[g];<br />
IF Suma > Max THEN<br />
Max := Suma;<br />
Ood := d;<br />
Doo := g<br />
END<br />
END<br />
END;<br />
WriteLn;<br />
WriteString(' Maksimum je ');<br />
WriteInt(Max,3);<br />
WriteString(' u intervalu od ');<br />
WriteCard(Ood,3);<br />
WriteString(' do ');<br />
WriteCard(Doo,3)<br />
END MaxNi<strong>za</strong>2.<br />
MODULE MaxNi<strong>za</strong>3;<br />
(* Trece resenje: O(n^2). Koristi pomocni n<strong>iz</strong> u kome je<br />
na i-tom mestu suma podni<strong>za</strong> x[1..i] *)<br />
FROM InOut IMPORT<br />
WriteString,ReadInt,WriteInt,WriteCard,WriteLn;<br />
CONST<br />
N = 10;<br />
TYPE<br />
Interval = [1..N];<br />
VAR<br />
Max, Suma : INTEGER;<br />
d,g,i,Ood,Doo : Interval;<br />
X : ARRAY Interval OF INTEGER;<br />
Pom : ARRAY [0..N] OF INTEGER;<br />
BEGIN<br />
WriteString(' Unesite n<strong>iz</strong> X ');<br />
WriteLn;<br />
FOR i := 1 TO N DO<br />
ReadInt(X[i]);<br />
WriteLn<br />
END;<br />
Pom[0] := 0;<br />
FOR i := 1 TO N DO<br />
Pom[i] := Pom[i-1] + X[i]<br />
END;<br />
Max := 0;<br />
FOR d := 1 TO N DO<br />
FOR g := d TO N DO<br />
Suma := Pom[g] - Pom[d-1];<br />
IF Suma > Max THEN<br />
Max := Suma;<br />
Ood := d;<br />
Doo := g<br />
END<br />
END<br />
END;<br />
WriteLn;<br />
WriteString(' Maksimum je ');<br />
WriteInt(Max,3);<br />
WriteString(' u intervalu od ');<br />
3<br />
WriteCard(Ood,3);<br />
WriteString(' do ');<br />
WriteCard(Doo,3)<br />
END MaxNi<strong>za</strong>3.<br />
MODULE MaxNi<strong>za</strong>4;<br />
(* Cetvrto resenje. Najbolje moguce: O(n) *)<br />
FROM InOut IMPORT<br />
WriteString,ReadInt,WriteInt,WriteCard,WriteLn;<br />
CONST<br />
N = 10;<br />
TYPE<br />
Interval = [1..N];<br />
VAR<br />
Max, MaxDovde : INTEGER;<br />
i,d,Ood,Doo : Interval;<br />
X : ARRAY Interval OF INTEGER;<br />
BEGIN<br />
WriteString(' Unesite n<strong>iz</strong> X ');<br />
WriteLn;<br />
FOR i := 1 TO N DO<br />
ReadInt(X[i]);<br />
WriteLn<br />
END;<br />
Max := 0;<br />
MaxDovde := 0;<br />
FOR i := 1 TO N DO<br />
IF MaxDovde = 0 THEN<br />
d := i<br />
END;<br />
MaxDovde := MaxDovde + X[i];<br />
IF MaxDovde < 0 THEN<br />
MaxDovde := 0<br />
END;<br />
IF MaxDovde > Max THEN<br />
Ood := d;<br />
Doo := i;<br />
Max := MaxDovde<br />
END<br />
END;<br />
WriteLn;<br />
WriteString(' Maksimum je ');<br />
WriteInt(Max,3);<br />
WriteString(' u intervalu od ');<br />
WriteCard(Ood,3);<br />
WriteString(' do ');<br />
WriteCard(Doo,3)<br />
END MaxNi<strong>za</strong>4.<br />
ZADATAK: Ilustracija rada sa nekim standardnim modulima.<br />
MODULE Primer;<br />
FROM InOut IMPORT ReadString, ReadCard, Read, WriteLn,<br />
WriteString, WriteCard;<br />
FROM FIO IMPORT File, StandardOutput, PrinterDevice,<br />
Create, Close, Exists, WrCard, WrStr, WrReal, WrLn,<br />
WrChar, WrLngReal;<br />
FROM Str IMPORT Length, Slice;<br />
FROM Lib IMPORT Sound, NoSound, Delay;<br />
FROM MATHLIB IMPORT Sqrt, Log;<br />
CONST<br />
Gr = 5;<br />
TYPE<br />
string = ARRAY [1..50] OF CHAR;<br />
podatakTip = RECORD<br />
UcitString : string;<br />
UcitBroj : CARDINAL<br />
END;<br />
VAR<br />
imedat : string;<br />
UlazniPod : ARRAY [1..Gr] OF podatakTip;<br />
PodStr : ARRAY [1..4] OF CHAR;<br />
<strong>iz</strong>laz : File;<br />
i, frekv : CARDINAL;<br />
<strong>iz</strong>bor : CHAR;<br />
BEGIN<br />
REPEAT<br />
WriteString('p - <strong>iz</strong>laz na printer');<br />
WriteLn;<br />
WriteString('f - <strong>iz</strong>laz u fajl');<br />
WriteLn;<br />
WriteString('e - ekran');<br />
WriteLn;<br />
Read(<strong>iz</strong>bor)<br />
UNTIL (CAP(<strong>iz</strong>bor) = 'P') OR (CAP(<strong>iz</strong>bor) = 'F') OR<br />
(CAP(<strong>iz</strong>bor) = 'E');<br />
IF CAP(<strong>iz</strong>bor) = 'P' THEN<br />
<strong>iz</strong>laz := PrinterDevice;