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.

Пример другог испитног задатка:<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);

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

Saved successfully!

Ooh no, something went wrong!