gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under the git version control system
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: c31463d)
raw | patch | inline | side by side (parent: c31463d)
author | Doni Pracner <quinnuendo@gmail.com> | |
Tue, 19 Feb 2013 20:09:25 +0000 (21:09 +0100) | ||
committer | Doni Pracner <quinnuendo@gmail.com> | |
Tue, 19 Feb 2013 20:09:25 +0000 (21:09 +0100) |
kodovi/liste2.mod | [new file with mode: 0644] | patch | blob |
skripta-spa1.tex | patch | blob | history |
diff --git a/kodovi/liste2.mod b/kodovi/liste2.mod
--- /dev/null
+++ b/kodovi/liste2.mod
@@ -0,0 +1,362 @@
+MODULE liste2;
+FROM InOut IMPORT WriteString, WriteLn,
+ WriteCard, ReadCard;
+FROM IO IMPORT RdKey;
+FROM Storage IMPORT ALLOCATE, DEALLOCATE;
+TYPE
+ skupZn = SET OF CHAR;
+ brojevi = POINTER TO brojSlog;
+ brojSlog = RECORD
+ info:CARDINAL;
+ veza:brojevi;
+ END;
+VAR
+ lista : brojevi;
+ menu,prazno:CHAR;
+
+PROCEDURE DodajPoc(VAR lista:brojevi; br:INTEGER);
+(* dodaje broj pom na pocetak liste *)
+VAR
+ temp:brojevi;
+BEGIN
+ (* kreiramo novi element *)
+ NEW(temp);
+ temp^.info := br;
+ (* treba da pokazuje na ostatak liste *)
+ temp^.veza := lista;
+ (* pocetak liste je novi element *)
+ lista := temp;
+END DodajPoc;
+
+PROCEDURE Unos(VAR lista:brojevi);
+(* dodaje n brojeva u listu *)
+VAR
+ n,i,br:CARDINAL;
+BEGIN
+ WriteString('unesite n (broj brojeva): ');
+ ReadCard(n);
+ FOR i:= 1 TO n DO
+ WriteString("unesite broj ");
+ WriteCard(i,0);
+ WriteString(": ");
+ ReadCard(br);
+ DodajPoc(lista,br);
+ END;
+END Unos;
+
+(* -- procedure za stampu -- *)
+
+PROCEDURE Stampaj(lista:brojevi);
+(* stampa sadrzaj liste na ekran *)
+VAR
+ temp:brojevi;
+BEGIN
+ WriteLn;
+ WriteString("Sadrzaj liste:");
+ WriteLn;
+ temp:=lista;
+ WHILE temp # NIL DO
+ WriteCard(temp^.info,0);
+ WriteLn;
+ temp := temp^.veza;
+ END;
+END Stampaj;
+
+PROCEDURE StampajK(VAR lista:brojevi);
+(* stampa k-ti element (k unosi korisnik) *)
+VAR
+ temp:brojevi;
+ k,brojac:CARDINAL;
+BEGIN
+ WriteString("unesite redni broj elementa:");
+ ReadCard(k);
+ temp:=lista;
+ brojac := 1;
+ WHILE (temp# NIL) AND (k>brojac) DO
+ temp:=temp^.veza;
+ INC(brojac);
+ END;
+ IF (temp#NIL) THEN
+ WriteCard(temp^.info,2);
+ ELSE
+ WriteString("greska! - ne postoji element");
+ WriteString(" u listi sa rednim brojem ");
+ WriteCard(k,2);
+ END;
+ WriteLn();
+END StampajK;
+
+PROCEDURE StampajMinimum(VAR lista:brojevi);
+(* nalazi i stampa minimalni element liste *)
+VAR
+ temp:brojevi;
+ min:CARDINAL;
+BEGIN
+ IF (lista=NIL) THEN
+ WriteString("prazna lista!");
+ ELSE
+ min:=lista^.info;
+ temp:=lista^.veza;
+ WHILE temp # NIL DO
+ IF temp^.info < min THEN
+ min := temp^.info;
+ END;
+ temp := temp^.veza;
+ END;
+ WriteString("Minimalni element liste je ");
+ WriteCard(min,0);
+ END;
+ WriteLn;
+END StampajMinimum;
+
+(* -- pomocne procedure, bez ispisa -- *)
+
+PROCEDURE UListi(lista:brojevi;
+ br: CARDINAL):BOOLEAN;
+(* vraca da li se 'br' nalazi u listi 'lista' *)
+VAR
+ temp:brojevi;
+BEGIN
+ temp:=lista;
+ WHILE (temp # NIL) AND (temp^.info # br) DO
+ (* dok ne dodjemo do kraja liste
+ ili ne nadjemo broj *)
+ temp := temp^.veza;
+ END;
+ IF temp#NIL THEN
+ (* znaci da nismo na kraju liste,
+ tj da je nadjen broj *)
+ RETURN TRUE;
+ ELSE (* temp = NIL *)
+ RETURN FALSE;
+ END;
+END UListi;
+
+PROCEDURE IzbaciIzListe(VAR lista:brojevi;
+ br: CARDINAL):BOOLEAN;
+(* izbacuje broj 'br' iz liste, naravno ako
+ postoji i vraca da li je operacija uspesno
+ obavljena *)
+VAR
+ temp,prethodni:brojevi;
+BEGIN
+ (* proverimo da li je prvi element *)
+ IF (lista # NIL) AND (lista^.info = br) THEN
+ temp:=lista;
+ lista :=lista^.veza;
+ DISPOSE(temp);
+ RETURN TRUE;
+ ELSE
+ (* trazimo u ostatku liste *)
+ temp:=lista;
+ prethodni:=NIL;
+ WHILE (temp # NIL) AND (temp^.info # br) DO
+ (* dok ne dodjemo do kraja liste
+ ili ne nadjemo broj *)
+ prethodni:=temp;
+ temp := temp^.veza;
+ END;
+ IF temp#NIL THEN
+ (* znaci da nismo na kraju liste,
+ odnosno da smo nasli broj *)
+ (* prevezemo listu oko elementa *)
+ prethodni^.veza:=temp^.veza;
+ DISPOSE(temp);
+ RETURN TRUE;
+ ELSE
+ RETURN FALSE;
+ END;
+ END;
+END IzbaciIzListe;
+
+PROCEDURE IzbaciIzListeSve(VAR lista:brojevi;
+ br: CARDINAL):CARDINAL;
+(* izbacuje sve brojeve 'br' iz liste, naravno ako
+ postoje i vraca koliko ih je bilo *)
+VAR
+ temp,prethodni:brojevi;
+ brojac : CARDINAL;
+BEGIN
+ brojac := 0;
+ (* uklanjamo sa pocetka koliko je potrebno *)
+ WHILE (lista # NIL) AND (lista^.info = br) DO
+ temp:=lista;
+ lista :=lista^.veza;
+ DISPOSE(temp);
+ INC(brojac);
+ END;
+ (* trazimo u ostatku liste *)
+ IF (lista # NIL) THEN
+ temp:=lista;
+ WHILE (temp^.veza # NIL) DO
+ (* idemo do poslednjeg elementa liste *)
+ prethodni:=temp;
+ temp := temp^.veza;
+ IF temp^.info = br THEN
+ (* prevezemo listu oko elementa *)
+ prethodni^.veza:=temp^.veza;
+ DISPOSE(temp);
+ INC(brojac);
+ (* vracamo se jedan korak da bi
+ u novom krugu proverili i ovaj element *)
+ temp := prethodni;
+ END;
+ END;
+ END;
+ RETURN brojac;
+END IzbaciIzListeSve;
+
+(* - procedure sa interakcijom sa korisnikom - *)
+
+PROCEDURE IzbacivanjeEl(VAR lista:brojevi);
+(* izbacuje uneti broj iz liste koristeci proceduru IzbaciIzListe *)
+VAR
+ br:CARDINAL;
+BEGIN
+ WriteString("unesite broj za izbacivanje: ");
+ ReadCard(br);
+ IF IzbaciIzListe(lista,br) THEN
+ WriteString("broj je izbacen iz liste");
+ ELSE
+ WriteString("greska! - broj ne postoji");
+ END;
+ WriteLn;
+END IzbacivanjeEl;
+
+PROCEDURE IzbacivanjeElSvi(VAR lista:brojevi);
+(* izbacuje sve primeke unetog broj iz liste
+ koristeci proceduru IzbaciIzListeSve *)
+VAR
+ br, ukupno:CARDINAL;
+BEGIN
+ WriteString("unesite broj za izbacivanje: ");
+ ReadCard(br);
+ ukupno := IzbaciIzListeSve(lista,br);
+ WriteString("Iz liste je izbaceno ");
+ WriteCard(ukupno,3);
+ WriteString(" el.");
+ WriteLn;
+END IzbacivanjeElSvi;
+
+PROCEDURE IzbacivanjeK(VAR lista:brojevi);
+(* izbacuje k-ti element iz liste *)
+VAR
+ temp,tekuci:brojevi;
+ k,brojac:CARDINAL;
+BEGIN
+ IF lista=NIL THEN
+ WriteString("lista je prazna, nema ");
+ WriteString("elemenata za izbacivanje");
+ ELSE
+ WriteString("unesite redni broj elementa");
+ WriteString(" koji zelite izbaciti:");
+ ReadCard(k);
+ IF k=1 THEN (*izbacivanje prvog *)
+ temp:=lista;
+ lista := lista^.veza;
+ DISPOSE(temp);
+ ELSE
+ tekuci := lista;
+ brojac := 2; (*gledamo jedan unapred*)
+ WHILE (tekuci^.veza# NIL) AND (k>brojac) DO
+ (* idemo kroz listu do k-tog el *)
+ tekuci:=tekuci^.veza;
+ INC(brojac);
+ END;
+ IF (tekuci^.veza#NIL) THEN
+ (* pamtimo element za brisanje *)
+ temp:=tekuci^.veza;
+ (* prevezujemo listu oko njega*)
+ tekuci^.veza:=tekuci^.veza^.veza;
+ DISPOSE(temp);
+ ELSE
+ WriteString("greska! - ne postoji el ");
+ WriteString("u listi sa rednim brojem ");
+ WriteCard(k,2);
+ END;
+ WriteLn();
+ END;
+ END;
+END IzbacivanjeK;
+
+PROCEDURE Pretraga(lista:brojevi);
+(* provera da li se uneti broj nalazi u listi *)
+VAR
+ br:CARDINAL;
+BEGIN
+ WriteString("unesite trazeni broj");
+ ReadCard(br);
+ IF UListi(lista,br) THEN
+ WriteString("broj postoji u listi");
+ ELSE
+ WriteString("broj ne postoji u listi");
+ END;
+ WriteLn;
+END Pretraga;
+
+(* -- oslobadjanje memorije -- *)
+
+PROCEDURE Unisti(VAR lista:brojevi);
+VAR
+ temp:brojevi;
+BEGIN
+ temp:=lista;
+ WHILE temp # NIL DO
+ lista:=lista^.veza;
+ DISPOSE(temp);
+ temp:=lista;
+ END;
+END Unisti;
+
+BEGIN
+ (* pocinjemo od prazne liste *)
+ lista := NIL;
+ REPEAT
+ WriteLn;
+ WriteString("Ilustracija rada sa");
+ WriteString(" listama brojeva");
+ WriteLn;
+ WriteString("=============================");
+ WriteLn;
+ WriteString("s - Stampa");WriteLn;
+ WriteString("u - Unos");WriteLn;
+ WriteString("i - Izbacivanje br iz liste");
+ WriteLn;
+ WriteString("v - izbacivanje svih br iz liste");
+ WriteLn;
+ WriteString("e - izbacivanje k-tog El.");
+ WriteLn;
+ WriteString("k - stampanje k-tog elementa");
+ WriteLn;
+ WriteString("m - Minimalni broj u listi");
+ WriteLn;
+ WriteString("p - Pretraga el. u listi");
+ WriteLn;
+ WriteLn;
+ WriteString("q - kraj rada (Quit)");WriteLn;
+ REPEAT
+ menu := CAP(RdKey());
+ UNTIL menu IN skupZn{'S','U','E','I','V',
+ 'M','K','P','Q'};
+ IF menu#'Q' THEN
+ CASE menu OF
+ 'S' : Stampaj(lista);|
+ 'U' : Unos(lista);|
+ 'I' : IzbacivanjeEl(lista);|
+ 'V' : IzbacivanjeElSvi(lista);|
+ 'E' : IzbacivanjeK(lista);|
+ 'K' : StampajK(lista); |
+ 'M' : StampajMinimum(lista); |
+ 'P' : Pretraga(lista);|
+ END;
+ WriteLn;
+ WriteString("--- pritisnite bilo koji ");
+ WriteString("taster za povratak u meni");
+ prazno:=RdKey();
+ ELSE
+ WriteString("Kraj rada")
+ END;
+ WriteLn;
+ UNTIL menu='Q';
+ Unisti(lista);
+END liste2.
\ No newline at end of file
diff --git a/skripta-spa1.tex b/skripta-spa1.tex
index 76d39f898a56304311479df8c1de7e709179848d..b5f0fe1a2391a73278dcc93ca0c4d5836e2a721b 100644 (file)
--- a/skripta-spa1.tex
+++ b/skripta-spa1.tex
END;
END IzbaciIzListe;
+PROCEDURE IzbaciIzListeSve(VAR lista:brojevi;
+ br: CARDINAL):CARDINAL;
+(* izbacuje sve brojeve 'br' iz liste, naravno ako
+ postoje i vraca koliko ih je bilo *)
+VAR
+ temp,prethodni:brojevi;
+ brojac : CARDINAL;
+BEGIN
+ brojac := 0;
+ (* uklanjamo sa pocetka koliko je potrebno *)
+ WHILE (lista # NIL) AND (lista^.info = br) DO
+ temp:=lista;
+ lista :=lista^.veza;
+ DISPOSE(temp);
+ INC(brojac);
+ END;
+ (* trazimo u ostatku liste *)
+ IF (lista # NIL) THEN
+ temp:=lista;
+ WHILE (temp^.veza # NIL) DO
+ (* idemo do poslednjeg elementa liste *)
+ prethodni:=temp;
+ temp := temp^.veza;
+ IF temp^.info = br THEN
+ (* prevezemo listu oko elementa *)
+ prethodni^.veza:=temp^.veza;
+ DISPOSE(temp);
+ INC(brojac);
+ (* vracamo se jedan korak da bi
+ u novom krugu proverili i ovaj element *)
+ temp := prethodni;
+ END;
+ END;
+ END;
+ RETURN brojac;
+END IzbaciIzListeSve;
+
(* - procedure sa interakcijom sa korisnikom - *)
PROCEDURE IzbacivanjeEl(VAR lista:brojevi);
WriteLn;
END IzbacivanjeEl;
+PROCEDURE IzbacivanjeElSvi(VAR lista:brojevi);
+(* izbacuje sve primeke unetog broj iz liste
+ koristeci proceduru IzbaciIzListeSve *)
+VAR
+ br, ukupno:CARDINAL;
+BEGIN
+ WriteString("unesite broj za izbacivanje: ");
+ ReadCard(br);
+ ukupno := IzbaciIzListeSve(lista,br);
+ WriteString("Iz liste je izbaceno ");
+ WriteCard(ukupno,3);
+ WriteString(" el.");
+ WriteLn;
+END IzbacivanjeElSvi;
+
PROCEDURE IzbacivanjeK(VAR lista:brojevi);
(* izbacuje k-ti element iz liste *)
VAR
WriteLn;
WriteString("=============================");
WriteLn;
- WriteString("s - stampa");WriteLn;
- WriteString("u - unos");WriteLn;
- WriteString("i - izbacivanje br iz liste");
+ WriteString("s - Stampa");WriteLn;
+ WriteString("u - Unos");WriteLn;
+ WriteString("i - Izbacivanje br iz liste");
+ WriteLn;
+ WriteString("v - izbacivanje svih br iz liste");
WriteLn;
- WriteString("e - izbacivanje k-tog el.");
+ WriteString("e - izbacivanje k-tog El.");
WriteLn;
WriteString("k - stampanje k-tog elementa");
WriteLn;
- WriteString("m - minimalni broj u listi");
+ WriteString("m - Minimalni broj u listi");
WriteLn;
- WriteString("p - pretraga el. u listi");
+ WriteString("p - Pretraga el. u listi");
WriteLn;
WriteLn;
- WriteString("q - kraj rada (quit)");WriteLn;
+ WriteString("q - kraj rada (Quit)");WriteLn;
REPEAT
menu := CAP(RdKey());
- UNTIL menu IN skupZn{'S','U','E','I',
+ UNTIL menu IN skupZn{'S','U','E','I','V',
'M','K','P','Q'};
IF menu#'Q' THEN
CASE menu OF
'S' : Stampaj(lista);|
'U' : Unos(lista);|
'I' : IzbacivanjeEl(lista);|
+ 'V' : IzbacivanjeElSvi(lista);|
'E' : IzbacivanjeK(lista);|
'K' : StampajK(lista); |
'M' : StampajMinimum(lista); |