gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Merge branch 'master' into public
authorDoni Pracner <quinnuendo@gmail.com>
Sat, 15 Feb 2014 18:03:51 +0000 (19:03 +0100)
committerDoni Pracner <quinnuendo@gmail.com>
Sat, 15 Feb 2014 18:03:51 +0000 (19:03 +0100)
16 files changed:
.gitignore
changes.txt
kodovi/fajlovi/ispis.mod [new file with mode: 0644]
kodovi/fajlovi/nizslog.MOD [new file with mode: 0644]
kodovi/fajlovi/studenti.txt [new file with mode: 0644]
kodovi/nizslog.MOD [deleted file]
kodovi/polinomi/POLINOML.DEF
kodovi/polinomi/POLINOML.MOD
kodovi/polinomi/PROCITAJME.TXT
kodovi/polinomi/polinom.MOD
kodovi/polinomi/testpoli.MOD [new file with mode: 0644]
kodovi/stek-redopsl/stekred.mod
kodovi/studenti.txt [deleted file]
skripta-spa1-sadrzaj.tex
todo.txt
xds-uputstvo.tex [new file with mode: 0644]

index ed0b781..e68c806 100644 (file)
@@ -1,19 +1,37 @@
-*.aux
+# general
+*~
+*.pdf
+*.zip
+
+# html etc
+*.html
+*.css
+#folder for generated html
+html
+
+# latex outputs and temps
 *.dvi
 *.log
 *.out
-*.pdf
-*~
+*.aux
 *.toc
 *.xref
+*.synctex.gz
 *.nav
 *.vrb
 *.snm
 auto*
-*.zip
-*.class
 _region*
 *.blg
 *.bbl
+#htlatex
+*.4ct
+*.4tc
+*.lg
+*.idv
+*.tmp
+
+# executables and binaries
+*.class
 *.exe
 errinfo.???
\ No newline at end of file
index 20bae6a..05069ee 100644 (file)
@@ -1,5 +1,18 @@
 Skripta spa1.
 
+14a
+------------
+-osvezen i doteran PolinomL
+-prosirenja u tekstu o FIO modulu
+-primeri za rad sa fajlovima prosireni sa Exists
+-vise programa se cita direkt iz mod fajlova umesto
+da su direkt ukljuceni u tex skripte
+-dodat osnovni primer za stek i red opsluzivanja
+
+13b
+------------
+-sitna formatiranja
+
 13a
 -------------
 -novi fontovi za kodove
diff --git a/kodovi/fajlovi/ispis.mod b/kodovi/fajlovi/ispis.mod
new file mode 100644 (file)
index 0000000..6b897e4
--- /dev/null
@@ -0,0 +1,31 @@
+MODULE ispis;
+FROM FIO IMPORT File, Exists, Open, Close, EOF, RdStr;
+FROM InOut IMPORT WriteString, WriteLn, ReadString;
+
+PROCEDURE ispisF(ime: ARRAY OF CHAR);
+VAR
+  f:File;
+  s : ARRAY[1..100] OF CHAR;
+BEGIN
+  IF Exists(ime) THEN
+    f:=Open(ime);
+    EOF := FALSE;
+    WHILE NOT EOF DO
+        RdStr(f,s);
+        WriteString(s);
+        WriteLn;
+    END;
+    Close(f);
+  ELSE
+    WriteString("-- fajl ne postoji --");
+    WriteLn;
+  END;
+END ispisF;
+
+VAR
+  ime: ARRAY[1..100] OF CHAR;
+BEGIN
+  WriteString("unesite ime fajla:");
+  ReadString(ime);
+  ispisF(ime);
+END ispis.
diff --git a/kodovi/fajlovi/nizslog.MOD b/kodovi/fajlovi/nizslog.MOD
new file mode 100644 (file)
index 0000000..e427bfa
--- /dev/null
@@ -0,0 +1,123 @@
+MODULE nizslog;\r
+FROM InOut IMPORT WriteString, WriteLn, WriteCard,\r
+    ReadCard, ReadString;\r
+FROM FIO IMPORT File, Exists, Open, Create, Close, EOF,\r
+    RdItem, RdCard, WrStr, WrCard, WrLn;\r
+FROM Str IMPORT Compare;\r
+\r
+CONST\r
+    MaxStud = 100;\r
+    radnifajl = "studenti.txt";\r
+TYPE\r
+    String = ARRAY[1..30] OF CHAR;\r
+    Student = RECORD\r
+        ime, prez: String;\r
+        god: CARDINAL;\r
+    END;\r
+    Studenti = ARRAY[1..MaxStud] OF Student;\r
+\r
+PROCEDURE UcitajF(fajl:String;\r
+          VAR spisak: Studenti; VAR n:CARDINAL);\r
+VAR\r
+    f:File;\r
+BEGIN\r
+    n:=0;\r
+    IF Exists(fajl) THEN\r
+        f:= Open(fajl);\r
+        EOF := FALSE;\r
+        WHILE NOT EOF DO\r
+            INC(n);\r
+            RdItem(f, spisak[n].prez);\r
+            RdItem(f, spisak[n].ime);\r
+            spisak[n].god := RdCard(f);\r
+        END;\r
+        Close(f);\r
+    END;\r
+END UcitajF;\r
+\r
+PROCEDURE Ispisi(spisak:Studenti; n:CARDINAL);\r
+VAR\r
+    i: CARDINAL;\r
+BEGIN\r
+    FOR i:=1 TO n DO\r
+        WriteString(spisak[i].prez);\r
+        WriteString(" ");\r
+        WriteString(spisak[i].ime);\r
+        WriteString(" ");\r
+        WriteCard(spisak[i].god,1);\r
+        WriteLn;\r
+    END;\r
+END Ispisi;\r
+\r
+PROCEDURE IspisiF(fajl:String;\r
+          spisak:Studenti; n:CARDINAL);\r
+VAR\r
+    f:File;\r
+    i: CARDINAL;\r
+BEGIN\r
+    IF (n>0) AND (n<=MaxStud) THEN\r
+        f:=Create(fajl);\r
+        (* pravimo takav fajl da ne\r
+           postoji zadnji prazan red *)\r
+        FOR i:=1 TO n-1 DO\r
+            WrStr(f,spisak[i].prez);\r
+            WrStr(f," ");\r
+            WrStr(f,spisak[i].ime);\r
+            WrStr(f," ");\r
+            WrCard(f,spisak[i].god,1);\r
+            WrLn(f);\r
+        END;\r
+        WrStr(f,spisak[n].prez);\r
+        WrStr(f," ");\r
+        WrStr(f,spisak[n].ime);\r
+        WrStr(f," ");\r
+        WrCard(f,spisak[n].god,1);\r
+        Close(f);\r
+    END;\r
+END IspisiF;\r
+\r
+PROCEDURE NoviStudent(VAR spisak:Studenti; VAR n:CARDINAL);\r
+VAR\r
+    stud,temp:Student;\r
+    i:CARDINAL;\r
+    dodaj:BOOLEAN;\r
+BEGIN\r
+    IF n<MaxStud THEN\r
+        WriteString("Prezime novog studenta?");\r
+        ReadString(stud.prez);\r
+        WriteString("Ime novog studenta?");\r
+        ReadString(stud.ime);\r
+        WriteString("God. rodj. novog studenta?");\r
+        ReadCard(stud.god);\r
+        (* proverimo da li vec postoji *)\r
+        i:=1;\r
+        dodaj := TRUE;\r
+        WHILE (i<=n) AND dodaj DO\r
+            temp := spisak[i];\r
+            IF (temp.god = stud.god) &\r
+              (Compare(temp.prez,stud.prez)=0) &\r
+              (Compare(temp.ime,stud.ime)=0) THEN\r
+                dodaj:=FALSE;\r
+            END;\r
+            INC(i);\r
+        END;\r
+        IF dodaj THEN\r
+            INC(n);\r
+            spisak[n]:=stud;\r
+        ELSE\r
+            WriteString("podaci vec postoje!");\r
+        END;\r
+    ELSE\r
+        WriteString("popunjen kapacitet!");\r
+    END;\r
+END NoviStudent;\r
+\r
+VAR\r
+    spisak : Studenti;\r
+    n:CARDINAL;\r
+BEGIN\r
+    UcitajF(radnifajl, spisak, n);\r
+    Ispisi(spisak, n);\r
+    NoviStudent(spisak,n);\r
+    IspisiF(radnifajl, spisak, n);\r
+END nizslog.
\ No newline at end of file
diff --git a/kodovi/fajlovi/studenti.txt b/kodovi/fajlovi/studenti.txt
new file mode 100644 (file)
index 0000000..6796203
--- /dev/null
@@ -0,0 +1,4 @@
+Prezime Ime 1980\r
+Dva Tri 4\r
+alfa beta 3\r
+Uchicy Studisha 2012
\ No newline at end of file
diff --git a/kodovi/nizslog.MOD b/kodovi/nizslog.MOD
deleted file mode 100644 (file)
index 051680d..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-MODULE nizslog;\r
-FROM InOut IMPORT WriteString, WriteLn, WriteCard,\r
-    ReadCard, ReadString;\r
-FROM FIO IMPORT File, Open, Create, Close, EOF,\r
-    RdItem, RdCard, WrStr, WrCard, WrLn;\r
-FROM Str IMPORT Compare;\r
-\r
-CONST\r
-    MaxStud = 100;\r
-TYPE\r
-    String = ARRAY[1..30] OF CHAR;\r
-    Student = RECORD\r
-        ime, prez: String;\r
-        god: CARDINAL;\r
-    END;\r
-    Studenti = ARRAY[1..MaxStud] OF Student;\r
-\r
-PROCEDURE UcitajF(fajl:String;\r
-          VAR spisak: Studenti; VAR n:CARDINAL);\r
-VAR\r
-    f:File;\r
-BEGIN\r
-    n:=0;\r
-    f:= Open(fajl);\r
-    EOF := FALSE;\r
-    WHILE NOT EOF DO\r
-        INC(n);\r
-        RdItem(f, spisak[n].prez);\r
-        RdItem(f, spisak[n].ime);\r
-        spisak[n].god := RdCard(f);\r
-    END;\r
-    Close(f);\r
-END UcitajF;\r
-\r
-PROCEDURE Ispisi(spisak:Studenti; n:CARDINAL);\r
-VAR\r
-    i: CARDINAL;\r
-BEGIN\r
-    FOR i:=1 TO n DO\r
-        WriteString(spisak[i].prez);\r
-        WriteString(" ");\r
-        WriteString(spisak[i].ime);\r
-        WriteString(" ");\r
-        WriteCard(spisak[i].god,1);\r
-        WriteLn;\r
-    END;\r
-END Ispisi;\r
-\r
-PROCEDURE IspisiF(fajl:String;\r
-          spisak:Studenti; n:CARDINAL);\r
-VAR\r
-    f:File;\r
-    i: CARDINAL;\r
-BEGIN\r
-    IF (n>0) AND (n<=MaxStud) THEN\r
-        f:=Create(fajl);\r
-        (* pravimo takav fajl da ne\r
-           postoji zadnji prazan red *)\r
-        FOR i:=1 TO n-1 DO\r
-            WrStr(f,spisak[i].prez);\r
-            WrStr(f," ");\r
-            WrStr(f,spisak[i].ime);\r
-            WrStr(f," ");\r
-            WrCard(f,spisak[i].god,1);\r
-            WrLn(f);\r
-        END;\r
-        WrStr(f,spisak[n].prez);\r
-        WrStr(f," ");\r
-        WrStr(f,spisak[n].ime);\r
-        WrStr(f," ");\r
-        WrCard(f,spisak[n].god,1);\r
-        Close(f);\r
-    END;\r
-END IspisiF;\r
-\r
-PROCEDURE NoviStudent(VAR spisak:Studenti; VAR n:CARDINAL);\r
-VAR\r
-    stud,temp:Student;\r
-    i:CARDINAL;\r
-    dodaj:BOOLEAN;\r
-BEGIN\r
-    IF n<MaxStud THEN\r
-        WriteString("Prezime novog studenta?");\r
-        ReadString(stud.prez);\r
-        WriteString("Ime novog studenta?");\r
-        ReadString(stud.ime);\r
-        WriteString("God. rodj. novog studenta?");\r
-        ReadCard(stud.god);\r
-        (* proverimo da li vec postoji *)\r
-        i:=1;\r
-        dodaj := TRUE;\r
-        WHILE (i<=n) AND dodaj DO\r
-            temp := spisak[i];\r
-            IF (temp.god = stud.god) &\r
-              (Compare(temp.prez,stud.prez)=0) &\r
-              (Compare(temp.ime,stud.ime)=0) THEN\r
-                dodaj:=FALSE;\r
-            END;\r
-            INC(i);\r
-        END;\r
-        IF dodaj THEN\r
-            INC(n);\r
-            spisak[n]:=stud;\r
-        ELSE\r
-            WriteString("podaci vec postoje!");\r
-        END;\r
-    ELSE\r
-        WriteString("popunjen kapacitet!");\r
-    END;\r
-END NoviStudent;\r
-\r
-VAR\r
-    spisak : Studenti;\r
-    fajl:String;\r
-    n:CARDINAL;\r
-BEGIN\r
-    fajl:="studenti.txt";\r
-    UcitajF(fajl, spisak, n);\r
-    Ispisi(spisak, n);\r
-    NoviStudent(spisak,n);\r
-    IspisiF(fajl, spisak, n);\r
-END nizslog.
\ No newline at end of file
index 5b50bc1..e11f4ce 100644 (file)
@@ -1,5 +1,5 @@
 (* Modul za rad sa polinomima preko listi\r
-   verzija 2012, rev 1 *)\r
+   verzija 2014 *)\r
 DEFINITION MODULE PolinomL;\r
 TYPE\r
   Polinom = POINTER TO Monom;\r
