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.
Пример другог испитног задатка:<br />
Датим типовима података се представљају спортски клубови у једном граду. Тип PokKlub служи за представљање листе<br />
клубова. Ова листа је уређена растуће по именима клубова. Клуб је представљен слогом типа SlogKlub који између осталог<br />
садржи име клуба и двоструко повезану листу чланова клуба. Ова листа је уређена неопадајуће по висини члана и<br />
неопадајуће по тежини члана, тако да clanoviVis показује на најнижег члана у клубу, а clanoviTez на најлакшег. Члан клуба<br />
је представљен слогом типа SlogClan у којем се чувају име члана, његова висина и тежина. Написати следеће процедуре:<br />
String = ARRAY [1..50] OF CHAR;<br />
PokKlub = POINTER TO SlogKlub;<br />
PokClan = POINTER TO SlogClan;<br />
SlogKlub = RECORD<br />
imeK: String;<br />
clanoviVis,<br />
clanoviTez: PokClan;<br />
ve<strong>za</strong>: PokKlub<br />
END;<br />
SlogClan = RECORD<br />
imeC: String;<br />
tezina,<br />
visina: CARDINAL;<br />
ve<strong>za</strong>Vis,<br />
ve<strong>za</strong>Tez: PokClan<br />
END;<br />
• Ucitaj(imeFajla: ARRAY OF CHAR; VAR k: PokKlub) –<br />
која из фајла imeFajla учитава податке о клубовима у параметар k.<br />
Сваки ред фајла се односи на један клуб. Ред почиње јединственим<br />
именом клуба, а у наставку се за сваког члана наводе његово име,<br />
висина и тежина. Сви подаци су међусобно раздвојени по једним<br />
бланко знаком. Претпоставити да се у именима клубова и чланова не<br />
појављују бланко знаци.<br />
• Ujedini(VAR k: PokKlub; ime1, ime2, imeNovog:<br />
String) – којом се ажурира структура када се клуб ime1 и ime2<br />
уједине у нови клуб imeNovog (након уједињења клубови ime1 и<br />
ime2 више не постоје). Водити рачуна о томе да једна особа може<br />
бити члан више спортских клубова.<br />
MODULE Klubovi;<br />
FROM FIO IMPORT File, EOF, RdCard, RdItem, Seek, GetPos,<br />
RdChar, Open, Close, Exists, Separators;<br />
FROM Storage IMPORT ALLOCATE, DEALLOCATE;<br />
FROM SYSTEM IMPORT TSIZE;<br />
FROM Str IMPORT Compare;<br />
FROM InOut IMPORT WriteString, WriteCard, WriteLn,<br />
Write;<br />
TYPE<br />
String = ARRAY [1..50] OF CHAR;<br />
PokKlub = POINTER TO SlogKlub;<br />
PokClan = POINTER TO SlogClan;<br />
SlogKlub = RECORD<br />
imeK: String;<br />
clanoviVis, clanoviTez: PokClan;<br />
ve<strong>za</strong>: PokKlub<br />
END;<br />
SlogClan = RECORD<br />
imeC: String;<br />
tezina, visina: CARDINAL;<br />
ve<strong>za</strong>Vis, ve<strong>za</strong>Tez: PokClan<br />
END;<br />
PROCEDURE UbaciK(VAR glavni: PokKlub; pomocni:<br />
PokKlub);<br />
VAR<br />
temp: PokKlub;<br />
BEGIN<br />
IF (glavni = NIL) OR (Compare(glavni^.imeK,<br />
pomocni^.imeK) >= 0) THEN<br />
pomocni^.ve<strong>za</strong> := glavni;<br />
glavni := pomocni<br />
ELSE<br />
temp := glavni;<br />
WHILE (temp^.ve<strong>za</strong> # NIL) AND<br />
(Compare(temp^.ve<strong>za</strong>^.imeK, pomocni^.imeK) < 0) DO<br />
temp := temp^.ve<strong>za</strong><br />
END;<br />
pomocni^.ve<strong>za</strong> := temp^.ve<strong>za</strong>;<br />
temp^.ve<strong>za</strong> := pomocni<br />
END<br />
END UbaciK;<br />
PROCEDURE UbaciC(VAR glavniVis, glavniTez: PokClan;<br />
pomocni: PokClan);<br />
VAR<br />
temp: PokClan;<br />
BEGIN<br />
IF (glavniVis = NIL) OR (glavniVis^.visina >=<br />
pomocni^.visina) THEN<br />
pomocni^.ve<strong>za</strong>Vis := glavniVis;<br />
glavniVis := pomocni<br />
ELSE<br />
temp := glavniVis;<br />
12<br />
WHILE (temp^.ve<strong>za</strong>Vis # NIL) AND<br />
(temp^.ve<strong>za</strong>Vis^.visina < pomocni^.visina) DO<br />
temp := temp^.ve<strong>za</strong>Vis<br />
END;<br />
pomocni^.ve<strong>za</strong>Vis := temp^.ve<strong>za</strong>Vis;<br />
temp^.ve<strong>za</strong>Vis := pomocni<br />
END;<br />
IF (glavniTez = NIL) OR (glavniTez^.tezina >=<br />
pomocni^.tezina) THEN<br />
pomocni^.ve<strong>za</strong>Tez := glavniTez;<br />
glavniTez := pomocni<br />
ELSE<br />
temp := glavniTez;<br />
WHILE (temp^.ve<strong>za</strong>Tez # NIL) AND<br />
(temp^.ve<strong>za</strong>Tez^.tezina < pomocni^.tezina) DO<br />
temp := temp^.ve<strong>za</strong>Tez<br />
END;<br />
pomocni^.ve<strong>za</strong>Tez := temp^.ve<strong>za</strong>Tez;<br />
temp^.ve<strong>za</strong>Tez := pomocni<br />
END<br />
END UbaciC;<br />
PROCEDURE Ucitaj(imeFajla: ARRAY OF CHAR; VAR k:<br />
PokKlub);<br />
PROCEDURE CitajDalje(file: File; VAR char: CHAR);<br />
BEGIN<br />
Seek(file, GetPos(file)-1);<br />
REPEAT<br />
char := RdChar(file)<br />
UNTIL EOF OR NOT (char IN Separators) OR (char<br />
= CHR(13));<br />
IF NOT EOF AND (char # CHR(13)) THEN<br />
Seek(file, GetPos(file)-1)<br />
END<br />
END CitajDalje;<br />
VAR<br />
f: File;<br />
ch: CHAR;<br />
pomK: PokKlub;<br />
pomC: PokClan;<br />
str: String;<br />
card: CARDINAL;<br />
BEGIN<br />
k := NIL;<br />
IF Exists(imeFajla) THEN<br />
f := Open(imeFajla);<br />
RdItem(f, str);<br />
WHILE NOT EOF DO<br />
NEW(pomK);