Advertisement
pseudocreator

lista.mod #implementation module (srpski)

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