@@ -14,6 +14,10 @@ PROCEDURE Unos(VAR p: Polinom);
 PROCEDURE Stampaj(p: Polinom; d: CARDINAL);\r
 PROCEDURE Kopiraj(p: Polinom; \r
                   VAR kopija: Polinom);\r
+PROCEDURE PostaviClan(k: REAL; st:CARDINAL; \r
+                  VAR p:Polinom);\r
+PROCEDURE KoeficijentUz(p:Polinom; st:CARDINAL):REAL;\r
+PROCEDURE MaksimalniStepen(p:Polinom):CARDINAL;\r
 PROCEDURE UbaciMonom(mon:Polinom; \r
                      VAR p: Polinom);\r
 PROCEDURE PromeniZnak(VAR p: Polinom);\r
index 405e485..20e64ea 100644 (file)
@@ -1,5 +1,5 @@
 (* Modul za rad sa polinomima preko listi\r
-   verzija 2012, rev 1 *)\r
+   verzija 2014 *)\r
 IMPLEMENTATION MODULE PolinomL;\r
 FROM InOut IMPORT Write, WriteString, WriteLn,\r
            WriteCard, ReadCard, Done;\r
@@ -72,6 +72,74 @@ BEGIN
   END\r
 END Stampaj;\r
 \r
+PROCEDURE PostaviClan(k:REAL; st:CARDINAL;\r
+                      VAR p:Polinom);\r
+VAR\r
+  cilj, prethodni : Polinom;\r
+BEGIN\r
+  cilj := p;\r
+  prethodni := NIL;\r
+  WHILE (cilj # NIL) AND (cilj^.st>st) DO\r
+    prethodni := cilj;\r
+    cilj := cilj^.veza;\r
+  END;\r
+  (* da li upisujemo vrednost ili sklanjamo clan *)\r
+  IF k#0.0 THEN\r
+    (* da li menjamo clan ili pravimo novi *)\r
+    IF (cilj # NIL) AND (cilj^.st = st) THEN\r
+      cilj^.k:=k;\r
+    ELSE\r
+      NEW(cilj);\r
+      cilj^.k := k;\r
+      cilj^.st := st;\r
+      cilj^.veza := NIL;\r
+      IF p = NIL THEN\r
+       p := cilj;\r
+      ELSIF prethodni = NIL THEN\r
+       cilj^.veza := p^.veza;\r
+       p := cilj;\r
+      ELSE\r
+       cilj^.veza := prethodni^.veza;\r
+       prethodni^.veza := cilj;\r
+      END;\r
+    END;\r
+  ELSE\r
+    (* da li postoji ovakav clan *)\r
+    IF (cilj # NIL) AND (cilj^.st = st) THEN\r
+      IF p = cilj THEN\r
+       p := p^.veza;\r
+      ELSE\r
+       prethodni^.veza:= prethodni^.veza^.veza;\r
+      END;\r
+      DISPOSE(cilj);      \r
+    END;\r
+  END;\r
+END PostaviClan;\r
+\r
+PROCEDURE KoeficijentUz(p:Polinom; st:CARDINAL):REAL;\r
+VAR\r
+  tekuci : Polinom;\r
+BEGIN\r
+  tekuci := p;\r
+  WHILE (tekuci#NIL) AND (tekuci^.st > st) DO\r
+    tekuci := tekuci^.veza;\r
+  END;\r
+  IF (tekuci # NIL) AND (tekuci^.st = st) THEN\r
+    RETURN tekuci^.k;\r
+  ELSE\r
+    RETURN 0.0;\r
+  END;\r
+END KoeficijentUz;\r
+\r
+PROCEDURE MaksimalniStepen(p:Polinom):CARDINAL;\r
+BEGIN\r
+  IF p#NIL THEN\r
+    RETURN p^.st;\r
+  ELSE\r
+    RETURN 0;\r
+  END;\r
+END MaksimalniStepen;\r
+\r
 PROCEDURE UbaciMonom(mon:Polinom; VAR p: Polinom);\r
 VAR\r
   stari, tekuci, kopija: Polinom;\r
@@ -205,7 +273,7 @@ END MonomPuta;
 \r
 PROCEDURE Puta(p1, p2: Polinom; VAR pr: Polinom);\r
 VAR\r
-  pomocni: Polinom;\r
+  pomocni, brisi: Polinom;\r
 BEGIN\r
   Anuliraj(pr);\r
   IF (p1 <> NIL) AND (p2 <> NIL) THEN\r
@@ -215,7 +283,9 @@ BEGIN
       MonomPuta(p1, p2, pomocni);\r
       REPEAT\r
         UbaciMonom(pomocni, pr);\r
+        brisi := pomocni;\r
         pomocni := pomocni^.veza\r
+        DISPOSE(brisi);\r
       UNTIL pomocni = NIL;\r
       p2 := p2^.veza\r
     END\r
@@ -234,7 +304,8 @@ PROCEDURE Kolicnik(p1, p2: Polinom; VAR kol, ost: Polinom; VAR ok: BOOLEAN);
         novi^.k := - ost^.k / p2^.k;\r
         novi^.st := ost^.st - p2^.st;\r
         MonomPuta(p2, novi, pomocni);\r
-        Saberi(ost, pomocni, ost);\r
+        SaberiNa(pomocni, ost);\r
+        DisposePolinom(pomocni);\r
         novi^.k := - novi^.k;\r
         UbaciMonom(novi, kol);\r
         DISPOSE(novi);\r
@@ -258,18 +329,19 @@ PROCEDURE PolinomNaN(p: Polinom; n: CARDINAL;
                      VAR rez: Polinom);\r
 VAR\r
   i: CARDINAL;\r
+  pret : Polinom;\r
 BEGIN\r
   IF n = 0 THEN\r
     NEW(rez);\r
     rez^.k := 1.0;\r
     rez^.st := 0;\r
     rez^.veza := NIL;\r
-  ELSIF n = 1 THEN\r
-       Kopiraj( p, rez );\r
   ELSE\r
-    rez := p;\r
+    Kopiraj( p, rez );\r
     FOR i := 2 TO n DO\r
-      Puta(rez, p, rez)\r
+      pret := rez;\r
+      Puta(pret, p, rez);\r
+      DisposePolinom(pret);\r
     END\r
   END;\r
 END PolinomNaN;\r
index cbd917c..4475d59 100644 (file)
@@ -11,6 +11,11 @@ folderu gde je i glavni program, tj u folderu projekta.
 Opciono se mogu smestiti u odgovarajuce MOD i DEF foldere u\r
 okviru projekta.\r
 \r
+Verzija 2014\r
+- dodata procedura PostaviClan, KoeficijenUz, MaksimalniStepen\r
+- doterivanja efikasnosti u nekoliko procedura\r
+- prilagodjeni primeri\r
+\r
 Verzija 2012; rev 1\r
 -promena u Anuliraj da ne brise polinom ako je vec postojao,\r
 posto je pravilo probleme za mnozenje i stepenovanje.\r
index 3e46e54..cfba1b1 100644 (file)
@@ -1,11 +1,10 @@
 MODULE polinom;\r
 FROM PolinomL IMPORT Polinom, Stampaj, Anuliraj,\r
-              DisposePolinom, UbaciMonom, Unos, Saberi;\r
+              DisposePolinom, PostaviClan, Unos, Saberi;\r
 FROM InOut IMPORT WriteString, WriteLn;\r
-FROM Storage IMPORT ALLOCATE, DEALLOCATE;\r
 \r
 VAR\r
-  p,q,rez,pom : Polinom;\r
+  p,q,rez : Polinom;\r
 \r
 BEGIN\r
   (* korisnik unosi prvi polinom *)\r
@@ -15,31 +14,14 @@ BEGIN
   (* drugi polinom kreiramo mi, \r
      monom po monom *)\r
   Anuliraj(q); (* isto sto i q:=NIL; *)\r
-  (* formiramo monom x^5 *)\r
-  NEW(pom);\r
-  pom^.st:=5;\r
-  pom^.k:=1.0;\r
-  (* dodajemo ga u polinom *)\r
-  UbaciMonom(pom,q);\r
-  DISPOSE(pom);\r
+  (* postavimo clan x^5 *)\r
+  PostaviClan(1.0,5,q);\r
   (* -3 x^4 *)\r
-  NEW(pom);\r
-  pom^.st := 4;\r
-  pom^.k := -3.0;\r
-  UbaciMonom(pom,q);\r
-  DISPOSE(pom);\r
+  PostaviClan(-3.0,4,q);\r
   (* 4 x *)\r
-  NEW(pom);\r
-  pom^.st := 1;\r
-  pom^.k := 4.0;\r
-  UbaciMonom(pom,q);\r
-  DISPOSE(pom);\r
+  PostaviClan(4.0,1,q);\r
   (* 7 (x^0) *)\r
-  NEW(pom);\r
-  pom^.st := 0;\r
-  pom^.k := 7.0;\r
-  UbaciMonom(pom,q);\r
-  DISPOSE(pom);\r
+  PostaviClan(7.0,0,q);\r
   (* saberemo polinome *)\r
   Saberi(p, q, rez);\r
   (* odstampamo rezultat i polinome *)\r
diff --git a/kodovi/polinomi/testpoli.MOD b/kodovi/polinomi/testpoli.MOD
new file mode 100644 (file)
index 0000000..12d3960
--- /dev/null
@@ -0,0 +1,110 @@
+MODULE testpoli;\r
+FROM PolinomL IMPORT Polinom, Stampaj, Anuliraj,\r
+              DisposePolinom, PostaviClan, Kopiraj;\r
+FROM InOut IMPORT WriteString, WriteLn;\r
+\r
+VAR\r
+  q,q2 : Polinom;\r
+\r
+BEGIN\r
+  (* korisnik unosi prvi polinom *)\r
+  WriteString("Unesite polinom:");\r
+  WriteLn;\r
+  Anuliraj(q);\r
+  (* postavimo clan x^5 *)\r
+  PostaviClan(1.0,5,q);\r
+  (* -3 x^4 *)\r
+  PostaviClan(-3.0,4,q);\r
+  (* 4 x *)\r
+  PostaviClan(4.0,1,q);\r
+  (* 7 (x^0) *)\r
+  PostaviClan(7.0,0,q);\r
+  \r
+  WriteString("q: ");WriteLn;\r
+  Stampaj(q,0);\r
+  WriteLn;\r
+\r
+  WriteString("dodaj u sredinu");\r
+  WriteLn;\r
+  PostaviClan(2.0,2,q);\r
+  Stampaj(q,0);\r
+  WriteLn;\r
+\r
+  WriteString("nula prvi");\r
+  WriteLn;\r
+  PostaviClan(0.0,5,q);\r
+  Stampaj(q,0);\r
+  WriteLn;\r
+\r
+  WriteString("nula poslednji");\r
+  WriteLn;\r
+  PostaviClan(0.0,0,q);\r
+  Stampaj(q,0);\r
+  WriteLn;\r
+  \r
+  WriteString("nula sredina");\r
+  WriteLn;\r
+  PostaviClan(0.0,2,q);\r
+  Stampaj(q,0);\r
+  WriteLn;\r
+\r
+  WriteString("nula nepostojeci");\r
+  WriteLn;\r
+  PostaviClan(0.0,2,q);\r
+  Stampaj(q,0);\r
+  WriteLn;\r
+\r
+  WriteString("postavi prvi");\r
+  WriteLn;\r
+  PostaviClan(7.0,7,q);\r
+  Stampaj(q,0);\r
+  WriteLn;\r
+\r
+  WriteString("postavi poslednji");\r
+  WriteLn;\r
+  PostaviClan(7.0,1,q);\r
+  Stampaj(q,0);\r
+  WriteLn;\r
+\r
+  Kopiraj(q,q2);\r
+\r
+  WriteString("dodaj srednji u listu duzine 2");\r
+  WriteLn;\r
+  PostaviClan(11.0,3,q);\r
+  Stampaj(q,0);\r
+  WriteLn;\r
+\r
+  Kopiraj(q2,q);\r
+  WriteString("obrisi prvi iz liste duzine 2");\r
+  WriteLn;\r
+  PostaviClan(0.0,7,q);\r
+  Stampaj(q,0);\r
+  WriteLn;\r
+\r
+  WriteString("obrisi prvi iz liste duzine 1");\r
+  WriteLn;\r
+  PostaviClan(0.0,1,q);\r
+  Stampaj(q,0);\r
+  WriteLn;\r
+\r
+  Kopiraj(q2,q);\r
+  WriteString("obrisi poslednji iz liste duzine 2");\r
+  WriteLn;\r
+  PostaviClan(0.0,1,q);\r
+  Stampaj(q,0);\r
+  WriteLn;\r
+\r
+  WriteString("obrisi poslednji iz liste duzine 1");\r
+  WriteLn;\r
+  PostaviClan(0.0,7,q);\r
+  Stampaj(q,0);\r
+  WriteLn;\r
+\r
+  WriteString("nuliranje u listi duzine 0");\r
+  WriteLn;\r
+  PostaviClan(0.0,7,q);\r
+  Stampaj(q,0);\r
+  WriteLn;\r
+\r
+  DisposePolinom(q);\r
+END testpoli.\r
index ba3a3ac..7b5bf09 100755 (executable)
@@ -30,7 +30,7 @@ BEGIN
    END;\r
    (* ubacujemo elemente u red opsl *)\r
    FOR i:=1 TO Length(str) DO\r
-        Push(s, str[i], ok);\r
+        AddRear(q, str[i], ok);\r
    END;\r
    WriteLn;\r
    WriteString("sadrzaj steka");\r
diff --git a/kodovi/studenti.txt b/kodovi/studenti.txt
deleted file mode 100644 (file)
index 6105e56..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Prezime Ime 1980\r
-Dva Tri 4\r
-a b 2\r
-alfa beta 3\r
-4 4 0\r
-ha hhha 13
\ No newline at end of file
index 1651ea7..50655d0 100644 (file)
@@ -9,8 +9,8 @@
 \newcommand{\autor}{Vladimir Kurbalija, Milos Radovanovic, Doni Pracner}
 \newcommand{\naslov}{Skripta za vezbe iz predmeta "Strukture podataka
   i algoritmi 1"} 
-\newcommand{\datum}{Februar 2013, Novi Sad}
-\newcommand{\verzija}{ver 13b-\varijacija}
+\newcommand{\datum}{Februar 2014, Novi Sad}
+\newcommand{\verzija}{ver 14a-\varijacija}
 %varijacija je definisana u fajlu koji ukljucuje ovaj
 
 \title{\naslov -- \verzija}
@@ -576,42 +576,65 @@ U ovom modulu je definisan tip \kod{File}, koji predstavlja jedan fajl
 sa kojim radimo. Da bi ga koristili moramo ga uvesti u program (isto
 kao što uvozimo i komande).
 
-\begin{quote}U primerima se pretpostavlja da je ``f'' tipa \kod{File}, ``str'' niz
-znakova, ``i'' tipa \kod{INTEGER}, ``c'' tipa \kod{CARDINAL} i ``ch''
-tipa \kod{CHAR}. Dodatna promenljiva ``n'' tipa \kod{INTEGER} služi za
-formatiranje slično kao u modulu \kod{InOut}.
-\end{quote}
+\emph{U primerima se pretpostavlja da je ``f'' tipa \kod{File},
+  ``str'' niz znakova, ``i'' tipa \kod{INTEGER}, ``c'' tipa
+  \kod{CARDINAL} i ``ch'' tipa \kod{CHAR}. Dodatna promenljiva ``n''
+  tipa \kod{INTEGER} služi za formatiranje slično kao u modulu
+  \kod{InOut}, odnosno za ispis će biti zauzeto bar ``n'' znakova.}
+
+
+Ako otvaramo već postojeći fajl, poželjno je prvo proveriti da li on
+postoji -- u suprotnom naš program će se srušiti pri izvršavanju.
+Funkcija \kod{Exists(str)} vraća da li fajl postoji.
 
 Promenljiva tipa \kod{File} se mora vezati za neki fajl
 jednom od sledećih komandi:
 \begin{itemize}
-\item \kod{f := Open(str);} -- otvara se postojeci fajl za čitanje\\
-\item \kod{f := Create(str);} -- kreira se fajl za pisanje\\
+\item \kod{f := Open(str);} -- otvara se postojeci fajl za čitanje
+\item \kod{f := Create(str);} -- kreira se fajl za pisanje; ako je već
+  postojao, biće zamenjen
 \item \kod{f := Append(str);} -- otvara se postojeći fajl za
   dopisivanje na kraj
 \end{itemize}
 
-Po završetku rada fajl se mora zatvoriti, u našem primeru to bi bilo
-\kod{Close(f);}
+Po završetku rada fajl se mora zatvoriti, u našem primeru to bi bilo:
+\begin{itemize}
+\item \kod{Close(f);}
+\end{itemize}
 
 Procedure za čitanje i pisanje su vrlo slične onima iz modula
 \kod{IO}, osim što imaju dodatni parametar „\kod{f}“ koji označava
 fajl sa kojim se radi.
 \begin{itemize}
-\item \kod{RdStr(f,str)} -- učitava ceo red u string str\\
-\item   \kod{RdItem(f,str)} -- učitava jednu reč u string str (učitava znakove iz fajla dok ne naiđe na separator)\\
-\item   \kod{i:= RdInt(f); c:= RdCard(f)} -- učitava broj, koji se dobija kao rezultat procedure\\
+\item \kod{RdStr(f,str)} -- učitava ceo red u string str
+\item \kod{RdItem(f,str)} -- učitava jednu reč u string str (učitava
+  znakove iz fajla dok ne naiđe na separator)
+\item \kod{i:= RdInt(f); c:= RdCard(f)} -- učitava broj, koji se
+  dobija kao rezultat procedure
 \item   \kod{ch:= RdChar(f)} -- vraća jedan znak iz fajla
 \end{itemize}
 
+Bitno je obratiti pažnju na specifičnost da postoje dve komande za
+čitanje stringova iz fajla i da se one ponašaju različito.  Budući da
+razmak spada u separatore to znači da se korišćenjem \kod{RdItem} ne
+može učitati string koji ima u sebi razmake.
+
 Analogne su i procedure za pisanje različitih tipova u fajl:
 \begin{itemize}
-\item \kod{WrStr(f,str); WrInt(f,i,n);}\ \kod{WrCard(f,c,n);}\
-  \kod{WrChar(f,ch);}
+\item \kod{WrStr(f,str);}
+\item \kod{WrInt(f,i,n);}
+\item \kod{WrCard(f,c,n);}
+\item \kod{WrChar(f,ch);}
 \end{itemize}
 
+Treba primetiti da ne postoje dve komande za ispis stringa u fajl --
+potpuno je svejedno da li on ima razmake u sebi ili ne.
+
+Prelom reda se eksplicitno upisuje u fajl komandom
+\begin{itemize}
+\item \kod{WrLn(f);}.
+\end{itemize}
 
-Prelom reda se eksplicitno upisuje u fajl komandom \kod{WrLn(f);}.
 
 Da bi odredili da li smo stigli do kraja fajla možemo koristiti
 \kod{EOF}. U pitanju je logička promenljiva koja se uvozi iz modula
@@ -621,38 +644,12 @@ pri operacijama otvaranja i zatvaranja fajlova, odnosno neće se pri
 tome resetovati na \kod{FALSE}, pa na ovo treba obratiti pažnju pri
 radu.
 
+
 \subsection{Zadatak: ispis sadržaja fajla na ekran}
 
 Potrebno je sve redove iz fajla učitati i ispisati ih na ekran.
 
-\begin{lstlisting}[style=codeblock]
-MODULE ispis;
-FROM FIO IMPORT File, Open, Close, EOF, RdStr;
-FROM InOut IMPORT WriteString, WriteLn, ReadString;
-
-PROCEDURE ispisF(ime: ARRAY OF CHAR);
-VAR
-  f:File;
-  s : ARRAY[1..100] OF CHAR;
-BEGIN
-  f:=Open(ime);
-  EOF := FALSE;
-  WHILE NOT EOF DO
-      RdStr(f,s);
-      WriteString(s);
-      WriteLn;
-  END;
-  Close(f);
-END ispisF;
-
-VAR
-  ime: ARRAY[1..100] OF CHAR;
-BEGIN
-  WriteString("unesite ime fajla:");
-  ReadString(ime);
-  ispisF(ime);
-END ispis.
-\end{lstlisting}
+\lstinputlisting[style=codeblock]{kodovi/fajlovi/ispis.mod}
 
 \subsection{Zadatak: spisak studenata}
 
@@ -661,132 +658,7 @@ novog studenta u spisak i snima fajl.  U fajlu se u svakom redu nalazi
 podatak o jednom studentu, redom prezime, ime i godina rođenja,
 razdvojeni razmacima.
 
-\begin{lstlisting}[style=codeblock]
-MODULE nizslog;
-FROM InOut IMPORT WriteString, WriteLn, 
-     WriteCard, ReadCard, ReadString;
-FROM FIO IMPORT File, Open, Create, Close, EOF,
-    RdItem, RdCard, WrStr, WrCard, WrLn;
-FROM Str IMPORT Compare;
-
-CONST
-    MaxStud = 100;
-TYPE
-    String = ARRAY[1..30] OF CHAR;
-    Student = RECORD
-        ime, prez: String;
-        god: CARDINAL;
-    END;
-    Studenti = ARRAY[1..MaxStud] OF Student;
-
-PROCEDURE UcitajF(fajl:String;
-          VAR spisak: Studenti; VAR n:CARDINAL);
-VAR
-    f:File;
-BEGIN
-    n:=0;
-    f:= Open(fajl);
-    EOF := FALSE;
-    WHILE NOT EOF DO
-        INC(n);
-        RdItem(f, spisak[n].prez);
-        RdItem(f, spisak[n].ime);
-        spisak[n].god := RdCard(f);
-    END;
-    Close(f);
-END UcitajF;
-
-PROCEDURE Ispisi(spisak:Studenti; n:CARDINAL);
-VAR
-    i: CARDINAL;
-BEGIN
-    FOR i:=1 TO n DO
-        WriteString(spisak[i].prez);
-        WriteString(" ");
-        WriteString(spisak[i].ime);
-        WriteString(" ");
-        WriteCard(spisak[i].god,1);
-        WriteLn;
-    END;
-END Ispisi;
-
-PROCEDURE IspisiF(fajl:String;
-          spisak:Studenti; n:CARDINAL);
-VAR
-    f:File;
-    i: CARDINAL;
-BEGIN
-    IF (n>0) AND (n<=MaxStud) THEN
-        f:=Create(fajl);
-        (* pravimo takav fajl da ne
-           postoji zadnji prazan red *)
-        FOR i:=1 TO n-1 DO
-            WrStr(f,spisak[i].prez);
-            WrStr(f," ");
-            WrStr(f,spisak[i].ime);
-            WrStr(f," ");
-            WrCard(f,spisak[i].god,1);
-            WrLn(f);
-        END;
-        WrStr(f,spisak[n].prez);
-        WrStr(f," ");
-        WrStr(f,spisak[n].ime);
-        WrStr(f," ");
-        WrCard(f,spisak[n].god,1);
-        Close(f);
-    END;
-END IspisiF;
-
-PROCEDURE NoviStudent(VAR spisak:Studenti;
-                      VAR n:CARDINAL);
-VAR
-    stud,temp:Student;
-    i:CARDINAL;
-    dodaj:BOOLEAN;
-BEGIN
-    IF n<MaxStud THEN
-        WriteString("Prezime novog studenta?");
-        ReadString(stud.prez);
-        WriteString("Ime novog studenta?");
-        ReadString(stud.ime);
-        WriteString("Godina rodjenja");
-        WriteString("novog studenta?");
-        ReadCard(stud.god);
-        (* proverimo da li vec postoji *)
-        i:=1;
-        dodaj := TRUE;
-        WHILE (i<=n) AND dodaj DO
-            temp := spisak[i];
-            IF (temp.god = stud.god) &
-              (Compare(temp.prez,stud.prez)=0) &
-              (Compare(temp.ime,stud.ime)=0) THEN
-                dodaj:=FALSE;
-            END;
-            INC(i);
-        END;
-        IF dodaj THEN
-            INC(n);
-            spisak[n]:=stud;
-        ELSE
-            WriteString("podaci vec postoje!");
-        END;
-    ELSE
-        WriteString("popunjen kapacitet!");
-    END;
-END NoviStudent;
-
-VAR
-    spisak : Studenti;
-    fajl:String;
-    n:CARDINAL;
-BEGIN
-    fajl:="studenti.txt";
-    UcitajF(fajl, spisak, n);
-    Ispisi(spisak, n);
-    NoviStudent(spisak,n);
-    IspisiF(fajl, spisak, n);
-END nizslog.
-\end{lstlisting}
+\lstinputlisting[style=codeblock]{kodovi/fajlovi/nizslog.MOD}
 
 \sectionbreak
 \section{Liste i pokazivači}
@@ -1611,449 +1483,32 @@ Polinomi su predstavljeni pomoću pokazivača. Apstraktni tip podataka
 
 \paragraph{PolinomL.DEF} \ 
 
-\begin{lstlisting}[style=codeblock]
-DEFINITION MODULE PolinomL;
-TYPE
-  Polinom = POINTER TO Monom;
-  Monom = RECORD
-            k : REAL;
-            st : CARDINAL;
-            veza : Polinom
-          END;
-
-PROCEDURE Anuliraj(VAR p: Polinom);
-PROCEDURE Unos(VAR p: Polinom);
-PROCEDURE Stampaj(p: Polinom; d: CARDINAL);
-PROCEDURE Kopiraj(p: Polinom; 
-                  VAR kopija: Polinom);
-PROCEDURE UbaciMonom(mon:Polinom; 
-                     VAR p: Polinom);
-PROCEDURE PromeniZnak(VAR p: Polinom);
-PROCEDURE Saberi(p1, p2: Polinom; 
-                 VAR zbir: Polinom);
-PROCEDURE SaberiNa(p: Polinom; VAR rez: Polinom);
-PROCEDURE Oduzmi(p1,p2: Polinom; 
-                 VAR razlika: Polinom);
-PROCEDURE MonomPuta(p, mon: Polinom; 
-                    VAR mp : Polinom);
-PROCEDURE Puta(p1, p2: Polinom; VAR pr: Polinom);
-PROCEDURE Kolicnik(p1, p2: Polinom;
-                   VAR kol, ost: Polinom;
-                   VAR ok : BOOLEAN);
-PROCEDURE PolinomNaN(p: Polinom; n: CARDINAL;
-                     VAR rez: Polinom);
-PROCEDURE DisposePolinom(VAR p: Polinom);
-
-END PolinomL.
-\end{lstlisting}
+\lstinputlisting[style=codeblock]{kodovi/polinomi/POLINOML.DEF}
 
 \paragraph{PolinomL.MOD} \ 
 
-\begin{codeblock}
-(* Modul za rad sa polinomima preko listi
-   verzija 2012, rev 1 *)
-IMPLEMENTATION MODULE PolinomL;
-FROM InOut IMPORT Write, WriteString, WriteLn,
-           WriteCard, ReadCard, Done;
-FROM RealInOut IMPORT WriteReal, ReadReal;
-FROM Storage IMPORT ALLOCATE, DEALLOCATE;
-
-PROCEDURE Anuliraj(VAR p: Polinom);
-BEGIN
-  p := NIL;
-END Anuliraj;
-
-PROCEDURE Kopiraj(p: Polinom; VAR kopija: Polinom);
-VAR
-  pomocni: Polinom;
-BEGIN
-  IF p = NIL THEN
-    kopija := NIL
-  ELSE
-    NEW(kopija);
-    kopija^ := p^;
-    p := p^.veza;
-    pomocni := kopija;
-    WHILE p <> NIL DO
-      NEW(pomocni^.veza);
-      pomocni := pomocni^.veza;
-      pomocni^ := p^;
-      p := p^.veza
-    END
-  END
-END Kopiraj;
-
-PROCEDURE Stampaj(p: Polinom; d: CARDINAL);
-
-  PROCEDURE StampajMonom(m : Polinom);
-  BEGIN
-    WITH m^ DO
-      IF st <> 0 THEN
-        IF ABS(k) <> 1.0 THEN
-          WriteReal(ABS(k), d)
-        END;
-        Write('x');
-        IF st <> 1 THEN
-          Write('^');
-          WriteCard(st, 1)
-        END
-      ELSE
-        WriteReal(ABS(k), d)
-      END
-    END
-  END StampajMonom;
-
-BEGIN
-  IF p = NIL THEN
-    WriteReal(0., d)
-  ELSE
-    IF p^.k < 0.0 THEN
-      WriteString(' - ')
-    END;
-    StampajMonom(p);
-    p := p^.veza;
-    WHILE p <> NIL DO
-      IF p^.k > 0.0 THEN
-        WriteString(' + ')
-      ELSE
-        WriteString(' - ')
-      END;
-      StampajMonom(p);
-      p := p^.veza
-    END
-  END
-END Stampaj;
-
-PROCEDURE UbaciMonom(mon:Polinom; VAR p: Polinom);
-VAR
-  stari, tekuci, kopija: Polinom;
-BEGIN
-  IF mon # NIL THEN
-    NEW(kopija);
-    kopija^ := mon^;
-    tekuci := p;
-       stari := NIL;
-    WHILE (tekuci#NIL) AND (tekuci^.st>kopija^.st) DO
-      stari := tekuci;
-      tekuci := tekuci^.veza
-    END;
-    kopija^.veza := tekuci;
-    IF tekuci = p THEN
-      p := kopija
-    ELSE
-      stari^.veza := kopija
-    END;
-    IF (tekuci#NIL) AND (kopija^.st = tekuci^.st) THEN
-      kopija^.k := kopija^.k + tekuci^.k;
-      kopija^.veza := tekuci^.veza;
-      DISPOSE(tekuci);
-      IF kopija^.k = 0.0 THEN
-        IF p = kopija THEN
-          p := kopija^.veza
-        ELSE
-          stari^.veza := kopija^.veza
-        END;
-        DISPOSE(kopija)
-      END
-    END
-  END
-END UbaciMonom;
-
-PROCEDURE Unos(VAR p : Polinom);
-VAR
-  i, n: CARDINAL;
-  novi: Polinom;
-BEGIN
-  Anuliraj(p);
-  REPEAT
-    WriteLn;
-    WriteString('Unesite broj monoma n (n>=0) ');
-    ReadCard(n);
-  UNTIL Done;
-  WriteLn;
-  FOR i := 1 TO n DO
-    NEW(novi);
-    WITH novi^ DO
-      REPEAT
-        WriteString('Unesite koeficijent monoma br.');
-        WriteCard(i, 1);
-        WriteString(' (<> 0) ');
-        ReadReal(k);
-        WriteLn
-      UNTIL k <> 0.0;
-      REPEAT
-        WriteLn;
-        WriteString('Unesite eksponent monoma br.');
-        WriteCard(i, 1);
-        WriteString(' (>=0) ');
-        ReadCard(st);
-      UNTIL Done;
-      WriteLn;
-    END;
-    UbaciMonom(novi, p);
-    DISPOSE(novi);
-  END
-END Unos;
-
-PROCEDURE Saberi(p1, p2: Polinom; VAR zbir: Polinom);
-BEGIN
-  Kopiraj(p1, zbir);
-  WHILE p2 <> NIL DO
-    UbaciMonom(p2, zbir);
-    p2 := p2^.veza
-  END
-END Saberi;
-
-PROCEDURE SaberiNa(p: Polinom; VAR rez: Polinom);
-BEGIN
-  WHILE p <> NIL DO
-    UbaciMonom(p,rez);
-    p := p^.veza;
-  END;
-END SaberiNa;
-
-PROCEDURE PromeniZnak(VAR p: Polinom);
-VAR
-  t: Polinom;
-BEGIN
-  t := p;
-  WHILE t <> NIL DO
-    t^.k := - t^.k;
-    t := t^.veza
-  END
-END PromeniZnak;
-
-PROCEDURE Oduzmi(p1,p2: Polinom; VAR razlika: Polinom);
-BEGIN
-  Kopiraj(p2, razlika);
-  PromeniZnak(razlika);
-  WHILE p1 <> NIL DO
-    UbaciMonom(p1, razlika);
-    p1 := p1^.veza
-  END
-END Oduzmi;
-
-PROCEDURE MonomPuta(p, mon: Polinom; VAR mp: Polinom);
-VAR
-  tekuci: Polinom;
-BEGIN
-  Anuliraj(mp);
-  IF (mon <> NIL) AND (p <> NIL) THEN
-    NEW(mp);
-    mp^.k := p^.k * mon^.k;
-    mp^.st := p^.st + mon^.st;
-    p := p^.veza;
-    tekuci := mp;
-    WHILE p <> NIL DO
-      NEW(tekuci^.veza);
-      tekuci := tekuci^.veza;
-      tekuci^.k := p^.k * mon^.k;
-      tekuci^.st := p^.st + mon^.st;
-      p := p^.veza
-    END;
-    tekuci^.veza := NIL
-  END
-END MonomPuta;
-
-PROCEDURE Puta(p1, p2: Polinom; VAR pr: Polinom);
-VAR
-  pomocni: Polinom;
-BEGIN
-  Anuliraj(pr);
-  IF (p1 <> NIL) AND (p2 <> NIL) THEN
-    MonomPuta(p1, p2, pr);
-    p2 := p2^.veza;
-    WHILE p2 <> NIL DO
-      MonomPuta(p1, p2, pomocni);
-      REPEAT
-        UbaciMonom(pomocni, pr);
-        pomocni := pomocni^.veza
-      UNTIL pomocni = NIL;
-      p2 := p2^.veza
-    END
-  END
-END Puta;
-
-PROCEDURE Kolicnik(p1, p2: Polinom; VAR kol, ost: Polinom; VAR ok: BOOLEAN);
-
-  PROCEDURE Deli(VAR kol, ost: Polinom);
-  VAR
-    novi, pomocni: Polinom;
-  BEGIN
-    IF ost <> NIL THEN
-      IF ost^.st >= p2^.st THEN
-        NEW(novi);
-        novi^.k := - ost^.k / p2^.k;
-        novi^.st := ost^.st - p2^.st;
-        MonomPuta(p2, novi, pomocni);
-        Saberi(ost, pomocni, ost);
-        novi^.k := - novi^.k;
-        UbaciMonom(novi, kol);
-        DISPOSE(novi);
-        Deli(kol, ost)
-      END
-    END
-  END Deli;
-
-BEGIN (* Kolicnik *)
-  ok := TRUE;
-  Anuliraj(kol);
-  IF p2 = NIL THEN
-    ok := FALSE
-  ELSE
-    Kopiraj(p1, ost);
-    Deli(kol, ost)
-  END
-END Kolicnik;
-\end{codeblock}
-\manbreakJK
-\begin{codeblock}
-PROCEDURE PolinomNaN(p: Polinom; n: CARDINAL;
-                     VAR rez: Polinom);
-VAR
-  i: CARDINAL;
-BEGIN
-  IF n = 0 THEN
-    NEW(rez);
-    rez^.k := 1.0;
-    rez^.st := 0;
-    rez^.veza := NIL;
-  ELSIF n = 1 THEN
-       Kopiraj( p, rez );
-  ELSE
-    rez := p;
-    FOR i := 2 TO n DO
-      Puta(rez, p, rez)
-    END
-  END;
-END PolinomNaN;
-
-PROCEDURE DisposePolinom(VAR p: Polinom);
-VAR
-  pomocni: Polinom;
-BEGIN
-  pomocni := p;
-  WHILE pomocni # NIL DO
-    p := p^.veza;
-    DISPOSE(pomocni);
-    pomocni := p
-  END
-END DisposePolinom;
-
-END PolinomL.
-\end{codeblock}
-
+\lstinputlisting[style=codeblock]{kodovi/polinomi/POLINOML.MOD}
 
 \subsection{Zadatak: Sabiranje sa unapred određenim polinomom}
 
 Želimo da ispišemo uneti polinom uvećan za\\ $x^5 - 3x^4 + 4x + 7$.
 
-\begin{lstlisting}[style=codeblock]
-MODULE polinom;
-FROM PolinomL IMPORT Polinom, Stampaj, Anuliraj, DisposePolinom, UbaciMonom, Unos, Saberi;
-FROM InOut IMPORT WriteString, WriteLn;
-FROM Storage IMPORT ALLOCATE, DEALLOCATE;
-
-VAR
-  p,q,rez,pom : Polinom;
-
-BEGIN
-  (* korisnik unosi prvi polinom *)
-  WriteString("Unesite polinom:");
-  WriteLn;
-  Unos(p);
-  (* drugi polinom kreiramo mi, 
-     monom po monom *)
-  Anuliraj(q); (* isto sto i q:=NIL; *)
-  (* formiramo monom x^5 *)
-  NEW(pom);
-  pom^.st:=5;
-  pom^.k:=1.0;
-  (* dodajemo ga u polinom *)
-  UbaciMonom(pom,q);
-  DISPOSE(pom);
-  (* -3 x^4 *)
-  NEW(pom);
-  pom^.st := 4;
-  pom^.k := -3.0;
-  UbaciMonom(pom,q);
-  DISPOSE(pom);
-  (* 4 x *)
-  NEW(pom);
-  pom^.st := 1;
-  pom^.k := 4.0;
-  UbaciMonom(pom,q);
-  DISPOSE(pom);
-  (* 7 (x^0) *)
-  NEW(pom);
-  pom^.st := 0;
-  pom^.k := 7.0;
-  UbaciMonom(pom,q);
-  DISPOSE(pom);
-  (* saberemo polinome *)
-  Saberi(p, q, rez);
-  (* odstampamo rezultat *)
-  Stampaj(rez,0);
-  WriteLn;
-  (* oslobadjanje zauzete memorije *)
-  DisposePolinom(p);
-  DisposePolinom(q);
-  DisposePolinom(rez);
-END polinom.
-\end{lstlisting}
+\lstinputlisting[style=codeblock]{kodovi/polinomi/polinom.MOD}
 
 \subsection{Zadatak: Suma k polinoma}
 
 Napisati program koji ucitava broj k (1<=k<=50) i k polinoma, a nakon
 toga izracunava njihovu sumu
 
-\begin{lstlisting}[style=codeblock]
-MODULE PolSuma;
-
-FROM PolinomL IMPORT Polinom, Anuliraj, DisposePolinom, Unos, Stampaj, SaberiNa;
-FROM InOut IMPORT WriteLn, WriteString, ReadCard, WriteCard;
-CONST
-  maxk = 50;
-TYPE
-  nizPol = ARRAY [1..maxk] OF Polinom;
-VAR
-  i, k: CARDINAL;
-  suma : Polinom;
-  p : nizPol;
-BEGIN
-  REPEAT
-    WriteString('Unesite broj k (1 <= k <= ');
-    WriteCard(maxk, 1);
-    WriteString(') ');
-    ReadCard(k);
-    WriteLn;
-  UNTIL (1 <= k) AND (k <= maxk);
-  FOR i := 1 TO k DO
-    WriteLn;
-    WriteString('Unos ');
-    WriteCard(i, 1);
-    WriteString('. polinoma.');
-    WriteLn;
-    Unos(p[i])
-  END;
-  Anuliraj(suma);
-  FOR i := 1 TO k DO
-    SaberiNa(suma, p[i])
-  END;
-  WriteLn;
-  WriteString('Njihova suma je:');
-  WriteLn;
-  Stampaj(suma, 4);
-  DisposePolinom(suma);
-  FOR i := 1 TO k DO
-    DisposePolinom(p[i]);
-  END;
-END PolSuma.
-\end{lstlisting}
+\lstinputlisting[style=codeblock]{kodovi/polinomi/PolSuma.MOD}
 
 \sectionbreak
 \section{Stek i red opsluživanja}
 
+\subsection{Primer: osnovno korišćenje steka i reda opsluživanja}
+
+\lstinputlisting[style=codeblock]{kodovi/stek-redopsl/stekred.mod}
+
 \subsection{Zadatak: Ilustracija pisanja u fajl uz pomoć bafera}
 
 \begin{lstlisting}[style=codeblock]
@@ -2283,7 +1738,7 @@ BEGIN
   END
 END Top;
 \end{lstlisting}
-\manbreakJK
+
 \begin{codeblock}
 PROCEDURE Pop(VAR s : StekTip;
               VAR ok : BOOLEAN);
@@ -2917,167 +2372,14 @@ END Rek2.
 \appendix
 
 \sectionbreak
-\section{Native XDS Modula 2 -- kratko uputstvo}
-
-
-Ovo uputstvo ukratko pokriva kako se može nabaviti XDS Modula 2 za Windows
-sistem, njenu instalaciju, te kako napraviti i pokretnuti jednostavan program.
-
-\subsection*{Dobavljanje instalacije}
-
-
-Native XDS Modula 2 se može besplatno skinuti sa sajta proizvođača,
-\url{http://www.excelsior-usa.com/}, tačnije na adresi:
-
-\url{http://www.excelsior-usa.com/xdsdl.html}
-
-Prvo se prikazuje ugovor o korišćenju koji na dnu treba potvrditi da ste
-razumeli i da ćete ga se pridržavati.
-
-Na stranici koja se potom otvara je potrebno odabrati ``XDS 2.6 beta 2
-for Windows'' i snimiti je na računar.
-
-\subsection*{Instalacija okruženja}
-
-Osnovno okruženje (xds-x86...) se instalira pokretanjem prethodno pomenute
- instalacione arhive. 
-
-\emph{Korisnicima Windows-a 7 preporučujemo da pokrenu instalacione
-  pakete pomoću opcije ``Run as administrator'' do koje se stiže desnim
-  klikom miša.}
-
-Pretpostavićemo u daljem tekstu da je program instaliran u
-\kod{C:/XDS/}
-
-\subsection*{Pokretanje okruženja}
-
-Po uspešnoj instalaciji bi trebalo da postoji ikonica na desktopu, kao
-i grupa sa programom u start meniju.
-
-Ukoliko iz bilo kakvog razloga ne postoje odgovarajuće prečice,
-okruženje se može pokrenuti uz pomoć izvršnog fajla
-\kod{C:/XDS/BIN/xds.exe} (ako je instalirano na podrazumevanoj
-lokaciji).
-
-\subsection*{Prvi projekat}
-
-Da bismo mogli da pišemo i pokrećemo svoj program, potrebno je prvo
-napraviti projekat za njega, što se radi na sledeći način:
-
-\begin{itemize}
-
-\item 
- Iz menija se odabere Project->New.
-\item U dijalogu se klikne na gornje dugme ``Browse'', odabere se putanja gde
-  će se kreirati projekat i ukuca se ime novog projekta.
-
-\item U drugom polju ``Template'' ne treba da piše ništa. Ukoliko
-  postoji neki tekst, obrisati ga.
-
-\item Kliknuti na ``OK''
-
-\item Iskočiće dijalog na kome piše da ne postoji fajl za editovanje,
-  kliknuti na ``OK'' da se on napravi.
-
-\item Pojavljuje se forma za kucanje programa, ukucati (na primer):
-
-\begin{minipage}{\columnwidth}
-\begin{lstlisting}[style=codeblock]
-  MODULE Hello;
-  FROM InOut IMPORT WriteString,WriteLn;
-  BEGIN
-    WriteString("Hello World");
-    WriteLn;
-  END Hello.
-\end{lstlisting} 
-\end{minipage}
-
-\item Program se može pokrenuti na različite načine, pri čemu se
-  automatski prevodi:
-
-  \begin{itemize}
-
-  \item Klik na ``Run'' ikonicu u toolbaru (plavi čovečuljak koji trči)
-
-  \item Meni Debug->Run
-
-  \item Prečica Ctrl+F9 na tastaturi
-
-  \end{itemize}
-
-\item Ako je sve u redu sa programom, treba da se pojavi novi terminal
-  u kome se ispisuje rezultat izvršavanja programa, u našem slučaju
-  jednostavna pozdravna poruka.
-\end{itemize}  
-
-Naravno moguće je i samo prevesti (kompajlirati) program, tako da se
-samo prikažu greške (ako ih ima) i bez pokretanja programa:
-\begin{itemize}
-\item Klik na ``Compile'' ikonicu u toolbaru
-\item Meni Tools->Compile
-\item Prečica F9 na tastaturi
-\end{itemize}
-
-Ukoliko u programu postoje greške, on neće biti pokrenut, već će se
-dobiti lista grešaka u donjem delu prozora. Na primer ako obrišemo ``S''
-u četvrtom redu i probamo da pokrenemo program, taj red će biti
-označen svetlo plavom bojom i dobićemo poruku:
-\kod{- Error in pro1.mod [4:5]: Undeclared identifier "Writeting"}
-
-Što znači da u četvrtom redu, kod petog karatkera postoji problem, da
-identifikator nije deklarisan, što najčešće znači da ga nismo uvezli,
-ili, kao u našem slučaju, da smo napravili grešku u kucanju.
-
-Stvar na koju isto treba obratiti pažnju je da se nekad greška
-prijavljue nešto kasnije u tekstu nego što je napravljena. Na primer,
-ako obrišemo ``;'' na kraju četvrtog reda i probamo da pokrenemo
-program, peti red će biti označen svetlo plavom bojom i dobićemo
-poruku:
-
-\kod{- Error in pro1.mod [5:5]: Expected symbol ";" }
-
-Ovo se desilo jer nedostaje tačka zarez na kraju četvrtog reda, ali će
-kompajler probati da je traži i dalje, pa će tek na početku petog reda
-prijaviti grešku.
-
-U spisku se takođe pojavljuje i upozorenje (Warning) o tome da se
-uvezena komanda WriteString ne koristi nigde u programu. Često se
-upozorenja mogu ignorisati, a pažnju uglavnom treba obraćati na
-greške, odnosno poruke koje počinju sa ``Error''.
-
-Takođe se često dešava da su druge prijavljene greške posledica prve,
-te je poželjno ponovo kompajlirati (ili pokretati) program posle svake
-ispravljene greške.
-
-\paragraph{Napomena o template-ovima pri kreiranju projekta:} 
-Moguće je namestiti da u dijalogu za novi projekat drugo polje ``Template''
- uvek bude prazno. Potrebno je u tom istom dijalogu kliknuti na
- ``Configure'', a potom isprazniti polje ``default template''.
-
-\subsection{Mogući problemi}
-
-\subsubsection*{Nedostajući sistemski moduli}
-
-Verzije pre 2.6 nisu imale uključene u glavni paket sve module koji se
-koriste u okviru kursa, i bilo je neophodno da se dodatno instalira i
-``Top Speed Compatibility Pack'' (tscp-x86...). Bez njega je kompajler
-prijavljivao da ne postoje neki moduli - najčešće je problem bio da
-nedostaje \kod{FIO} modul.
-
-\subsubsection*{Problemi u pokretanju - nemoguće naći exe}
-
-Ako pri pokušaju kompajliranja/pokretanja programa kompajler prijavi
-da ne može da nađe exe i pri tome prijavljuje kraću putanju od one
-koja je stvarno u pitanju, obično se radi o tome da je postojao razmak
-u okviru putanje do modula. Npr ``C:\textbackslash Moj prvi program''
-će prouzrokovati probleme, a kompajler će prijaviti da ne može da nađe
-``C:\textbackslash Moj''. 
-
-Ovo je nažalost problem okruženja i dok se ne ispravi u nekoj budućoj
-verziji ne može se zaobići, tako da je jedino rešenje premestiti
-fajlove, odnosno ako je moguće preimenovati problematične foldere.
+\pagenumbering{Roman}
+\input{xds-uputstvo}
 
 \mainend
 
 
+
+%%% Local Variables: 
+%%% mode: latex
+%%% TeX-master: "skripta-spa1-jk"
+%%% End: 
index 3fc8551..5486876 100644 (file)
--- a/todo.txt
+++ b/todo.txt
@@ -1,5 +1,3 @@
-doni: u prvi primer rada sa fajlom ubaciti Exists ?
-
 doni: ubaciti informacije o mogucim bagovima sa FIO modulom
 
 
diff --git a/xds-uputstvo.tex b/xds-uputstvo.tex
new file mode 100644 (file)
index 0000000..a379dca
--- /dev/null
@@ -0,0 +1,159 @@
+\section{Native XDS Modula 2 -- kratko uputstvo}
+
+
+Ovo uputstvo ukratko pokriva kako se može nabaviti XDS Modula 2 za Windows
+sistem, njenu instalaciju, te kako napraviti i pokretnuti jednostavan program.
+
+\subsection*{Dobavljanje instalacije}
+
+
+Native XDS Modula 2 se može besplatno skinuti sa sajta proizvođača,
+tačnije na adresi:\\
+\url{http://www.excelsior-usa.com/xdsdl.html}
+
+Prvo se prikazuje ugovor o korišćenju koji na dnu treba potvrditi da ste
+razumeli i da ćete ga se pridržavati.
+
+Na stranici koja se potom otvara je potrebno odabrati ``XDS 2.6 beta 2
+for Windows'' i snimiti je na računar.
+
+\subsection*{Instalacija okruženja}
+
+Osnovno okruženje (xds-x86...) se instalira pokretanjem prethodno pomenute
+ instalacione arhive. 
+
+\emph{Korisnicima Windows-a 7 preporučujemo da pokrenu instalacione
+  pakete pomoću opcije ``Run as administrator'' do koje se stiže desnim
+  klikom miša.}
+
+Pretpostavićemo u daljem tekstu da je program instaliran u
+\kod{C:/XDS/}
+
+\subsection*{Pokretanje okruženja}
+
+Po uspešnoj instalaciji bi trebalo da postoji ikonica na desktopu, kao
+i grupa sa programom u start meniju.
+
+Ukoliko iz bilo kakvog razloga ne postoje odgovarajuće prečice,
+okruženje se može pokrenuti uz pomoć izvršnog fajla
+\kod{C:/XDS/BIN/xds.exe} (ako je instalirano na podrazumevanoj
+lokaciji).
+
+\subsection*{Prvi projekat}
+
+Da bismo mogli da pišemo i pokrećemo svoj program, potrebno je prvo
+napraviti projekat za njega, što se radi na sledeći način:
+
+\begin{itemize}
+
+\item 
+ Iz menija se odabere Project->New.
+\item U dijalogu se klikne na gornje dugme ``Browse'', odabere se putanja gde
+  će se kreirati projekat i ukuca se ime novog projekta.
+
+\item U drugom polju ``Template'' ne treba da piše ništa. Ukoliko
+  postoji neki tekst, obrisati ga.
+
+\item Kliknuti na ``OK''
+
+\item Iskočiće dijalog na kome piše da ne postoji fajl za editovanje,
+  kliknuti na ``OK'' da se on napravi.
+
+\item Pojavljuje se forma za kucanje programa, ukucati (na primer):
+
+\begin{minipage}{\columnwidth}
+\begin{lstlisting}[style=codeblock]
+  MODULE Hello;
+  FROM InOut IMPORT WriteString,WriteLn;
+  BEGIN
+    WriteString("Hello World");
+    WriteLn;
+  END Hello.
+\end{lstlisting} 
+\end{minipage}
+
+\item Program se može pokrenuti na različite načine, pri čemu se
+  automatski prevodi:
+
+  \begin{itemize}
+
+  \item Klik na ``Run'' ikonicu u toolbaru (plavi čovečuljak koji trči)
+
+  \item Meni Debug->Run
+
+  \item Prečica Ctrl+F9 na tastaturi
+
+  \end{itemize}
+
+\item Ako je sve u redu sa programom, treba da se pojavi novi terminal
+  u kome se ispisuje rezultat izvršavanja programa, u našem slučaju
+  jednostavna pozdravna poruka.
+\end{itemize}  
+
+Naravno moguće je i samo prevesti (kompajlirati) program, tako da se
+samo prikažu greške (ako ih ima) i bez pokretanja programa:
+\begin{itemize}
+\item Klik na ``Compile'' ikonicu u toolbaru
+\item Meni Tools->Compile
+\item Prečica F9 na tastaturi
+\end{itemize}
+
+Ukoliko u programu postoje greške, on neće biti pokrenut, već će se
+dobiti lista grešaka u donjem delu prozora. Na primer ako obrišemo ``S''
+u četvrtom redu i probamo da pokrenemo program, taj red će biti
+označen svetlo plavom bojom i dobićemo poruku:
+\kod{- Error in pro1.mod [4:5]: Undeclared identifier "Writeting"}
+
+Što znači da u četvrtom redu, kod petog karatkera postoji problem, da
+identifikator nije deklarisan, što najčešće znači da ga nismo uvezli,
+ili, kao u našem slučaju, da smo napravili grešku u kucanju.
+
+Stvar na koju isto treba obratiti pažnju je da se nekad greška
+prijavljue nešto kasnije u tekstu nego što je napravljena. Na primer,
+ako obrišemo ``;'' na kraju četvrtog reda i probamo da pokrenemo
+program, peti red će biti označen svetlo plavom bojom i dobićemo
+poruku:
+
+\kod{- Error in pro1.mod [5:5]: Expected symbol ";" }
+
+Ovo se desilo jer nedostaje tačka zarez na kraju četvrtog reda, ali će
+kompajler probati da je traži i dalje, pa će tek na početku petog reda
+prijaviti grešku.
+
+U spisku se takođe pojavljuje i upozorenje (Warning) o tome da se
+uvezena komanda WriteString ne koristi nigde u programu. Često se
+upozorenja mogu ignorisati, a pažnju uglavnom treba obraćati na
+greške, odnosno poruke koje počinju sa ``Error''.
+
+Takođe se često dešava da su druge prijavljene greške posledica prve,
+te je poželjno ponovo kompajlirati (ili pokretati) program posle svake
+ispravljene greške.
+
+\paragraph{Napomena o template-ovima pri kreiranju projekta:} 
+Moguće je namestiti da u dijalogu za novi projekat drugo polje ``Template''
+ uvek bude prazno. Potrebno je u tom istom dijalogu kliknuti na
+ ``Configure'', a potom isprazniti polje ``default template''.
+
+\subsection{Mogući problemi}
+
+\subsubsection*{Nedostajući sistemski moduli}
+
+Verzije pre 2.6 nisu imale uključene u glavni paket sve module koji se
+koriste u okviru kursa, i bilo je neophodno da se dodatno instalira i
+``Top Speed Compatibility Pack'' (tscp-x86...). Bez njega je kompajler
+prijavljivao da ne postoje neki moduli - najčešće je problem bio da
+nedostaje \kod{FIO} modul.
+
+\subsubsection*{Problemi u pokretanju - nemoguće naći exe}
+
+Ako pri pokušaju kompajliranja/pokretanja programa kompajler prijavi
+da ne može da nađe exe i pri tome prijavljuje kraću putanju od one
+koja je stvarno u pitanju, obično se radi o tome da je postojao razmak
+u okviru putanje do modula. Npr ``C:\textbackslash Moj prvi program''
+će prouzrokovati probleme, a kompajler će prijaviti da ne može da nađe
+``C:\textbackslash Moj''. 
+
+Ovo je nažalost problem okruženja i dok se ne ispravi u nekoj budućoj
+verziji ne može se zaobići, tako da je jedino rešenje premestiti
+fajlove, odnosno ako je moguće preimenovati problematične foldere.
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner