Advertisement
pseudocreator

SPA1 stack (kolokvijum)

May 30th, 2014
618
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. MODULE stek;
  2. (*Rad nad stekovima*)
  3. (*Korisceni InfoTip je INTEGER, da bi se kao takav koristio, u Info.def promeniti
  4. char(default) u integer*)
  5. FROM InOut IMPORT WriteString, WriteLn, WriteInt, ReadInt;
  6. FROM FIO IMPORT File, Open, Create, Close, WrInt, RdInt, WrLn, EOF;
  7. FROM Stek IMPORT StekTip, Top, Pop, Push, MakeNull, Empty;
  8. CONST
  9.      fu = "ispis.txt";
  10.      br = "brojevi.txt"
  11. VAR
  12.    f : File;
  13.    k : INTEGER;
  14.    s, q, w : StekTip;
  15.    ok : BOOLEAN;
  16.  
  17. (*iz fajla upisuje elemente u stek*)
  18. (*Proveriti!!! ponekad ne radi ova procedura*)
  19. PROCEDURE unizf(VAR s: StekTip;VAR ok: BOOLEAN);
  20. VAR
  21.    f: File;
  22.    n: INTEGER;
  23. BEGIN
  24.      MakeNull(s);
  25.      EOF := FALSE;
  26.      ok := TRUE;
  27.      f := Open(br);
  28.      WHILE (NOT EOF) AND (ok) DO
  29.           n := RdInt(f);
  30.           Push(s,n,ok)
  31.      END;
  32.      Close(f);
  33. END unizf;
  34.  
  35. (*ispisuje elemente iz steka u zadati fajl*)
  36. PROCEDURE iuf(s: StekTip);
  37. VAR
  38.    f: File;
  39.    n: INTEGER;
  40.    ok: BOOLEAN;
  41. BEGIN
  42.      f := Create(fu);
  43.      ok := TRUE;
  44.      WHILE (NOT Empty(s)) AND (ok) DO
  45.           Top(s,n,ok);
  46.           WrInt(f,n,0);
  47.           WrLn(f);
  48.           Pop(s,ok)
  49.      END;
  50.      Close(f);
  51. END iuf;
  52.  
  53. (*stampanje steka*)
  54. PROCEDURE ispissteka(s: StekTip);
  55. VAR
  56.    ok : BOOLEAN;
  57.    n : INTEGER;
  58. BEGIN
  59.      IF NOT Empty(s) THEN
  60.         ok := TRUE;
  61.         WHILE (NOT Empty(s)) AND ok DO
  62.               Top(s, n, ok);
  63.               WriteInt(n,0);
  64.               WriteLn;
  65.               Pop(s,ok)
  66.         END
  67.      ELSE
  68.          WriteString("Nema elemenata za stampanje =====");
  69.          WriteLn;
  70.      END;
  71. END ispissteka;
  72.  
  73. (*uklanjamo elemente iz steka, Postoji procedura MakeNull(stel) *)
  74. PROCEDURE ispraznistek(VAR s: StekTip);
  75. VAR
  76.    ok : BOOLEAN;
  77. BEGIN
  78.      WHILE NOT Empty(s) DO
  79.           Pop(s,ok)
  80.      END;
  81. END ispraznistek;
  82.  
  83. (*od dva steka kreira se jedan novi*)
  84. PROCEDURE proc1(q,w: StekTip;VAR s: StekTip;VAR ok: BOOLEAN);
  85. VAR
  86.    n : INTEGER;
  87.    qem, wem : BOOLEAN;
  88. BEGIN
  89.      MakeNull(s);
  90.      qem := Empty(q);
  91.      wem := Empty(w);
  92.      ok := TRUE;
  93.      WHILE (NOT qem) OR (NOT wem) DO
  94.           IF NOT qem THEN
  95.            Top(q,n,ok);
  96.            IF ok THEN
  97.              Push(s,n,ok);
  98.              Pop(q,ok)
  99.            END
  100.          END;
  101.          IF NOT wem THEN
  102.            Top(w,n,ok);
  103.            IF ok THEN
  104.              Push(s,n,ok);
  105.              Pop(w,ok)
  106.            END
  107.          END;
  108.          qem := Empty(q);
  109.          wem := Empty(w)
  110.      END
  111. END proc1;
  112.  
  113. (*od jednog steka kreairaju se dva*)
  114. PROCEDURE provera(s: StekTip): BOOLEAN;
  115. VAR
  116.    ok : BOOLEAN;
  117. BEGIN
  118.      IF NOT Empty(s) THEN
  119.        Pop(s,ok);
  120.        IF NOT Empty(s) THEN
  121.          RETURN FALSE;
  122.        END
  123.      END;
  124.      RETURN TRUE
  125. END provera;
  126.  
  127. PROCEDURE proc2(s: StekTip;VAR q,w: StekTip);
  128. VAR
  129.    turn, ok : BOOLEAN;
  130.    n: INTEGER;
  131. BEGIN
  132.      IF NOT provera(s) THEN
  133.        MakeNull(q);
  134.        MakeNull(w);
  135.        turn := TRUE;
  136.        ok := TRUE;
  137.        WHILE (NOT Empty(s)) DO
  138.             IF turn THEN
  139.               Top(s,n,ok);
  140.               IF ok THEN
  141.                 Push(q,n,ok);
  142.                 Pop(s,ok)
  143.               END;
  144.               turn := NOT turn
  145.             END;
  146.  
  147.             IF NOT turn THEN
  148.               Top(s,n,ok);
  149.               IF ok THEN
  150.                 Push(w,n,ok);
  151.                 Pop(s,ok)
  152.               END;
  153.               turn := NOT turn
  154.             END
  155.        END
  156.      ELSE
  157.          IF (NOT Empty(s)) THEN
  158.            MakeNull(q);
  159.            Top(s,n,ok);
  160.            Push(q,n,ok)
  161.          ELSE
  162.              WriteString("Pocetni stek je prazan! ")
  163.          END
  164.      END
  165. END proc2;
  166.  
  167. (*Sa vrha steka ukloniti (neki uslov)*)
  168. PROCEDURE jednocifren(n: INTEGER): BOOLEAN;
  169. BEGIN
  170.      IF (n DIV 10 = 0) THEN
  171.        RETURN TRUE;
  172.      ELSE
  173.         RETURN FALSE;
  174.      END
  175. END jednocifren;
  176.  
  177. PROCEDURE proc3(VAR s: StekTip);
  178. VAR
  179.    pr, ok : BOOLEAN;
  180.    n : INTEGER;
  181. BEGIN
  182.      IF NOT Empty(s) THEN
  183.        pr := TRUE;
  184.        WHILE  (NOT Empty(s)) AND (pr) DO
  185.              Top(s,n,ok);
  186.              (*ubaciti neki drugi uslov*)
  187.              IF (jednocifren(n)) THEN
  188.                Pop(s,ok)
  189.              ELSE
  190.                  pr := FALSE
  191.              END
  192.        END
  193.      ELSE
  194.          WriteString("Nema elemenata u prosledjenom steku!");
  195.      END;
  196. END proc3;
  197.  
  198. BEGIN
  199.      MakeNull(s);
  200.      Push(s,12,ok);
  201.       Push(s,22,ok);
  202.        Push(s,3,ok);
  203.         Push(s,10,ok);
  204.  
  205.      MakeNull(q);
  206.      Push(q,12,ok);
  207.       Push(q,22,ok);
  208.        Push(q,3,ok);
  209.         Push(q,10,ok);
  210.  
  211.  
  212.      MakeNull(w);
  213.      Push(w,12,ok);
  214.       Push(w,22,ok);
  215.        Push(w,3,ok);
  216.         Push(w,10,ok);
  217.  
  218.      ispissteka(s); WriteLn;
  219.      ispissteka(q); WriteLn;
  220.      ispissteka(w); WriteLn;
  221.  
  222.      (*ubaciti procedure za koriscenje*)
  223.  
  224. END stek.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement