Advertisement
pseudocreator

SPA1 red opsluzivanja/FIFO (kolokvijum)

May 31st, 2014
567
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. MODULE frop;
  2. FROM InOut IMPORT WriteString, WriteLn, WriteInt, ReadInt;
  3. FROM FIO IMPORT File, Open, Create, Close, WrInt, RdInt, WrLn, EOF, Exists;
  4. FROM RedOpsl IMPORT RedOpslTip, First,PopFirst,AddRear, MakeNull, Empty;
  5.  
  6. (*Rad nad redom opsluzivanja, First In First Out*)
  7. (*Korisceni InfoTip je INTEGER, da bi se kao takav koristio, u Info.def promeniti
  8. char(default) u integer*)
  9.  
  10. CONST
  11.      upis = "upis.txt";
  12.      unos = "upis.txt";
  13.  
  14. (*Ucitava elemente u rop*)
  15. PROCEDURE dodaj(VAR r: RedOpslTip; n: INTEGER);
  16. VAR
  17.    ok : BOOLEAN;
  18. BEGIN
  19.      AddRear(r,n,ok);
  20. END dodaj;
  21.  
  22. PROCEDURE unosur(VAR r: RedOpslTip);
  23. VAR
  24.    be, n, i : INTEGER;
  25. BEGIN
  26.      WriteString("Broj elemenata za unos: ");
  27.      ReadInt(be);
  28.      WriteString("Unos elemenata "); WriteLn;
  29.      MakeNull(r);
  30.      FOR i := 1 TO be DO
  31.         WriteInt(i,2);
  32.         WriteString(". element: ");
  33.         ReadInt(n);
  34.         dodaj(r,n);
  35.         WriteLn
  36.      END;
  37. END unosur;
  38.  
  39. (*stampa elemente iz rop*)
  40. PROCEDURE stampajrop(r: RedOpslTip);
  41. VAR
  42.    ok : BOOLEAN;
  43.    n : INTEGER;
  44. BEGIN
  45.      IF NOT Empty(r) THEN
  46.        WriteLn;
  47.        WriteString("Stampanje rop-a: ");
  48.        WriteLn;
  49.        ok := TRUE;
  50.        WHILE (NOT Empty(r)) AND (ok) DO
  51.             First(r,n,ok);
  52.             IF ok THEN
  53.               WriteInt(n,0);
  54.               WriteString("  ");
  55.               PopFirst(r,ok);
  56.             END
  57.        END
  58.      ELSE
  59.          WriteString("Nema elemenata u unetom rop-u. ");
  60.      END
  61. END stampajrop;
  62.  
  63. (*uklanjanje elemenata iz rop-a*)
  64. PROCEDURE ispraznirop(VAR r: RedOpslTip);
  65. VAR
  66.    ok : BOOLEAN;
  67. BEGIN
  68.      IF NOT Empty(r) THEN
  69.        WHILE (NOT Empty(r)) DO
  70.             PopFirst(r,ok)
  71.        END
  72.      END
  73. END ispraznirop;
  74.  
  75. (*ispisuje elemente iz ropa u zadati fajl*)
  76. PROCEDURE iruf(r: RedOpslTip);
  77. VAR
  78.    f : File;
  79.    n : INTEGER;
  80.    ok : BOOLEAN;
  81. BEGIN
  82.      IF NOT Empty(r) THEN
  83.        IF Exists(upis) THEN
  84.          f := Open(upis)
  85.        ELSE
  86.          f := Create(upis)
  87.        END;
  88.        WHILE (NOT Empty(r)) DO
  89.             First(r,n,ok);
  90.             WrInt(f,n,0);
  91.             WrLn(f);
  92.             PopFirst(r,ok)
  93.        END;
  94.        Close(f);
  95.      END;
  96. END iruf;
  97.  
  98. (*iz fajla upisuje elemente u rop*)
  99. (*Proveriti!!! ponekad ne radi ova procedura*)
  100. PROCEDURE urop(VAR r: RedOpslTip);
  101. VAR
  102.    ok : BOOLEAN;
  103.    f : File;
  104.    n : INTEGER;
  105. BEGIN
  106.      IF Exists(unos) THEN
  107.        MakeNull(r);
  108.        EOF := FALSE;
  109.        ok := TRUE;
  110.        f := Open(unos);
  111.        WHILE (NOT EOF) AND (ok) DO
  112.            n := RdInt(f);
  113.            AddRear(r,n,ok)
  114.        END;
  115.        Close(f);
  116.      ELSE
  117.          WriteString("Greska pri upisu, nepostojeci fajl! ")
  118.      END
  119. END urop;
  120.  
  121. (*u rop-u uklanja sa pocetka brojeve vece od svog sledbenika*)
  122. PROCEDURE dvaelem(r: RedOpslTip): BOOLEAN;
  123. BEGIN
  124.      IF NOT Empty(r) THEN
  125.        IF NOT Empty(r) THEN
  126.          RETURN TRUE;
  127.        END
  128.      END;
  129.      RETURN FALSE;
  130. END dvaelem;
  131.  
  132. PROCEDURE sledeci(r: RedOpslTip; VAR x: INTEGER);
  133. VAR
  134.    ok : BOOLEAN;
  135.  
  136. BEGIN
  137.      PopFirst(r,ok);
  138.      First(r,x,ok)
  139. END sledeci;
  140.  
  141. PROCEDURE ukirop(VAR r: RedOpslTip);
  142. VAR
  143.    t, s : INTEGER;
  144.    ok : BOOLEAN;
  145. BEGIN
  146.      IF dvaelem(r) THEN
  147.        ok := TRUE;
  148.        WHILE (dvaelem(r)) AND (ok) DO
  149.             sledeci(r,s);
  150.             First(r,t,ok);
  151.             IF t > s THEN
  152.               PopFirst(r,ok)
  153.             ELSE
  154.                 ok := FALSE
  155.             END
  156.        END;
  157.      ELSE
  158.          WriteString("Nema najmanje dva elementa. ")
  159.      END
  160. END ukirop;
  161.  
  162. (*rop podeliti na dva ropa sa parnim/neparnim brojevima*)
  163. PROCEDURE neparni(n: INTEGER; VAR nr: RedOpslTip; p1: BOOLEAN);
  164. VAR
  165.    ok : BOOLEAN;
  166. BEGIN
  167.      IF NOT p1 THEN
  168.        MakeNull(nr)
  169.      END;
  170.      AddRear(nr,n,ok);
  171. END neparni;
  172.  
  173. PROCEDURE parni(n: INTEGER; VAR pr: RedOpslTip; p2: BOOLEAN);
  174. VAR
  175.    ok : BOOLEAN;
  176. BEGIN
  177.      IF NOT p2 THEN
  178.        MakeNull(pr)
  179.      END;
  180.      AddRear(pr,n,ok);
  181. END parni;
  182.  
  183. PROCEDURE qonquer(r: RedOpslTip; VAR nr, pr: RedOpslTip);
  184. VAR
  185.    p1, p2 : BOOLEAN;
  186.    n : INTEGER;
  187.    ok : BOOLEAN;
  188.  
  189. BEGIN
  190.      IF NOT Empty(r) THEN
  191.        p1 := FALSE;
  192.        p2 := FALSE;
  193.        ok := TRUE;
  194.        WHILE (NOT Empty(r)) AND (ok) DO
  195.             First(r,n,ok);
  196.             IF n MOD 2 = 1 THEN
  197.               neparni(n,nr,p1);
  198.               p1 := TRUE;
  199.             ELSE
  200.                 parni(n,pr,p2);
  201.                 p2 := TRUE;
  202.             END;
  203.             PopFirst(r,ok);
  204.        END
  205.      ELSE
  206.          WriteString("Nema elemenata u pozvanom rop-u. ")
  207.      END
  208. END qonquer;
  209.  
  210.  
  211. VAR
  212.    r1, r2, r3: RedOpslTip;
  213.    ok : BOOLEAN;
  214.  
  215. BEGIN
  216.      MakeNull(r1);
  217.      AddRear(r1,5,ok);
  218.       AddRear(r1,5,ok);
  219.        AddRear(r1,4,ok);
  220.         AddRear(r1,4,ok);
  221.           AddRear(r1,3,ok);
  222.  
  223.     qonquer(r1, r2, r3);
  224.  
  225.     WriteLn;
  226.     WriteLn;
  227.     stampajrop(r1);
  228.  
  229.     WriteLn;
  230.     WriteLn;
  231.     stampajrop(r2);
  232.  
  233.     WriteLn;
  234.     WriteLn;
  235.     stampajrop(r3);
  236.  
  237. END frop.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement