gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Dodatak u program za liste, brisanje vise el odjednom.
[spa1skripta-public.git] / skripta-spa1.tex
index 76d39f8..b5f0fe1 100644 (file)
@@ -1132,6 +1132,43 @@ BEGIN
   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);
@@ -1149,6 +1186,21 @@ BEGIN
   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
@@ -1229,29 +1281,32 @@ BEGIN
      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); |
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner