Advertisement
pseudocreator

SPA1 lista r/Advanced

Mar 28th, 2014
411
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. MODULE zadatak;
  2. (*Izvinjavam se ukoliko postoji neka greska, ali zbog velikog broja procedura mogla je da se zadesi veoma lako*)
  3. (*u nekoliko testiranja, nije primecna nijedna, ali ukoliko naletite na neku javite //lazarsavic94@hotmail.com*)
  4. FROM InOut IMPORT WriteString, WriteLn, ReadInt, WriteInt;
  5. FROM Storage IMPORT ALLOCATE, DEALLOCATE;
  6. FROM IO IMPORT RdKey;
  7.  
  8. TYPE
  9.     skup = SET OF CHAR;
  10.     pok = POINTER TO Slog;
  11.     Slog = RECORD
  12.               kinf : INTEGER;
  13.               veza : pok
  14.            END;
  15.     proc = PROCEDURE(VAR pok,INTEGER);
  16.  
  17. VAR
  18.    lista1, lista2, lista3 : pok;
  19.    menu : CHAR;
  20.    k, br : INTEGER;
  21.  
  22. PROCEDURE dodajpocetak(VAR lista: pok; int: INTEGER);
  23. VAR
  24.    temp : pok;
  25. BEGIN
  26.      NEW(temp);
  27.      temp^.kinf := int;
  28.      temp^.veza := lista;
  29.      lista := temp
  30. END dodajpocetak;
  31.  
  32. PROCEDURE dodajkraj(VAR lista: pok; int: INTEGER);
  33. VAR
  34.    temp, tekuci: pok;
  35. BEGIN
  36.      NEW(temp);
  37.      temp^.kinf := int;
  38.      temp^.veza := NIL;
  39.      IF lista = NIL THEN
  40.        lista := temp
  41.      ELSE
  42.          tekuci := lista;
  43.          WHILE tekuci^.veza <> NIL DO
  44.               tekuci := tekuci^.veza
  45.          END;
  46.          tekuci^.veza := temp
  47.      END
  48. END dodajkraj;
  49.  
  50. PROCEDURE dodajsort(VAR lista: pok; int: INTEGER);
  51. VAR
  52.    temp: pok;
  53. BEGIN
  54.      IF (lista = NIL) OR (lista^.kinf >= int) THEN
  55.        NEW(temp);
  56.        temp^.kinf := int;
  57.        temp^.veza := lista;
  58.        lista:=temp;
  59.      ELSE
  60.          dodajsort(lista^.veza, int);
  61.      END
  62. END dodajsort;
  63.  
  64. PROCEDURE ucitaj(VAR lista: pok);
  65. VAR
  66.    n, i, int, odabir : INTEGER;
  67.    dodaj : proc;
  68. BEGIN
  69.      WriteString('Koliko elemenata zelite da unesete?: ');
  70.      ReadInt(n); WriteLn;
  71.      WriteString('dodavanje sa kraja ili sa pocetka? (1 ili 2):');
  72.      REPEAT
  73.            ReadInt(odabir);
  74.            WriteLn
  75.      UNTIL (odabir = 1) OR (odabir = 2);
  76.      IF odabir = 1 THEN
  77.        dodaj := dodajpocetak
  78.      ELSE
  79.          dodaj := dodajkraj
  80.      END;
  81.      FOR i := 1 TO n DO
  82.         WriteString('Unesite ');
  83.         WriteInt(i,1);
  84.         WriteString('. element: ');
  85.         ReadInt(int);
  86.         WriteLn;
  87.         dodaj(lista,int)    (*ili dodajkraj*)
  88.      END
  89. END ucitaj;
  90.  
  91. PROCEDURE ucitajsauslovom(VAR lista: pok);
  92. VAR
  93.    n, i, int, prethodni : INTEGER;
  94.    prviput : BOOLEAN;
  95. BEGIN
  96.      WriteString('Koliko elemenata zelite da unesete?: ');
  97.      ReadInt(n); WriteLn;
  98.      WriteString('***Unos mora biti u neopadajucem redosledu****');
  99.      WriteString('***Dodaje se unapred sortirana lista**********');
  100.      WriteLn;
  101.      i := 1;
  102.      prviput := TRUE;
  103.      WHILE i <= n DO
  104.           WriteString('Unesite ');
  105.           WriteInt(i,1);
  106.           WriteString('. element: ');
  107.           ReadInt(int);
  108.           WriteLn;
  109.           IF prviput THEN
  110.             prethodni := int;
  111.             prviput := FALSE
  112.           END;
  113.           IF int >= prethodni THEN
  114.             prethodni := int;
  115.             i := i +1;
  116.             dodajpocetak(lista,int)
  117.           END
  118.       END
  119. END ucitajsauslovom;
  120.  
  121. PROCEDURE stampaj(lista: pok);
  122. VAR
  123.    temp : pok;
  124. BEGIN
  125.      temp := lista;
  126.      WHILE temp <> NIL DO
  127.           WriteInt(temp^.kinf,0);
  128.           WriteLn;
  129.           temp := temp^.veza;
  130.      END
  131. END stampaj;
  132.  
  133. PROCEDURE unisti(VAR lista: pok);
  134. VAR
  135.    temp: pok;
  136. BEGIN
  137.      temp := lista;
  138.      WHILE temp <> NIL DO
  139.           lista := lista^.veza;
  140.           DISPOSE(temp);
  141.           temp := lista
  142.      END
  143. END unisti;
  144.  
  145. PROCEDURE izbaci1(VAR lista: pok);
  146. (*izbacuje prvi iz liste kada dodje do poklapanja sa unetim brojem*)
  147. VAR
  148.    temp, prethodni : pok;
  149.    br : INTEGER;
  150.    izbacen : BOOLEAN;
  151. BEGIN
  152.      WriteString('Unesite broj koji zelite da izbacite: ');
  153.      ReadInt(br); WriteLn;
  154.      izbacen := FALSE;
  155.      IF (lista <> NIL) AND (lista^.kinf = br) THEN
  156.        temp := lista;
  157.        lista := lista^.veza;
  158.        DISPOSE(temp);
  159.        izbacen := TRUE;
  160.      ELSE
  161.          temp := lista;
  162.          prethodni := NIL;
  163.          WHILE (temp <> NIL) AND (temp^.kinf <> br) DO
  164.               prethodni := temp;
  165.               temp := temp^.veza
  166.          END;
  167.          IF temp <> NIL THEN
  168.            prethodni^.veza := temp^.veza;
  169.            DISPOSE(temp);
  170.            izbacen := TRUE;
  171.          END
  172.      END;
  173.      IF izbacen THEN
  174.        WriteString('Doslo je do poklapanja, element je izbacen')
  175.      ELSE
  176.          WriteString('Nijedan element nije izbacen! ')
  177.      END
  178. END izbaci1;
  179.  
  180. PROCEDURE izbaci2(VAR lista: pok);
  181. (*izbacuje iz liste sve brojeve kada je zadovoljeno poklapanje sa br*)
  182. VAR
  183.    temp, prethodni : pok;
  184.    ct : INTEGER;
  185.    br : INTEGER;
  186. BEGIN
  187.      WriteString('Unesite broj za koji zelite da bude izbacen iz liste: ');
  188.      ReadInt(br); WriteLn;
  189.      ct := 0;
  190.      WHILE (lista <> NIL) AND (lista^.kinf = br) DO
  191.        temp := lista;
  192.        lista := lista^.veza;
  193.        DISPOSE(temp);
  194.        ct := ct+ 1
  195.      END;
  196.      IF lista <> NIL THEN
  197.        WHILE (temp^.veza <> NIL) DO
  198.             prethodni := temp;
  199.             temp := temp^.veza;
  200.             IF temp^.kinf = br THEN
  201.               prethodni^.veza := temp^.veza;
  202.               DISPOSE(temp);
  203.               ct := ct+ 1;
  204.               temp := prethodni
  205.             END
  206.         END
  207.       END;
  208.       IF ct = 0 THEN
  209.         WriteString('nije doslo do poklapanja, svi se elementi i dalje nalaze u listi');
  210.         WriteLn;
  211.       ELSE
  212.           WriteString('Doslo je do poklapanja ');
  213.           WriteInt(ct,0); WriteString(' puta');
  214.           WriteLn; WriteLn
  215.       END
  216. END izbaci2;
  217.  
  218. PROCEDURE izbaci3(VAR lista : pok; k: INTEGER);
  219. (*izbacivanje k-tog elementa iz liste!*)
  220. VAR
  221.    temp, tekuci: pok;
  222.    brojac: INTEGER;
  223. BEGIN
  224.      IF k = 1 THEN
  225.         temp := lista;
  226.         lista := lista^.veza;
  227.         DISPOSE(temp)
  228.      ELSE
  229.          tekuci := lista;
  230.          brojac := 2;
  231.          WHILE k > brojac DO
  232.               tekuci := tekuci^.veza;
  233.               brojac := brojac+ 1
  234.          END;
  235.          temp := tekuci^.veza;
  236.          tekuci^.veza := tekuci^.veza^.veza;
  237.          DISPOSE(temp)
  238.      END
  239. END izbaci3;
  240.  
  241. PROCEDURE izbacimin1(VAR lista: pok);
  242. (*Procedura za izbacivanje minimuma ukoliko lista nije optimizovana, citaj sortirana*)
  243. VAR
  244.    temp : pok;
  245.    min, ct, k : INTEGER;
  246. BEGIN
  247.      IF lista = NIL THEN
  248.        WriteString('Lista je prazna!')
  249.      ELSE
  250.          ct := 1;
  251.          k := 1;
  252.          min := lista^.kinf;
  253.          temp := lista;
  254.          WHILE temp <> NIL DO
  255.               IF temp^.kinf < min THEN
  256.                 min := temp^.kinf;
  257.                 k := ct;
  258.               END;
  259.               ct := ct+ 1;
  260.               temp := temp^.veza;
  261.          END;
  262.          izbaci3(lista,k)
  263.       END;
  264.       WriteString('Najmanji element u listi je: ');
  265.       WriteInt(min,0); WriteString('uklonjen je iz liste!');
  266.       WriteLn; WriteLn;
  267. END izbacimin1;
  268.  
  269. PROCEDURE izbacimin2(VAR lista: pok);
  270. (*izbacivanje mina ukoliko je lista optimizovana, citaj sortirana*)
  271. VAR
  272.    temp : pok;
  273. BEGIN
  274.      temp := lista;
  275.      lista := lista^.veza;
  276.      DISPOSE(temp);
  277. END izbacimin2;
  278.  
  279. PROCEDURE spojidvelistenaizmenicno(lista1,lista2: pok; VAR lista3: pok);
  280. VAR
  281.    temp1, temp2 : pok;
  282.    ok1, ok2 : BOOLEAN;
  283. BEGIN
  284.      ok1 := FALSE; ok2 := FALSE;
  285.      IF lista1 <> NIL THEN
  286.        ok1 := TRUE
  287.      END;
  288.      IF lista2 <> NIL THEN
  289.        ok2 := TRUE
  290.      END;
  291.      IF ok1 AND ok2 THEN
  292.        temp1 := lista1;
  293.        temp2 := lista2;
  294.        WHILE (temp1 <> NIL) AND (temp2 <> NIL) DO
  295.             dodajpocetak(lista3,temp1^.kinf);
  296.             dodajpocetak(lista3,temp2^.kinf);
  297.             temp1 := temp1^.veza;
  298.             temp2 := temp2^.veza
  299.        END;
  300.      ELSE
  301.          WriteString('Jedna od dve liste nije inicijalizovana!')
  302.      END
  303. END spojidvelistenaizmenicno;
  304.  
  305. BEGIN
  306.      (*ubaciti procedure po potrebi*)
  307.      lista1:= NIL;
  308.      lista2:= NIL;
  309.      lista3:= NIL;
  310.      WriteString('Pogledati u kod programa za odabir i uneti dugme!: ');
  311.    REPEAT
  312.      WriteLn; WriteLn;
  313.      REPEAT
  314.            menu := CAP(RdKey());
  315.      UNTIL menu IN skup{'S','U','D','I','V','M','K','P','Q','R','T','Z'};
  316.      IF menu <> 'Q' THEN
  317.        CASE menu OF
  318.           'S' : stampaj(lista1)|
  319.           'U' : ucitaj(lista1)|
  320.           'D' : unisti(lista1)|
  321.           'I' : ucitajsauslovom(lista1)|
  322.           'V' : izbaci1(lista1)|
  323.           'M' : izbaci2(lista1)|
  324.           'Z' : WriteString('Unesite br: ');
  325.                 ReadInt(br); WriteLn;
  326.                 dodajsort(lista1,br)|
  327.           'K' : WriteString('Unesite k: ');
  328.                 ReadInt(k); WriteLn;
  329.                 izbaci3(lista1,k)|
  330.           'P' : izbacimin1(lista1)|
  331.           'Q' : izbacimin2(lista1)|
  332.           'R' : ucitaj(lista2)|
  333.           'T' : spojidvelistenaizmenicno(lista1,lista2,lista3);
  334.                 stampaj(lista3)
  335.         END;
  336.      ELSE
  337.           WriteString('Kraj programa!')
  338.      END;
  339.    UNTIL menu = 'Q';
  340. END zadatak.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement