X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=spa1skripta-public.git;a=blobdiff_plain;f=skripta-spa1-sadrzaj.tex;fp=skripta-spa1-sadrzaj.tex;h=50655d0b7b895274d8d75526f62d0705823c2fd9;hp=1651ea70c867e219357621ff2b8e798985df8989;hb=5032b8ef31be8b199297901b7fe1ec2c6dccea37;hpb=74eec3956c02c387de6afb0839d112544881cd3e diff --git a/skripta-spa1-sadrzaj.tex b/skripta-spa1-sadrzaj.tex index 1651ea7..50655d0 100644 --- a/skripta-spa1-sadrzaj.tex +++ b/skripta-spa1-sadrzaj.tex @@ -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 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: