gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
skripta verzija 14c
[spa1skripta-public.git] / skripta-spa1-sadrzaj.tex
index ecc671f..737cb2a 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 2014, Novi Sad}
-\newcommand{\verzija}{ver 14a-\varijacija}
+\newcommand{\datum}{April 2014, Novi Sad}
+\newcommand{\verzija}{ver 14c-\varijacija}
 %varijacija je definisana u fajlu koji ukljucuje ovaj
 
 \title{\naslov -- \verzija}
@@ -37,6 +37,10 @@ pdfauthor={\autor}%
 \usepackage{latexsym}
 \usepackage{multicol}
 
+\usepackage{tikz}
+\usetikzlibrary{chains}
+
+
 \begin{document}
 
 %customize the itemize environments
@@ -532,10 +536,19 @@ najadekvatniju za konkretnu primenu. U opštem slučaju definišemo npr:
      String = ARRAY [1..30] OF CHAR;
 \end{codeblock}
 
-Operacije nad stringovima se najčešće uvoze iz modula \kod{Str}. One
-sve prihvataju \emph{otvorene nizove znakova} (strukture definisane sa
-\kod{ARRAY OF CHAR}), tako da im se može proslediti niz proizvoljne
-dužine.
+Budući da Modula 2 definiše mogućnost korišćenja \emph{otvorenih
+  nizova}, lako je moguće definisati procedure koje kao parametre
+primaju bilo koji tip koji je definisan kao niz znakova.
+
+\begin{codeblock}
+   PROCEDURE ObradaStringa(str: ARRAY OF CHAR);
+\end{codeblock}
+
+Konkretne promenljive u programu moraju biti definisane dužine.
+
+Operacije nad stringovima se najčešće uvoze iz modula \kod{Str} i one
+su sve definisane da prihvataju \emph{otvorene nizove znakova} kao što
+je malopre objašnjeno.
 
 Određivanje stvarne dužine stringa (tj koliko od maksimalnog
 kapaciteta niza je zapravo zauzeto sadržajem) se može izvesti na
@@ -546,13 +559,12 @@ sledeći način:
     
 Leksikografsko poređenje dva stringa se ne može vršiti standardnim
 operatorima kao što su \kod{< > =}. Ovo je delom zato što se radi o
-nizovima, a delom i zato što se ne vidi direktno koji deo niza je
-popunjen stvarnim sadržajem. Za ovo se koristi komanda \kod{Compare},
-koja prihvata dva stringa kao parametre, a vraća broj koji predstavlja
-njihov odnos. Taj broj će biti 0 ako su stringovi jednaki, veći
-od nule ako je prvi string ``veći'', i manji od nule ako je prvi
-string ``manji''. Ovo se lako pamti kad primetimo da je odnos
-između \kod{Compare} i 0 isti kao i između prvog i drugog stringa.
+nizovima, ali značajnije i zato što se ne vidi direktno koji deo niza
+je popunjen ``stvarnim'' sadržajem. Za ovo se koristi komanda
+\kod{Compare}, koja prihvata dva stringa kao parametre, a vraća broj
+koji predstavlja njihov odnos. Taj broj će biti 0 ako su stringovi
+jednaki, veći od nule ako je prvi string ``veći'', i manji od nule ako
+je prvi string ``manji''.
 
 \begin{codeblock}
   IF    Compare(str1, str2) > 0 THEN
@@ -564,54 +576,137 @@ između \kod{Compare} i 0 isti kao i između prvog i drugog stringa.
   END;
 \end{codeblock}
 
+Ovo se lako pamti kad primetimo da je odnos između \kod{Compare} i 0
+isti kao i između prvog i drugog stringa.
+
 Postoji i modul \kod{Strings} koji ima nešto drugačije definisane
 procedure, no na njih se sada nećemo fokusirati.
 
 \sectionbreak
 \section{Rad sa fajlovima}
 
+Za rad sa fajlovima je bitno razumeti da su oni u suštini niz znakova,
+pri čemu neki imaju posebna značenja. Na primer novi red u tekstualnom
+fajlu ne postoji u istom smislu kao na ekranu ili na papiru, budući da
+svi znakovi dolaze jedan posle drugog u jednom nizu. Umesto toga
+postoje specijalo definisani kodovi u ASCII tabeli znakova koji
+predstavljaju prelome:
+\begin{itemize}
+\item Kod 10 -- \emph{Line feed} -- red dole na štampaču
+\item Kod 13 -- \emph{Carriage return} -- povratak na početak reda
+\end{itemize}
+
+Različiti operativni sistemi koriste različite kombinacije ovih
+znakova da označe prelome redova -- Windows koristi oba jedan za
+drugim, Linux i drugi srodni operativni sistemi tipično koriste samo
+\emph{LF}, dok je Apple definisao da je sam \emph{CR} prelom
+reda. Kvalitetni tekstualni editori uglavnom mogu sami da prepoznaju
+prelom koji je korišćen u fajlu i da se adekvatno prilagode.
+
+Pri radu sa fajlom se on tipično otvara preko neke pomoćne strukture
+koja potom pamti poziciju u fajlu odakle treba nastaviti čitanje ili
+gde će biti nastavljeno pisanje.
+
+\noindent\begin{minipage}{\columnwidth}
+\centering
+\begin{tikzpicture}
+% Delimicno bazirano na http://www.texample.net/tikz/examples/turing-machine-2/
+\tikzstyle{every path}=[very thick]
+
+\edef\sizetape{0.7cm}
+\tikzstyle{tmtape}=[draw,minimum size=\sizetape]
+
+%% Draw TM tape
+\begin{scope}[start chain=1 going right,node distance=-0.15mm]
+    \node [on chain=1,tmtape] {R};
+    \node [on chain=1,tmtape] {e};
+    \node [on chain=1,tmtape] {d};
+    \node [on chain=1,tmtape] { };
+    \node [on chain=1,tmtape] {1};
+    \node [on chain=1,tmtape] (input) {\emph{LF}};
+    \node [on chain=1,tmtape] {\emph{CR}};
+    \node [on chain=1,tmtape] {2};
+    \node [on chain=1,tmtape,draw=none] {$\ldots$};
+\end{scope}
+
+\node [yshift=.3cm] at (input.north) (head) {V};
+
+\end{tikzpicture}
+
+\emph{Primer: tekstualni fajl u kome u prvom redu piše ``Red 1'', a
+  drugi počinje znakom ``2''. Pozicija prikazuje da smo pročitali prvi
+  red.}
+\end{minipage}\\
+
+Bitno je i napomenuti da ukoliko pišemo u postojeći fajl novi sadržaj
+zamenjuje stari -- odnosno biće pisano preko starog teksta. Tipično ne
+postoje opcije da se novi sadržaj umeće u sredinu postojećeg fajla.
+
 \subsection{Modul FIO}
 
 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 +716,40 @@ 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}
+\subsubsection*{Mogući problemi}
+
+U ovoj glavi će biti navedeni neki česti problemi koji se mogu desiti
+pri korišćenju FIO modula, a koji su vezani za konkretnu
+implementaciju u XDS distribuciji kompajlera.
+
+\paragraph{\kod{RdStr} i drugi pozivi} Prilikom čitanja iz fajlova
+može doći do neobičnih rezultata ako se kombinuju pozivi \kod{RdStr}
+sa drugima. Problem je u različitom tretiranju separatora. Komanda
+\kod{RdStr} uvek čita do kraja reda i pri tome premesti poziciju za
+čitanje odmah iza znaka za razdvajanje redova. Ostale komande prvo
+preskaču separatore i čitaju sadržaj dok ne naiđu na novi separator
+(što može biti novi red, a može biti i razmak, tabulator i neki drugi
+znaci) i staju sa čitanjem \emph{pre} tog separatora. Kombinovanje
+ova dva pristupa može dovesti do toga da \kod{RdStr} nakon neke druge
+komande učita samo kraj trenutnog reda, a ne sledeći red kao što bi
+bilo očekivano.
+
+\paragraph{EOF i prazan red na kraju fajla} Svako čitanje iz fajla
+postavlja \kod{EOF} u skladu sa tim da li je komanda stigla do kraja
+fajla ili ne. Nažalost kod svih komandi za čitanje (osim \kod{RdStr})
+postoji problem ukoliko je na kraju prazan red ili neki dodatni
+separator. Tada učitavanje poslednjeg elementa nije zapravo došlo do
+kraja fajla. Ako se nakon toga proba još jedno učitavanje sa takvom
+komandom ona će probati da preskoči separator i da učita neki sadržaj,
+ali će se zaglaviti jer ne može da ga nađe. Ovo ponašanje je greška u
+implementaciji FIO modula u okviru XDS distribucije.
 
-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;
+\subsection{Zadatak: ispis sadržaja fajla na ekran}
 
-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;
+Potrebno je sve redove iz fajla učitati i ispisati ih na ekran.
 
-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,139 +758,22 @@ 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}
 
-Za rad sa pokazivačima je potrebno iz modula \kod{Storage} uvesti procedure
-\kod{ALLOCATE} i \kod{DEALLOCATE}. U kodu se tada mogu koristiti i njihovi
-skraćeni oblici \kod{NEW} i \kod{DISPOSE}.
+Za rad sa pokazivačima je potrebno iz modula \kod{Storage} uvesti
+procedure za dinamičko zauzimanje i oslobađanje
+memorije \kod{ALLOCATE} i \kod{DEALLOCATE}. 
+
+U kodu se mogu koristiti i skraćeni oblici \kod{NEW} i \kod{DISPOSE}
+koji se direktno prevode u prethodno pomenute procedure.
+
+\begin{codeblock}
+ALLOCATE(point, SIZE(point));   (* isto kao NEW(point)     *)
+DEALLOCATE(point, SIZE(point)); (* isto kao DISPOSE(point) *)
+\end{codeblock}
 
 \subsection{Zadatak: Formiranje, štampanje i brisanje listi}
 
@@ -893,7 +873,7 @@ BEGIN
   END;
 END DodajKraj;
 
-PROCEDURE DodajSort(VAR lista:brojevi; br:CARDINAL);
+PROCEDURE DodajSort(VAR lista:brojevi; br:INTEGER);
 (* dodaje broj tako da lista ostane sortirana 
    (podrazumeva se da je vec sortirana) *)
 VAR
@@ -919,6 +899,31 @@ BEGIN
 END DodajSort;
 \end{lstlisting}
 
+Kod svih procedura se mogu primeniti i rekurzivne varijante. Sledi
+primer za kreiranje sortirane liste.
+
+\begin{codeblock}
+PROCEDURE DodajSortRek(VAR lista:brojevi; br:INTEGER);
+(* Koristi se cinjenica da prosledjujemo pokazivac
+po referenci, tj. da ga mozemo menjati unutar procedure *)
+VAR
+  temp : brojevi;
+BEGIN
+  IF (lista = NIL) OR (lista^.info>=br) THEN
+    (* Izlaz iz rekurzije. Ubacivanje u praznu listu,
+    na kraj liste ili na odgovarajuce mesto *)
+    NEW(temp);
+    temp^.info:=br;
+    temp^.veza:=lista;
+    lista:=temp;
+  ELSE
+    DodajSortRek(lista^.veza, br);
+  END;
+END DodajSortRek;
+\end{codeblock}
+
+\manbreakJK
+
 \subsection{Zadatak: Prikaz osnovih operacija nad listama}
 
 \begin{lstlisting}[style=codeblock]
@@ -1607,7 +1612,8 @@ END VisTez.
 \subsection{Moduli}
 
 Polinomi su predstavljeni pomoću pokazivača. Apstraktni tip podataka
-\kod{Polinom} je definisan u globalnom modulu.
+\kod{Polinom} je definisan u globalnom modulu. Redosled parametara kod
+svih procedura je takav da varijabilni parametri dolaze na kraju.
 
 \paragraph{PolinomL.DEF} \ 
 
@@ -1816,7 +1822,7 @@ END Bafer.
 Reč pripada ovoj gramatici ako joj se prvi deo (w) sastoji samo od
 slova 'a' i 'b', sledi slovo 'c' a nakon njega obrnuta reč reči w.
 
-\begin{lstlisting}[style=codeblock]
+\begin{codeblock}
 DEFINITION MODULE Stek;
 CONST
   Maxstack = 100;
@@ -1865,9 +1871,7 @@ BEGIN
     END
   END
 END Top;
-\end{lstlisting}
 
-\begin{codeblock}
 PROCEDURE Pop(VAR s : StekTip;
               VAR ok : BOOLEAN);
 BEGIN
@@ -2500,166 +2504,17 @@ 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,
-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.
+\pagenumbering{Roman}
+\input{xds-uputstvo}
 
-\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.
+\sectionbreak
+\input{xds-komandna-linija}
 
 \mainend
 
 
+
+%%% Local Variables: 
+%%% mode: latex
+%%% TeX-master: "skripta-spa1-jk"
+%%% End: 
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner