Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- IMPLEMENTATION MODULE lista;
- FROM InOut IMPORT WriteString, WriteLn, WriteInt, ReadInt;
- FROM Storage IMPORT ALLOCATE, DEALLOCATE;
- (*CAUTION NOT FINAL VERSION, stil have on3 or two errors!!!!*)
- (*Soon english #final version, without mistakes!*)
- PROCEDURE dodajpocetak(VAR lista: pok; int: INTEGER);
- VAR
- temp : pok;
- BEGIN
- NEW(temp);
- temp^.kinf := int;
- temp^.veza := NIL;
- lista := temp
- END dodajpocetak;
- (*proveriti rad dodaj kraj procedure!*)
- PROCEDURE dodajkraj(VAR lista: pok; int: INTEGER);
- VAR
- temp, tekuci: pok;
- BEGIN
- NEW(temp);
- temp^.kinf := int;
- temp^.veza := NIL;
- IF lista = NIL THEN
- lista := temp
- ELSE
- tekuci := lista;
- WHILE tekuci^.veza <> NIL DO
- tekuci := tekuci^.veza
- END;
- tekuci^.veza := temp
- END
- END dodajkraj;
- PROCEDURE dodajsortirano(VAR lista: pok; int: INTEGER);
- VAR
- temp: pok;
- BEGIN
- IF (lista = NIL) OR (lista^.kinf >= int) THEN
- NEW(temp);
- temp^.kinf := int;
- temp^.veza := lista;
- lista:=temp;
- ELSE
- dodajsortirano(lista^.veza, int);
- END
- END dodajsortirano;
- PROCEDURE ucitaj(VAR lista: pok);
- VAR
- n, i, int, odabir : INTEGER;
- dodaj : proc;
- BEGIN
- WriteString('Koliko elemenata zelite da unesete?: ');
- ReadInt(n); WriteLn;
- WriteString('dodavanje sa kraja, sa pocetka ili sortirano? (1, 2 ili 3):');
- REPEAT
- ReadInt(odabir);
- WriteLn
- UNTIL (odabir = 1) OR (odabir = 2) OR (odabir = 3);
- CASE odabir OF
- 1 : dodaj := dodajpocetak |
- 2 : dodaj := dodajkraj |
- 3 : dodaj := dodajsortirano
- END;
- FOR i := 1 TO n DO
- WriteString('Unesite ');
- WriteInt(i,1);
- WriteString('. element: ');
- ReadInt(int);
- WriteLn;
- dodaj(lista,int)
- END
- END ucitaj;
- PROCEDURE ucitajsauslovom(VAR lista: pok);
- VAR
- n, i, int, prethodni : INTEGER;
- prviput : BOOLEAN;
- BEGIN
- WriteString('Koliko elemenata zelite da unesete?: ');
- ReadInt(n); WriteLn;
- WriteString('***Unos mora biti u neopadajucem redosledu****');
- WriteString('***Dodaje se unapred sortirana lista**********');
- WriteLn;
- i := 1;
- prviput := TRUE;
- WHILE i <= n DO
- WriteString('Unesite ');
- WriteInt(i,1);
- WriteString('. element: ');
- ReadInt(int);
- WriteLn;
- IF prviput THEN
- prethodni := int;
- prviput := FALSE
- END;
- IF int >= prethodni THEN
- prethodni := int;
- i := i +1;
- dodajpocetak(lista,int)
- END
- END
- END ucitajsauslovom;
- PROCEDURE stampaj(lista: pok; k: CARDINAL);
- VAR
- temp : pok;
- BEGIN
- temp := lista;
- WHILE temp <> NIL DO
- WriteInt(temp^.kinf,k);
- WriteLn;
- temp := temp^.veza;
- END
- END stampaj;
- PROCEDURE unisti(VAR lista: pok);
- VAR
- temp: pok;
- BEGIN
- temp := lista;
- WHILE temp <> NIL DO
- lista := lista^.veza;
- DISPOSE(temp);
- temp := lista
- END
- END unisti;
- PROCEDURE izbaci1(VAR lista: pok);
- (*izbacuje prvi iz liste kada dodje do poklapanja sa unetim brojem*)
- VAR
- temp, prethodni : pok;
- br : INTEGER;
- izbacen : BOOLEAN;
- BEGIN
- WriteString('Unesite broj koji zelite da izbacite: ');
- ReadInt(br); WriteLn;
- izbacen := FALSE;
- IF (lista <> NIL) AND (lista^.kinf = br) THEN
- temp := lista;
- lista := lista^.veza;
- DISPOSE(temp);
- izbacen := TRUE;
- ELSE
- temp := lista;
- prethodni := NIL;
- WHILE (temp <> NIL) AND (temp^.kinf <> br) DO
- prethodni := temp;
- temp := temp^.veza
- END;
- IF temp <> NIL THEN
- prethodni^.veza := temp^.veza;
- DISPOSE(temp);
- izbacen := TRUE;
- END
- END;
- IF izbacen THEN
- WriteString('Doslo je do poklapanja, element je izbacen')
- ELSE
- WriteString('Nijedan element nije izbacen! ')
- END
- END izbaci1;
- PROCEDURE izbaci2(VAR lista: pok);
- (*izbacuje iz liste sve brojeve kada je zadovoljeno poklapanje sa br*)
- VAR
- temp, prethodni : pok;
- ct : INTEGER;
- br : INTEGER;
- BEGIN
- WriteString('Unesite broj za koji zelite da bude izbacen iz liste: ');
- ReadInt(br); WriteLn;
- ct := 0;
- WHILE (lista <> NIL) AND (lista^.kinf = br) DO
- temp := lista;
- lista := lista^.veza;
- DISPOSE(temp);
- ct := ct+ 1
- END;
- IF lista <> NIL THEN
- WHILE (temp^.veza <> NIL) DO
- prethodni := temp;
- temp := temp^.veza;
- IF temp^.kinf = br THEN
- prethodni^.veza := temp^.veza;
- DISPOSE(temp);
- ct := ct+ 1;
- temp := prethodni
- END
- END
- END;
- IF ct = 0 THEN
- WriteString('nije doslo do poklapanja, svi se elementi i dalje nalaze u listi');
- WriteLn;
- ELSE
- WriteString('Doslo je do poklapanja ');
- WriteInt(ct,0); WriteString(' puta');
- WriteLn; WriteLn
- END
- END izbaci2;
- PROCEDURE izbaci3(VAR lista : pok; k: INTEGER);
- (*izbacivanje k-tog elementa iz liste!*)
- VAR
- temp, tekuci: pok;
- brojac: INTEGER;
- BEGIN
- IF k = 1 THEN
- temp := lista;
- lista := lista^.veza;
- DISPOSE(temp)
- ELSE
- tekuci := lista;
- brojac := 2;
- WHILE k > brojac DO
- tekuci := tekuci^.veza;
- brojac := brojac+ 1
- END;
- temp := tekuci^.veza;
- tekuci^.veza := tekuci^.veza^.veza;
- DISPOSE(temp)
- END
- END izbaci3;
- PROCEDURE izbaciminimum(VAR lista: pok);
- (*Procedura za izbacivanje minimuma*)
- VAR
- temp : pok;
- min, ct, k : INTEGER;
- BEGIN
- IF lista = NIL THEN
- WriteString('Lista je prazna!')
- ELSE
- ct := 1;
- k := 1;
- min := lista^.kinf;
- temp := lista;
- WHILE temp <> NIL DO
- IF temp^.kinf < min THEN
- min := temp^.kinf;
- k := ct;
- END;
- ct := ct+ 1;
- temp := temp^.veza;
- END;
- izbaci3(lista,k)
- END;
- WriteString('Najmanji element u listi je: ');
- WriteInt(min,0); WriteString('uklonjen je iz liste!');
- WriteLn; WriteLn;
- END izbaciminimum;
- PROCEDURE izbacimaksimum(VAR lista: pok);
- (*Procedura za izbacivanje mmaksimuma*)
- VAR
- temp : pok;
- max, ct, k : INTEGER;
- BEGIN
- IF lista = NIL THEN
- WriteString('Lista je prazna!')
- ELSE
- ct := 1;
- k := 1;
- max := lista^.kinf;
- temp := lista;
- WHILE temp <> NIL DO
- IF temp^.kinf > max THEN
- max := temp^.kinf;
- k := ct;
- END;
- ct := ct+ 1;
- temp := temp^.veza;
- END;
- izbaci3(lista,k)
- END;
- WriteString('Najveci element u listi ');
- WriteInt(max,0); WriteString(' je uklonjen iz liste!');
- WriteLn; WriteLn;
- END izbacimaksimum;
- PROCEDURE spojidvelistenaizmenicno(lista1,lista2: pok; VAR lista3: pok);
- VAR
- temp1, temp2 : pok;
- ok1, ok2 : BOOLEAN;
- BEGIN
- ok1 := FALSE; ok2 := FALSE;
- IF lista1 <> NIL THEN
- ok1 := TRUE
- END;
- IF lista2 <> NIL THEN
- ok2 := TRUE
- END;
- IF ok1 AND ok2 THEN
- temp1 := lista1;
- temp2 := lista2;
- WHILE (temp1 <> NIL) AND (temp2 <> NIL) DO
- dodajpocetak(lista3,temp1^.kinf);
- dodajpocetak(lista3,temp2^.kinf);
- temp1 := temp1^.veza;
- temp2 := temp2^.veza
- END;
- ELSE
- WriteString('Jedna od dve liste nije inicijalizovana!')
- END
- END spojidvelistenaizmenicno;
- PROCEDURE WriteLn3;
- BEGIN
- WriteLn;
- WriteLn;
- WriteLn
- END WriteLn3;
- PROCEDURE inicijalizuj(VAR lista: pok);
- BEGIN
- lista := NIL
- END inicijalizuj;
- END lista.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement