Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- MODULE zadatak;
- (*Izvinjavam se ukoliko postoji neka greska, ali zbog velikog broja procedura mogla je da se zadesi veoma lako*)
- (*u nekoliko testiranja, nije primecna nijedna, ali ukoliko naletite na neku javite //lazarsavic94@hotmail.com*)
- FROM InOut IMPORT WriteString, WriteLn, ReadInt, WriteInt;
- FROM Storage IMPORT ALLOCATE, DEALLOCATE;
- FROM IO IMPORT RdKey;
- TYPE
- skup = SET OF CHAR;
- pok = POINTER TO Slog;
- Slog = RECORD
- kinf : INTEGER;
- veza : pok
- END;
- proc = PROCEDURE(VAR pok,INTEGER);
- VAR
- lista1, lista2, lista3 : pok;
- menu : CHAR;
- k, br : INTEGER;
- PROCEDURE dodajpocetak(VAR lista: pok; int: INTEGER);
- VAR
- temp : pok;
- BEGIN
- NEW(temp);
- temp^.kinf := int;
- temp^.veza := lista;
- lista := temp
- END dodajpocetak;
- 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 dodajsort(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
- dodajsort(lista^.veza, int);
- END
- END dodajsort;
- 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 ili sa pocetka? (1 ili 2):');
- REPEAT
- ReadInt(odabir);
- WriteLn
- UNTIL (odabir = 1) OR (odabir = 2);
- IF odabir = 1 THEN
- dodaj := dodajpocetak
- ELSE
- dodaj := dodajkraj
- END;
- FOR i := 1 TO n DO
- WriteString('Unesite ');
- WriteInt(i,1);
- WriteString('. element: ');
- ReadInt(int);
- WriteLn;
- dodaj(lista,int) (*ili dodajkraj*)
- 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);
- VAR
- temp : pok;
- BEGIN
- temp := lista;
- WHILE temp <> NIL DO
- WriteInt(temp^.kinf,0);
- 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 izbacimin1(VAR lista: pok);
- (*Procedura za izbacivanje minimuma ukoliko lista nije optimizovana, citaj sortirana*)
- 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 izbacimin1;
- PROCEDURE izbacimin2(VAR lista: pok);
- (*izbacivanje mina ukoliko je lista optimizovana, citaj sortirana*)
- VAR
- temp : pok;
- BEGIN
- temp := lista;
- lista := lista^.veza;
- DISPOSE(temp);
- END izbacimin2;
- 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;
- BEGIN
- (*ubaciti procedure po potrebi*)
- lista1:= NIL;
- lista2:= NIL;
- lista3:= NIL;
- WriteString('Pogledati u kod programa za odabir i uneti dugme!: ');
- REPEAT
- WriteLn; WriteLn;
- REPEAT
- menu := CAP(RdKey());
- UNTIL menu IN skup{'S','U','D','I','V','M','K','P','Q','R','T','Z'};
- IF menu <> 'Q' THEN
- CASE menu OF
- 'S' : stampaj(lista1)|
- 'U' : ucitaj(lista1)|
- 'D' : unisti(lista1)|
- 'I' : ucitajsauslovom(lista1)|
- 'V' : izbaci1(lista1)|
- 'M' : izbaci2(lista1)|
- 'Z' : WriteString('Unesite br: ');
- ReadInt(br); WriteLn;
- dodajsort(lista1,br)|
- 'K' : WriteString('Unesite k: ');
- ReadInt(k); WriteLn;
- izbaci3(lista1,k)|
- 'P' : izbacimin1(lista1)|
- 'Q' : izbacimin2(lista1)|
- 'R' : ucitaj(lista2)|
- 'T' : spojidvelistenaizmenicno(lista1,lista2,lista3);
- stampaj(lista3)
- END;
- ELSE
- WriteString('Kraj programa!')
- END;
- UNTIL menu = 'Q';
- END zadatak.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement