Professional Documents
Culture Documents
1
UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA
Primer 25. (Zbirka) Napisati program na programskom jeziku PASKAL kojim se vrsi
preracunavanje americkih dolara u Euro, ako su poznate dinarske vrednosti ovih valuta.
program Konverzija;
P o č e ta k
uses WinCrt;
var D , K u rsE u ra,
D, KursDolara, KursEura : real; K u rsD o la ra ,
begin
write('Koliko dolara treba konvertovati u Eure: '); D * K u rs D o la r a /
readln(D); K u rsE u ra
write('Uneti kurs dolara izrazen u dinarima: ');
readln(KursDolara); K ra j
write('Uneti kurs Eura izrazen u dinarima: ');
readln(KursEura);
writeln(D:10:2, ' $ =', D*KursDolara/KursEura:8:2, ' Eura');
end.
2
Primer 27. (Zbirka) Napisati program na programskom jeziku PASKAL kojim se
izracunava hipotenuza pravouglog trougla na osnovu zadatih kateta.
program Hipotenuza;
uses WinCrt; P o č e ta k
var x,y
a, b, c : real;
2 2
begin re z u lta t= (a 2 + b )
write('Unesite duzinu kateta: ');
readln(a, b); re z u lta t
c:=sqrt(sqr(a)+sqr(b));
writeln('Duzina hipotenuze je: ', c:6:2); K raj
end.
Primer 3.9. (knjiga) Napisati program koji resava sledeci matematicki izraz: x 2 y 2
2
program razlomak1;
uses WinCrt; P o č e ta k
var
x, y, resenje : real; a, b, c
begin 2 2
r e s e n je = ( a 2 + b )
write('Unesite vrednosti promenljivih x i y: ');
readln(x, y);
resenje := sqr((sqr(x)+sqr(y))); r e s e n je
writeln('Resenje razlomka je: ', resenje:6:2);
K raj
end.
b b 2 4ac
Primer 8. (Zbirka) Napisati program koji izgacunava izraz:
2a
program razlomak1;
uses WinCrt; P o č e ta k
var a, b, c
a, b, c, resenje : real;
2
begin re s e n je = -b - b -4 a c
write('Unesite vrednosti parametara a, b i c: '); 2a
readln(a, b, c); re s e n je
resenje := (-b-sqrt(sqr(b)-4*a*c))/ (2*a);
writeln('Resenje zadatog razlomka je: ', resenje:8:2 ); K raj
end.
Primer 3.10. (knjiga) Napisati program kojim se prevodi temperatura iz skale Celzijusa
u skalu Farenhajta, ako je odgovarajuca formula oblika:
Temperatura po Farenhajtu = (temperatura po Celzijusu)*1.80 + 32
program CelzijusFar;
uses WinCrt;
var
tempC,tempF : real;
3
P o č e ta k
begin
write('Unesite temperaturu u stepenima Celzijusa: '); te m p C
readln(tempC);
tempF := tempC*1.8+32; te m p F = te m p C * 1 ,8 + 3 2
writeln('Temperatura po Farenhajtu je: ', tempF:8:2 );
end. te m p F
USLOVNI IZRAZI
IF-THEN-ELSE izraz
4
IF uslov THEN
izraz1
ELSE
izraz2;
ELSE-IF
Ukoliko postoji višestruko granjanje pored koristi se sledeđi izraz:
IF uslov1 THEN
izraz1
ELSE IF uslov2 THEN
izraz2
ELSE IF uslov3 THEN
izraz3
...
ELSE
izraz n;
5
Primer 3.14 (Zbirka) Napisati naredbu uslovnog prelaska kojom se za zadate realne
brojeve x i y izracunava z po formuli
min( x, y ), y 0
z
max( x , y ), y 0
2 2
program ZpoFormuli;
uses WinCrt; P o č e ta k
var x, y
x, y, z : real;
begin D a
y<0
write('Unesite vrednosti za x i y: '); D a
N e x 2< y 2
readln(x, y); D a
x<y N e
if y<0 N e z = x2 z=y2
then z=x z=y
if sqr(x)<sqr(y)
then z:=sqr(y) z
else z:=sqr(x)
K ra j
else
if x<y then z:=x
else z:=y;
writeln('Vrednost z je: ', z:8:2);
end.
6
write('Unesite koeficijente a i b: ');
P o č e ta k
readln(a, b);
if a<>0 a, b
then writeln('x= ', -b/a:10:3) D a
else a= 0
if b<>0 N e x = -b /a
then writeln('Jednacina nema resenja')
else writeln('Jednacina ima beskonacno resenja'); b=0 D a
end.
N e J e d n a c in a n e m a
re se n je
CASE-ELSE izraz
Opsti oblik CASE izraza je:
CASE izraz OF
label-1 : izraz-1;
label-2 : izraz-2;
...
label-n : izraz-n;
ELSE
izraz
END
7
Primer 3.26 (Zbirka) Napisati program kojim se na osnovu
P o č e ta k
unetih brojnih ocena 5, 4, 3, 2, 1 ispisuju opisne ocene
'odlican', 'vrlo dobar', 'dobar', dovoljan' i 'nedovoljan. ocena
program Ocene;
uses WinCrt; ocena
5 4 3 2 1
var
ocena : integer; 'o d l i c a n '
begin
write('Unesite ocenu: '); 'v r l o d o b a r '
readln(ocena);
case ocena of 'd o b a r '
5 : writeln('odlican');
4 : writeln('vrlo dobar'); 'd o v o l j a n '
3 : writeln('dobar');
2 : writeln('dovoljan');
1 : writeln('nedovoljan'); 'n e d o v o l j a n '
end
end. K ra j
Primer 3.29 (Zbirka) Napisati program koji za uneti broj meseca (na primer, 1=januar,
2=februar, itd) ispisuje njegov broj dana. U slucaju unete vrednosti 2 pitati korisnika da
li je godina prestupna.
program DaniUMesecu; P o č e ta k
uses WinCrt; m esec
var m e s e c < 0 || m e s e c > 1 2
D a
mesec : integer; prestupna : char; begin 1 ,3 ,5 ,7 ,8 ,1 0 ,1 2 4 ,6 ,9 ,1 1 2
Primer 3.33 (Zbirka) Napisati program kojim se ucitava znak za operaciju (+,-,*,/) i dva
realna operanda, a zatim stampa rezultat.
8
program MiniKalkulator;
uses WinCrt;
var
x, y, rezultat : real;
operacija : char;
def : boolean;
begin
write('Unesite vrednost za x: ');
readln(x);
write('Unesite operaciju: '); P o č e ta k
readln(operacija);
write('Unesite vrednost za y: '); x , o p e ra c ija , y
readln(y);
d e f= tru e
def:=true;
case operacija of o p e ra c ija
'+' : rezultat:=x+y; + - * /
'-' : rezultat:=x-y; y=0 N e
re z u lta t= x + y
'*' : rezultat:=x*y; D a
'/' : if y=0 then re z u lta t= x -y d e f= fa lse re z u lta t= x /y
begin
def:=false; re z u lta t= x * y
'R e z u l t a t j e
n e d e fin is a n '
write('Rezultat je
nedefinisan')
end N e
d e f= tru e
else rezultat:=x/y
end; D a
if def then writeln('Rezultat je ', re z u lta t
rezultat:10:3)
end. K ra j
PETLJE (CIKLUSI)
FOR petlja
FOR petlja se koristi kada izraz ili brok izraza treba ponoviti određeni broj puta. U okviru
petlje se nalazi početni uslov, krajnji uslov i brojač. Opšti oblik ove petlje je:
FOR kontrolna promenljiva := izraz-1 TO izraz-2 DO izraz;
gde je:
kontrolna promenljiva brojač u petlji,
izraz-1 početna vrednost,
izraz-2 krajnja vrednost.
Sve tri promenljive moraju biti istog tipa (nikad realne).
Ukoliko je početna vrednost brojača veca od krajnje, ona se umesto inkrementiranja koristi
dekrementiranje, jer se petlja nikad nece izvrsiti. Za dekrementiranje se umesto To koristi
DOWNTO:
FOR kontrolna promenljiva := izraz-1 DOWNTO izraz-2 DO
izraz;
9
U ovoj petlji brojač počinje od veće vrednosti i umanjuje se sve dok ne dostigne kranju
vrednost.
Primer 4.9. (Zbirka) Napisati program kojim se za zadato n izracunava faktorijal broja
n (faktorijal=n!=1*2*3*...n).
program Suma100;
uses WinCrt;
var P o č e ta k
fakt : integer;
i, n : integer; n
begin
write('Upisati broj n: '); fa k t= 1
readln(n);
i= 1 , n
fakt:=1;
for i:=1 to n do fa k t= fa k t* i
fakt:=fakt*i;
writeln('Faktorijal zadatog broja je: ', fakt);
end. fak t
K raj
Primer 4.14. (Zbirka) Napisati program kojim se za dati ceo broj n i realan broj x,
izracunava izraz: S sin( x) sin 2 ( x) +...+ sin n ( x)
program SumaSinus;
uses WinCrt;
var P o č e ta k
i, n : integer;
s, p, x : real; n, x
begin
s= 0 p = 1
write('Upisati broj n: ');
readln(n); i= 1 , n
write('Upisati broj x: ');
readln(x); p = p * s in (x )
s= s+ p
10 s
K raj
s:=0;
p:=1;
for i:=1 to n do
begin
p:=p*sin(x);
s:=s+p
end;
writeln('Suma izraza je ', s:8:2);
end.
P o č e ta k
Primer 4.22. (Zbirka) Napisati program za izracunavanje i xp, xk, h
stampanje vrednosti realne funkcije:
x 2 2x 2 n = tru n c ((x k -x p )/h )+ 1
y x=xp
x 2 1
ako se x menja od xp do xk sa korakom h. i= 1 , n
program razlomak;
uses WinCrt; y = ( x * x -2 .0 * x + 2 .0 )/( s q r ( x ) + 1 .0 )
var x, y
i, n : integer;
x=x+h
xp, xk, h, x, y : real;
begin
write('Upisati vrednosti za xp, xk i korak h: '); K raj
readln(xp, xk, h);
n:=trunc((xk-xp)/h)+1;
x:=xp;
for i:=1 to n do
begin
y:=(x*x-2.0*x+2.0)/(sqr(x)+1.0);
writeln(x:10:2, y:10:2);
x:=x+h
end;
end.
WHILE petlja
WHILE petlja se sastoji od uslova koji treba da bude zadovoljen da bi se završila petlja, pri
čemu ne postoji nikakav brojač. Opsti oblik ove petlje je:
WHILE uslov DO
izraz;
Izraz se izvršava sve dok je uslov ispunjen.
Primer 5.9. (Zbirka) Napisati program kojim se izracunava suma neparnih brojeva od 1
do 99.
program sumaNeparnih;
uses WinCrt;
var
11
i, s : integer;
begin
s:=0;
P o č e ta k
i:=1;
while i<99 do s = 0 i= 1
begin
s:=s+i; i< 9 9
i:=i+2;
end; s= s+ i
i= i+ 2
writeln('Suma neparnih brojeva je: ', s);
end.
Primer 5.32 (Zbirka) Napisati program kojim se u tekstu cije je obelezje kraja '*'
odredjuje broj samoglasnika, suglasnika i praznina.
program BrojacSimbola;
uses WinCrt;
var
simbol : char;
brSamoglasnika, brSuglasnika, brPraznina : integer;
begin
brSamoglasnika := 0;
brSuglasnika := 0;
brPraznina := 0;
writeln('Unesite tekst koji se zavrsava simbolom *: ');
read(simbol);
while simbol <> '*' do
begin
12
case simbol of
'A','E','I','O','U' : brSamoglasnika := brSamoglasnika + 1;
'B','C','D','F','G','H','J','K','L','M','N','P','Q',
'R','S','T','V','W','X','Y','Z' : brSuglasnika := brSuglasnika + 1;
' ' : brPraznina := brPraznina + 1;
end;
read(simbol)
end;
writeln('Broj samoglasnika je: ', brSamoglasnika);
writeln('Broj suglasnika je: ', brSuglasnika);
writeln('Broj praznina je: ', brPraznina);
end.
P o č e ta k
Primer 5.33 (Zbirka) Napisati program kojim se u p ra z n in a = 0
standardnoj ulaznoj (input) tekstualnoj datoteci ta c k a = 0
odredjuje broj praznina, tacaka i interpukcijskih z n a k In t= 0
znakova tipa: zapeta, dvotacka, tacka-zapeta, ako se u N e
datoteci nalaze samo nabrojani znaci. eof
D a
program Znakovi; e o ln
N e
uses WinCrt; D a
var znak
znak : char; znak
praznina, tacka, znakInt : integer; '' '. ' ': ', '; ', ', '
p r a z n in a = p r a z n in a + 1
begin
praznina := 0; ta c k a = ta c k a + 1
tacka := 0;
znakInt := 0; z n a k In t= z n a k In t+ 1
while not eof do
begin
p ra z n in a , ta c k a , z n a k In t
while not eoln do
begin K raj
read(znak);
case znak of
' ' : praznina := praznina + 1;
'.' : tacka := tacka + 1;
',',':',';' : znakInt := znakInt + 1;
end {case}
end; {eoln}
readln {prelazak na sledecu liniju}
end; {eof}
writeln('Praznine: ', praznina);
writeln('Tacke ', tacka);
writeln('Broj znakova interpukcije (,:;) je: ', znakInt);
end.
13
REPEAT petlja
Ova petlja se koristi za izvrsavanje veceg broja izraza sve dok se ne postigne određeni uslov.
Opsti oblik ove petlje:
REPEAT
izraz-1;
izraz-2;
...
izraz-n;
UNTIL uslov;
Primer 6.14 (Zbirka) Napisati program kojim se odredjuje broj jedinica u binarnom
zapisu prirodnog broja n.
program BrojJedinica; P o č e ta k
uses WinCrt;
var n,s : integer; n
begin
write('Unesite broj n: '); s= 0
readln(n);
s:=0; s= s+ n m o d 2
repeat n = n d iv 2
s:=s+n mod 2; {n mod 2 izdvaja cifru 0 ili 1}
N e
n:=n div 2 n=0
until (n=0); D a
writeln('U binarnom zapisu broja ima: ',s,' jedinica'); s
end.
K raj
14
FUNKCIJE
Funkcije predstavljaju podprograme koji vraćaju jednu vrednost. Funkcije su deo nekog izraza
koji se koristi u glavnom programu. Označavaju se sa rezervisanom reči FUNCTION iza koje
sledi ime funkcije i formalni parametri. Razlikuje se od procedure jer se mora odrediti tip
funkcije, odnosno tip rezultata. Ukoliko funkcija ne vraca vrednost kao tip rezultata navodi se
void. Sintaksa funkcije ima sledeci oblik:
Funkcija se može pozivati tako što se dodeli nekoj promenljivoj funkcija sa parametrima, npr:
D := Avg(A, B, C);(*Avg je naziv funkcije, a u zagradi su parametri*)
Parametri funkcije mogu biti slova, izrazi ili promenljive.
Primer 7.1 (Zbirka) Napisati funkciju pod imenom max koja vraca veci od dva zadata
cela broja.
m a x 2 (b ro j1 , b ro j2 )
program FunkcijaMax2;
uses WinCrt; b ro j1 > b ro j2 D a
function max2(broj1, broj2 : integer) : integer; N e
begin m a x 2 = b ro j1 m a x 2 = b ro j1
if broj1 > broj2
then max2 := broj1 K raj
else max2 := broj2
end;
P o č e ta k
var
a, b, rezultat : integer; a, b
begin
writeln('Unesite dva cela broja: '); r e z u lta t= m a x 2 (a ,b )
readln(a,b);
rezultat := max2(a,b); re z u lta t
writeln('Veci broj je: ', rezultat); K raj
end.
Primer 7.7 (Zbirka) Pretpostavljajuci da funkcije abs i odd nisu standardne, sastaviti
njihov zapis.
a b s(a )
function abs(a:real):real; a>0 D a
begin N e
if a>=0 ab s= -a abs= a
then abs:=a
else abs:=-a K raj
end;
function odd(a:integer):boolean;
begin
odd:=a mod 2=1
end;
15
Primer 7.10 (Zbirka) Napisati funkciju za izracunavanje n-tog stepena s te p e n (n ,a )
celog broja a.
function stepen(a, n : integer) : integer; an=1
var an, i : integer;
begin i= 1 , n
an :=1;
an=an*a
for i:=1 to n do
an:=an*a;
stepen :=an s te p e n = a n
end;
K raj
Primer Funkcija (Knjiga) suma kvadrata. Napisati funkciju kojom se s u m a k v ( m ,n )
izracunava suma kvadrata celih brojeva od m do n.
function sumakv(m, n : integer): integer; s= 0
var
s, i : integer; i= m , n
begin s = s + i* i
s:=0;
for i:=m to n do
s:=s+sqr(i); su m ak v = s
sumakv:=s
end; K raj
PROCEDURE
Procedura se definiše slično kao program, i sastoji je od zaglavlja, dela za deklaraciju i izraza.
Procedura počinje rezervisanom reči PROCEDURE. Parametri koji su rezervisani za izlaz
moraju biti deklarisani kao promenljivi parametri. Oni moraju imati rezervisanu reč VAR u svojoj
deklaraciji. S druge strane neki parametri služe samo kao ulazni; oni predaju vrednosti
proceduri i obično su deklarisani kao parametri vrednosti. Ako parametar služi za oboje, ulaz i
izlaz, onda mora biti deklarisan kao promenljivi parametar.
16
begin
... naredbe
end;
Primer Procedure (Knjiga) Napisati program koji koristi proceduru kvkub cije su ulazne
vrednosti dva cela broja m i n, a izlazne vrednosti su celi brojevi p i q. Rezultat p treba
da bude zbir kvadrata brojeva od m do n, a rezultat q zbir kubova brojeva od m do n.
Umesto pisanja dve funkcije za izracunavanje zbira kvadrata i zbira kubova pisemo
jednu proceduru koja izracunava ove dve vrednosti.
program PrimerProcedura; k v k u b ( m ,n ,k v ,k u b )
{Ilustruje koriscenje procedure}
uses WinCrt; kv=0 kub=0
var
i= m , n
broj1, broj2, m, n, k, p, q : integer;
procedure kvkub(m, n:integer; var kv, kub : integer); k v = k v + i* i
{Izracunava sumu kvadrata i sumu kubova brojeva od m do n} k u b = k u b + i* i* i
var
i : integer;
begin
kv:=0; K raj
kub:=0;
for i:=m to n do
begin
kv:=kv+i*i;
kub:=kub+i*i*i; P o č e ta k
end
end; b1, b2
begin
k v k u b ( b 1 ,b 2 ,p ,q )
write('Upisati vrednosti za broj1 i broj2 (broj1<broj2): ');
readln(broj1, broj2);
p, q
kvkub(broj1, broj2, p, q);
writeln(p:6, q:6); K ra j
end.
17
min:=bb;
max:=aa; m in m a x (a a ,b b ,m in ,m a x )
end
else aa> bb D a
begin N e
min:=aa; m in = a a m in = b b
max:=bb; m ax=bb m ax=aa
end
end; K ra j
Primer 6.8 (Knjiga) Napisati program koji tri broja x, y i z uredjuje u neopadajuci
poredak (rastuci). U programu koristiti proceduru pod imenom razmeni, kojom se
razmenjuju vrednosti dve promenljive.
REKURZIJA
Funkcije ili procedure se mogu pozivati unutar funkcije ili procedure i to svojstvo se naziva rekurzija.
18
Primer Rekurzivna funkcija (Knjiga). Napisati rekurzivnu funkciju za izracunavanje
faktorijala broja n.
fakt(n) = 1 za n=1,
fakt (n) = n*fakt(n-1)
fa k t(n )
function fakt(n : integer): integer; D a
begin n=1
if n=1 N e
fa k t= n * fa k t(n -1 ) fa k t= 1
then fakt:=1
else fakt:=n*fakt(n-1)
end; K raj
{Primer 6.12 (Knjiga) Banka na pocetku svake godine ulagacima obracunava kamatu od
p procenata na novcanu sumu koja je orocena u toku prethodne godine. Napisati
program kojim se izracunava novcani iznos kojim ceraspolagati ulagac posle n godina,
ako je pocetno ulaganje S.
ai=a(i-1)+a(i-1)*p/100
ili ai=(1+p/100)*a(i-1)
a0=S
ai=(1+p/100)*a(i-1)
function iznos(n:integer):real; iz n o s (n )
begin D a
if n=0 n=0
then iznos:=s N e
else iznos:=(1+p/100)*iznos(n-1) iz n o s := (1 + p /1 0 0 ) * iz n o s (n - 1 ) iz n o s = s
end;
K raj
program Banka;
19
uses WinCrt;
var
n, p, s : integer;
function iznos(n:integer):real;
begin
if n=0 P o č e ta k
then iznos:=s
else iznos:=(1+p/100)*iznos(n-1) s ,p ,n
end; n ,iz n o s (n )
begin
write('Unesite pocetni iznos novca, kamatu i broj godina: ');
K raj
readln(s, p, n);
writeln('Iznos novca posle ', n, ' godina je ', iznos(n):10:2)
end.
Primer 6.10 Rekurzivna procedura (Knjiga) Ako se sa ulaza ucitava niz znakova cija
duzina nije poznata, a obelezje kraja niza je *. Napisati program koji obezbedjuje ispis
niza u inverznom poretku.
Na primer, ako su ulazni podaci:
abcde*
racunar na izlazu treba da ispise: in v e rz
*edcba x
program inverzno(input,output);
D a
uses WinCrt; x = '* '
procedure inverz; N e
var in v e rz
x:char;
begin x
read(x);
if x<>'*' then inverz; K raj
write(x)
end;
begin P o č e ta k
write('Upisati niz karaktera koji se zavrsavaju znakom *: ');
inverz in v e rz
end.
K raj
Korisnik unosi brojcane vrednosti dana, meseca i godine. Napisati program koji ispisuje
dan u mesecu (brojcano), naziv datog meseca godinu i broj zadatog dana u godini. Na
primer ako je zadato “15 3 1988”, ispisuje se ”15 mart 1988 dan 75”.
program kalendar(input,output);
uses WinCrt;
20
{*program numericku prezentaciju dana, meseca i godine
prevodi u dan, naziv meseca, godinu i dan u godini*}
var
dan,mesec,godina,danaugodini,i:integer;
prestupna :boolean;
{****g1avni program****}
begin
case mesec of
1 : write('januar');
2 : write(' februar');
3 : write(' mart');
4 : write(' april');
5 : write(' maj');
6 : write(' jun');
7 : write(' jul');
8 : write(' avgust');
9 : write(' septembar');
10 : write(' oktobar');
11 : write(' novembar');
21
12 : write(' decembar')
end;
1,3,5,7,8,10: danaugodini:=danaugodini+31;
2: danaugodini:=danaugodini+28;
4,6,9,11: danaugodini:=danaugodini+30
end;
then danaugodini:=danaugodini+1;
22
RAD SA MODULIMA TURBO PASCAL-a
Kreirati unit pod imenom bibl1 sa funkcijama tangens zbir i
faktorijal.
Da bi se mogao koristiti unit snimiti pod imenom bibl1.pas i
obavezno kompajlirati (prevesti na masinski jezik). Zatim u
programu koji koristi funkcije iz ovog unita prikljuciti bibl1 u uses
delu.
Ime unita mora biti isto kao ime fajla koji sadr`i izvorni PASCAL
kod. Nakon kompajliranja stvara se fajl Bibl1.TPU
unit bibl1;
interface
{u interface delu se navode samo zaglavlja funkcija i procedura bez tela funkcije}
function tangens(broj : real) : real;
function zbir(broj1, broj2 : real) : real;
function faktorijal(k : integer) : integer;
implementation
{U delu za implementaciju kompletne funkcije i procedure (sa telom funkcija i
procedura) koje su deklarisane u interface delu unit-a}
function tangens;
begin
tangens := sin(broj)/cos(broj);
end;
function zbir;
begin
zbir := broj1+broj2;
end;
function faktorijal;
var
p, i : integer;
begin
p := 1;
for i:=1 to k do
p:=p*i;
faktorijal:=p;
end;
end.
Primer 7.8a (Zbirka) Napisati program koji poziva funkciju tangens iz primera 7.8 i sve
ostale funkcije iz unit-a bibl1.TPU )koji sam ja napravio)
program TangensBroja;
23
uses WinCrt, bibl1;
var
x, a, b, rezultat : real;
rez, n, m : integer;
begin
writeln('Unesite ugao u radijanima cisi se tangens racuna: ');
readln(x);
rezultat := tangens(x);
writeln('Tangens unetog broja je: ', rezultat:8:2);
end.
24
NESTANDARDNI TIPOVI PODATAKA
NABROJIVI TIP
Definise se kao uredjen skup nabrojanih imena, koja predstavljaju konstante tipa.
Na primer
type
dani=(nedelja, ponedeljak, utorak, sreda, cetvrtak, petak, subota);
i promenljiva:
dan : dani;
Primer 7.1 (Knjiga) Napisati program kojim se ispisuju pravila saobracajnog kretanja.
program pravilaKretanja;
uses WinCrt;
type
semafor=(crveno, zuto, zeleno);
var
signal : semafor;
begin
for signal:=crveno to zeleno do
case signal of
crveno : writeln('Crveno svetlo zabranjuje kretanje ');
zuto : writeln('Zuto svetlo upozorava o prekidu kretanja ');
zeleno : writeln('Zeleno svetlo dozvoljava nastavak kretanja ');
end
end.
25
NIZOVI
Nizovi su skupovi podataka istog tipa. Nizovi su indeksne promenljive. Svaki član niza
zauzima određenu memorijsku lokaciju. Ovakvi nizovi se nazivaju jednodimenzionalni nizovi
podataka. Korisni su za predstavljanje npr. imena ljudi, rezultata ispita ili nekih sličnih
podataka. Opšti oblik predstavljanja nekog niza:
N[1]
N[2]
N[3]
...
N[m]
N-ime niza; brojevi u zagradama predstavljaju indekse niza;
Pored jednodimenzionalnih nizova postoje i dvodimenzionalni nizovi (matrice) koji se koriste
za složenije strukture. Dvodimenzionalni nizovi se sastoje od redova (vrsta) i kolona.
Primer dvodimenzionalnog niza:
Aij
A-ime matrice
i-indeks vrste matrice
j-indeks kolone matrice
ili najčešće:
TYPE
niz = ARRAY[1..6] OF INTEGER;
VAR
mojniz :niz;
Primer 11.5 (Zbirka) Zadat je celobrojni niz x. Napisati program kojim se izracunava
srednja vrednost clanova zadatog niza.
program ProsecnaVrednostClanovaNiza;
uses WinCrt;
{Maksimalni dozvoljeni broj elemenata-clanova niza je 100}
const k=100;
{Deklarisemo novi tip podataka - niz od 100 realnih brojeva}
type
niz=array[1..k] of real; u c ita j( n ,a )
var
n, broj, i : integer; i= 1 , n
s : real; a [i]
x : niz;
26
var
i : integer;
begin
for i:=1 to n do
read(a[i])
end;
P ro s e c n a V re d n o s t(n ,a ,s )
procedure ProsecnaVrednost(n:integer; a:niz; var s:real);
{Procedura koja izracunava prosecnu vrednost clanova niza} s= 0
var
i= 1 , n
i : integer;
begin s = s + a [i]
s:=0;
for i:=1 to n do
s:=s+a[i]; s = s /n
s:=s/n
K raj
end;
P o č e ta k
begin
write('Unesite broj clanova niza: '); n
readln(n);
writeln('Unesite clanove niza: '); u c ita j( n ,x )
ucitaj(n, x);
ProsecnaVrednost(n,x,s); P r o s e c n a V r e d n o s t( n ,x ,s )
writeln('Prosecan vrednost clanova niza je: ', s:8:2);
end. s
K raj
Primer 11.6 (Zbirka) Zadat je celobrojni niz x. Napisati program kojim se izracunava
maksimalna vrednost zadatog niza.
program MaksimalnaVrednostClanovaNiza;
uses WinCrt;
{Maksimalni dozvoljeni broj elemenata-clanova niza je 100}
const k=100;
{Deklarisemo novi tip podataka - niz od 100 realnih brojeva}
type
niz=array[1..k] of real;
var u c ita j( n ,a )
n, broj, i : integer; i= 1 , n
amax : real;
x : niz; a [i]
27
begin
for i:=1 to n do
read(a[i])
M a k s im a ln a V r e d n o s t(n ,a ,a m a x )
end;
a m a x = a [1 ]
procedure MaksimalnaVrednost(n:integer; a:niz; var
amax:real); i= 2 , n
{Procedura koja izracunava prosecnu vrednost D a
clanova niza} a [i]> a m a x
begin N e a m a x = a [i]
amax:=a[1];
for i:=1 to n do K raj
if a[i]>amax then amax:=a[i];
end;
P o č e ta k
begin n
write('Unesite broj clanova niza: ');
readln(n); u c ita j( n ,x )
writeln('Unesite clanove niza: ');
{Unosi se jedan rezultat pa se sa Enter prelazi u sledeci M a k s im a ln a V r e d n o s t( n ,x ,a m a x )
red, pa se unosi sledeci pa Enter itd}
ucitaj(n, x); am ax
MaksimalnaVrednost(n,x,amax);
writeln('Maksimalna vrednost u nizu je: ', amax:8:2); K raj
end.
Primer 11.9 (Zbirka) Zadat je celobrojni niz x. Napisati program kojim se izracunava
suma pozitivnih elemenata zadatog niza.
P o č e ta k
program SumaPozitivnih;
uses WinCrt; n
{Maksimalni dozvoljeni broj elemenata-clanova
niza je 30} u c ita j( n ,x )
const k=30;
r e z u lta t= S u m a P o z itiv n ih C la n o v a ( n ,x )
{Deklarisemo novi tip podataka - niz od 100
realnih brojeva}
type re z u lta t
niz=array[1..k] of real;
var K raj
n, i : integer;
rezultat : real; u c ita j( n ,a )
x : niz;
i= 1 , n
procedure ucitaj(n:integer; var a:niz); a [i]
{Procedura ucitava clanove niza - u jednoj liniji}
var
i : integer; K raj
28
begin
for i:=1 to n do
read(a[i])
end; S u m a P o z iti v n i h C la n o v a ( n ,a )
function SumaPozitivnihClanova(n:integer; a:niz):real; s= 0
{Funkcija koja izracunava zbir pozitivnih clanova
niza} i= 1 , n
var D a
a [i]> 0
i:integer;
s:real; N e s = s + a [i]
begin
s:=0; S u m a P o z itiv n ih C la n o v a = s
for i:=1 to n do
if a[i]>0 then s:=s+a[i]; K raj
SumaPozitivnihClanova:=s
end;
begin
write('Unesite broj elemenata niza: ');
readln(n);
writeln('Unesite clanove niza: ');
ucitaj(n, x);
rezultat := SumaPozitivnihClanova(n,x);
writeln('Suma pozitivnih elemenata niza je: ', rezultat:8:2);
end.
Primer 8.4 (Knjiga) Napisati program kojim se odredjuje koliko je ucesnika takmicenja
iz programiranja imalo natprosecne rezultate.
program Natprosecni;
uses WinCrt;
const k=100;
type
niz=array[1..k] of real;
29
var
n, broj, i : integer;
s : real;
x : niz;
begin P o č e ta k
write('Unesite broj takmicara: ');
readln(n); n
writeln('Unesite rezultate: ');
{Unosi se jedan rezultat pa se sa Enter prelazi u sledeci red, pa u c ita j( n ,x )
se unosi sledeci rezultat, pa Enter itd}
p r o s e k ( n ,x ,s )
ucitaj(n, x);
prosek(n,x,s); b r o j= 0
broj:=0; {prebrojavanje prosecnih rezultata} i= 1 , n
for i:=1 to n do D a
if x[i]>s then broj:=broj+1; x [i]> s
writeln('Prosecan rezultat je: ', s); N e b r o j= b ro j+ 1
writeln('Natprosecne rezultate je imalo: ', broj, ' ucesnika')
end. b ro j
K raj
SORTIRANJE
Primer 8.11 (Knjiga) Zadat je celobrojni niz a. Napisati program koji koristi proceduru
sort1 za sortiranje niza u monotono neopadajuci poredak.
30
Pri prvom prolasku kroz niz (i=1) razmenjuju se vrednosti clana a[1] sa clanovima ostatka
niza a[2], a[3], ... a[n] koji su manji od njega. Zatim (za i=2) istim postupkom komponenta
a[2] dobija najmanju vrednost od ostatka niza. Procedura sort1 koristi proceduru razmeni
da razmeni vrednosti promenljivih.
program Sortiranje;
uses WinCrt;
{Maksimalni dozvoljeni broj elemenata-clanova niza je 100}
const k=100;
{Deklarisemo novi tip podataka - niz od 100 realnih brojeva}
type
niz=array[1..k] of real;
var
n : integer;
a : niz;
31
var is p is (n ,a )
i: integer;
begin i= 1 , n
for i:=1 to n do a [i]
begin
write(a[i]:6:2);
if i mod 10 = 0 then writeln K raj
end
end; P o č e ta k
begin n
write('Unesite broj elemenata niza: ');
readln(n); u c ita j(n ,a )
writeln('Unesite elemente niza: '); s o r t1 (n ,a )
ucitaj(n, a);
sort1(n, a); is p is (n ,a )
writeln('Sortirani niz je: ');
pisi(n, a); K raj
end.
Primer 8.11 (Knjiga) Zadat je celobrojni niz a. Napisati program koji koristi proceduru
sort2 za sortiranje niza u monotono neopadajuci poredak.
Drugi algoritam sortiranja (buble sort - metod mehurica) radi na sledeci nacin:
Ovom metodom se porede susedni elementi niza i ako su nepravilno uredjeni razmenjuju
mesta. Posle poredjenja svih parova susednih elemenata najveci ce isplivati na kraj niza i
zato se ovaj metod naziva metod mehurica. Postupak se ponavlja n-1 puta dok se ne izvrsi
sortiranje celog niza.
program Sortiranje;
uses WinCrt;
{Maksimalni dozvoljeni broj elemenata-clanova niza je 100}
const k=100;
{Deklarisemo novi tip podataka - niz od 100 realnih brojeva}
type
niz=array[1..k] of real;
var
n : integer;
a : niz;
32
end;
begin is p is (n ,a )
write('Unesite broj elemenata niza: ');
readln(n); K raj
writeln('Unesite elemente niza: ');
ucitaj(n, a);
sort2(n, a);
writeln('Sortirani niz je: ');
pisi(n, a);
end.
33
Primer 11.43 (Zbirka) Zadat je celobrojni niz a. Napisati program koji koristi proceduru
sort2 za sortiranje niza u monotono neopadajuci poredak i funkciju BinPret za nalazenje
indeksa zadatog clana niza i prikazivanje vrednosti clana na tom indeksu.
program SortiranjeIBinarnoPretrazivanjeNiza;
uses WinCrt;
{Maksimalni dozvoljeni broj elemenata-clanova niza je 100}
const k=100;
{Deklarisemo novi tip podataka - niz od 100 realnih brojeva}
type
niz=array[1..k] of real;
var
n, IndeksPronadjenogElementa : integer;
b : real;
a : niz;
34
var
gornja, donja, sredina : integer;
nadjen : boolean;
begin
donja:=1;
gornja:=n;
nadjen:=false;
while (donja<=gornja) and not nadjen do
begin
sredina:=(donja+gornja) div 2; {sredina intervala}
if (b=a[sredina]) {ako je element pronadjen}
then nadjen:=true
else {element nije pronadjen}
if b<a[sredina]
then gornja:=sredina-1 {nova gornja granica}
else donja:=sredina+1 {nova donja granica}
end;
if not nadjen
then BinPret:=0 {element nije nadjen}
else BinPret:=sredina {element je pronadjen}
end;
begin
write('Unesite broj elemenata niza: ');
readln(n);
writeln('Unesite elemente niza: ');
ucitaj(n, a);
sort2(n, a);
writeln('Sortirani niz je: ');
pisi(n, a);
writeln;
writeln('Upisati element niza koji se trazi: ');
readln(b);
IndeksPronadjenogElementa:=BinPret(n, b, a);
35
writeln('Element se nalazi na indeksu (poziciji u sortiranom nizu) ',
IndeksPronadjenogElementa);
writeln;
writeln('Vrednost elementa na poziciji ', IndeksPronadjenogElementa,' je: ',
a[IndeksPronadjenogElementa]:8:2);
end.
unit bibl2;
interface
const
k=100;
type
niz=array[1..k] of real;
procedure ucitaj(n:integer; var a:niz);
{Procedura ucitava clanove niza}
procedure pisi(n:integer; var a:niz);
{Procedura koja ispisuje clanove niza u neopadajucem poredku}
procedure razmeni(var a,b : real);
{Procedura koja razmenjuje vrednosti dva realna broja}
procedure sort1(n:integer; var a:niz);
{Procedura koja sortira clanove niza u neopadajucem poredku}
procedure sort2(n:integer; var a:niz);
{Procedura koja sortira clanove niza u neopadajucem poredku - metod mehurica}
function BinPret(n:integer; b:real; a:niz) : integer;
{Rezultat binarnog pretrazivanja je indeks onog elementa, uredjenog niza A koji je jednak
vrednosti od b, ili nula ako takvog elementa nema}
implementation
procedure ucitaj;
{Procedura ucitava clanove niza}
var
i : integer;
begin
for i:=1 to n do
read(a[i])
end;
procedure razmeni;
{Procedura koja razmenjuje vrednosti dva realna broja}
36
var
tmp : real;
begin
tmp:=a;
a:=b;
b:=tmp
end;
procedure sort1;
{Procedura koja sortira clanove niza u neopadajucem poredku}
var
i, j : integer;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then razmeni(a[i], a[j]);
end;
procedure sort2;
{Procedura koja sortira clanove niza u neopadajucem poredku - metod mehurica}
var
i, granica : integer;
begin
for granica:=n-1 downto 1 do
for i:=1 to granica do
if a[i]>a[i+1] then razmeni(a[i], a[i+1]);
end;
procedure pisi;
{Procedura koja ispisuje clanove niza u neopadajucem poredku}
var
i: integer;
begin
for i:=1 to n do
begin
write(a[i]:6:2);
if i mod 10 = 0 then writeln
end
end;
function BinPret;
{Rezultat binarnog pretrazivanja je indeks onog elementa, uredjenog niza A koji je jednak
vrednosti od b, ili nula ako takvog elementa nema}
var
gornja, donja, sredina : integer;
nadjen : boolean;
begin
37
donja:=1;
gornja:=n;
nadjen:=false;
while (donja<=gornja) and not nadjen do
begin
sredina:=(donja+gornja) div 2; {sredina intervala}
if (b=a[sredina]) {ako je element pronadjen}
then nadjen:=true
else {element nije pronadjen}
if b<a[sredina]
then gornja:=sredina-1 {nova gornja granica}
else donja:=sredina+1 {nova donja granica}
end;
if not nadjen
then BinPret:=0 {element nije nadjen}
else BinPret:=sredina {element je pronadjen}
end;
end.
38
MATRICE
Primer 6.12a (Zbirka) Napisati program (funkciju) kojom se za realnu matricu A (NxN)
izracunava suma svih elemenata (clanova) matrice.
39
for i:=1 to n do
for j:=1 to n do
s:=s+A[i,j];
SumaElemenata:=s
end;
begin is p is (n ,A )
write('Upisati dimenzije matrice (n):');
readln(n); i= 1 , n
write('Unesite elemente matrice (3x3): '); j= 1 , n
ucitajMatricu(n, A);
writeln('Elementi matrice su: '); A [i][j]
for i:=1 to n do
for j:=1 to n do
writeln(A[i][j]:8:2); K raj
writeln;
rezultat:=SumaElemenata(n, A);
write('Suma elemenata matrice je: ', rezultat:8:2);
end.
Primer 6.12b (Zbirka) Napisati program (funkciju) kojom se za realnu matricu A (NxN)
izracunava suma svih elemenata (clanova) matrice na glavnoj dijagonali.
Primer 6.12e (Zbirka) Napisati program (funkciju) kojom se za realnu matricu A (NxN)
izracunava suma svih negativnih elemenata (clanova) matrice.
40
for j:=1 to n do
if A[i,j]<0 then S u m a N e g a tiv n ih E le m e n a ta ( n ,A )
s:=s+A[i,j];
SumaNegativnihElemenata:=s s= 0
end;
j= 1 , n
Unit u kome se nalaze funkcije za rad sa i= 1 , n
matricama.
A [i][j]< 0 N e
D a
unit bibl3;
s = s + A [i][j]
interface
const k=10; S u m a N e g a tiv n ih E le m a n a ta = s
type
niz=array[1..k] of real; K ra j
matrica=array[1..k] of niz;
procedure ucitajMatricu(n:integer;var A:matrica);
function SumaElemenata(n:integer; A:matrica) : real;
function SumaDijagonalnihElemenata(n:integer; A:matrica) : real;
function SumaNegativnihElemenata(n:integer; A:matrica) : real;
implementation
procedure ucitajMatricu;
var
i, j : integer;
begin
for i:=1 to n do
for j:=1 to n do
read(A[i][j])
end;
function SumaElemenata;
var
s : real;
i, j : integer;
begin
s:=0;
for i:=1 to n do
for j:=1 to n do
s:=s+A[i,j];
SumaElemenata:=s
end;
function SumaDijagonalnihElemenata;
var
s : real;
41
i, j : integer;
begin
s:=0;
for i:=1 to n do
for j:=1 to n do
if i=j then
s:=s+A[i,j];
SumaDijagonalnihElemenata:=s
end;
function SumaNegativnihElemenata;
var
s : real;
i, j : integer;
begin
s:=0;
for i:=1 to n do
for j:=1 to n do
if A[i,j]<0 then
s:=s+A[i,j];
SumaNegativnihElemenata:=s
end;
end.
42
STRINGOVI
Funkcije i procedure kod strinogova su sledeće:
Funkcije:
LENGTH(str) -vraća broj karaktera u stringu str.
CONCAT(str1, str2,...) –vraća string koji se dobija spajanjem strinogova str1, str2,...
COPY(str, pos, len) –vraća podstring iz stringa str, koji počinje od pozicije pos, sa dužinom
len.
POS(str1, str2)-vraća pozicju prvog pojavljivanje karaktera str1 u str2. Ako se str1 ne sadrži u
str2 vraća se nula.
Procedure:
INSERT(str1, str2, pos) -ubacuje string str1 u string str2, od mesta pos.
DELETE(str, pos, len) -briše podstring iz stringa str počevši od pozicije pos dužine len.
EOLN je logička funkcija se koristi za utvrđivanje kraja linije pri čitanju ulaznog fajla.
Funkcija ima vrednost false sve dok se ne dostigne kraj reda kada postaje true. Ova funkcija je
korisna kada se ne zna koliko karaktera ima u redu. Za ovu funkciju se može koristiti petlja:
WHILE NOT EOLN DO
BEGIN
READ(Ch);
...
END;
Druga Bulova funkcija je EOF koja se koristi za određivanje kraja datoteke. Funkcija daje
vrednost FALSE sve dok se ne dođe do kraja datoteke kada dobija vrednost TRUE. Obično se
koriste funkcije EOF i EOL u kombinaciji kako bi se analiziralo više redova teksta.
WHILE NOT EOF DO
BEGIN
WHILE NOT EOLN DO
BEGIN
READ(Ch);
... { obrada podataka }
END; { Kraj linije }
READLN { pozicioniranje na početak novog reda }
END; { kraj fajla }
Primer 13.3 (Zbirka) Napisati program kojim se ucitavaju prezimena studenata iz jedne
grupe, a zatim se ispisuju u alfabetskom poretku.
program Alfabet; r a z m e n i( s 1 ,s 2 )
uses WinCrt;
te m p = s 1
const k=50; s1 = s2
type maxstring=string[30]; {maksimalni broj slova u prezimenu} s 2 = te m p
var i, j, n : integer; K raj
prezime : array[1..k] of maxstring;
43
procedure razmeni(var s1,s2 : maxstring);
var
tmp : string[30]; P o č e ta k
begin n
tmp:=s1;
s1:=s2; i= 1 , n
s2:=tmp;
p re z im e [i]
end;
begin i= 1 , n -1
write('Unesite broj studenata: ');
readln(n); j= i+ 1 , n
writeln('Unesite prezimena: '); p re z im e [i]> p re z im e [j]
for i:=1 to n do
readln(prezime[i]); r a z m e n i( p re z im e [ i],p re z im e [j])
for i:=1 to n-1 do
for j:=i+1 to n do
if prezime[i]>prezime[j] i= 1 , n
then razmeni(prezime[i], prezime[j]); p re z im e [i]
writeln('Prezimena studenata uredjena po
alfabetskom redosledu su: ');
for i:=1 to n do K raj
writeln(prezime[i]);
end.
Primer 13.4 (Zbirka) Napisati program kojim se u zadatom stringu s broji pojavljivanje
datog znaka x.
program BrojZnakova;
uses WinCrt;
44
Primer 13.18 (Zbirka) Napisati program kojim se u zadatom stringu s zamenjuje svako
pojavljivanje stringa s1 sa s2.
P o č e ta k
program Zamena;
uses WinCrt; s, s1 , s2
var
pozicija : integer; p o s ( s 1 ,s 2 ) = 0 N e
s, s1, s2 : string; D a
begin p o z ic ija = p o s (s 1 ,s )
write('Unesite tekst: '); d e le te ( s ,p o z ic ija ,le n g th ( s 1 ) )
readln(s); in s e rt( s 2 ,s ,p o z ic ija )
writeln('Zameniti string (s1): ');
readln(s1);
writeln('Sa stringom (s2): '); s
readln(s2);
while pos(s1,s)<>0 do K raj
begin
pozicija:=pos(s1,s);
delete(s,pozicija,length(s1));
insert(s2,s,pozicija)
end;
writeln(s)
end.
Primer 13.26a (Zbirka) Napisati program koji broji reci u zadatom stringu.
Rec je niz znakova izmedju praznina (razmaka).
P o č e ta k
program BrojReci;
uses WinCrt; s
var i, brojac, k : integer;
s : string; b ro ja c = 0
begin k=0
write('Unesite string: '); s= s+ ' '
readln(s); i= 1 , le n g th (s )
brojac:=0; D a
k:=0; s[i]= ' '
s:=s+' '; N e k=k+1
for i:=1 to length(s) do D a
k>0
if s[i]<>' '
N e
then k:=k+1 k=0 b ro ja c = b ro ja c + 1
else
begin
if k>0 then brojac:=brojac+1; b ro ja c
k:=0;
end; K raj
writeln('Broj reci u stringu je: ', brojac);
end.
45
SLOGOVI
Slogovi su skupovi podataka međusobno povezanih koji mogu biti različitog tipa. Svaki
element zapisa naziva se polje. Deklaracija slogova se sastoji u sledećem:
type
identifikator = RECORD
lista polja
END;
Npr. zapis o zaposlenima:
TYPE
Zaposleni = RECORD
Ime :STRING[25];
Adresa :STRING[40];
tel :STRING[12];
Plata :REAL;
END;
Pristup poljima podataka se vrši tako što se ime sloga i identifikator polja odvajaju tačkom. Na
primer:
Zaposleni.Ime := 'Pero Peric';
Zaposleni.Plata := 22500;
Ako treba da se odštampa npr. podatak o imenu:
WRITELN('Ime zaposlenog: ', Zaposleni.Ime);
WITH izraz
WITH izraz omogućava da se pristupi poljima sloga bez korišćenja promenljivih polja. Efekat
upotrebe with izraza je da se pripoji svako ime polja imenu sloga. Ako neka od promenljivih u
bloku nije identifikator polja, neće se promeniti sa with izrazom. Ako iza with ima samo jedan
izraz, nema potrebe da se koristi BEGIN-END blok. With se može koristiti pri pozivanju
procedure npr:
WITH ZaposleniRec DO
PrikaziRezultat(Ime, Plata);
Ovo je ekvivalentno sa:
PrikaziRezultat(ZaposleniRec.Ime, ZaposleniRec.Plata);
WITH izraz ima opšti oblik:
WITH identifikaktor-sloga DO izraz;
Primer 10.1 (Knjiga) Deklarisati slog osoba sa sledecim podacima: Ime, adresa, starost,
zanimanje(ponuditi sledeca zanimanja - student, inzenjer, menadzer, ekonomista).
Napisati program za citanje slogova kojim se opisuju dve osobe i ispisuju informacije o
starijoj osobi.
program Stariji;
uses WinCrt;
{Program cita podatke o dve osobe i ispisuje podatke o starijoj osobi}
type
licnost=record
ime:string;
46
adresa:string;
starost:integer; c ita n je S lo g a (o s o b a )
zanimanje:
(student,inzenjer,menadzer,ekonomista) o s o b a .im e ,
end; o s o b a .a d r e s a
var o s o b a .s ta ro s t
starija, osoba1,osoba2:licnost;
p ra v iln o = (s ta ro s t> = 0 )
procedure citanjeSloga(var osoba:licnost); & & ( s ta r o s t< = 1 2 0 )
{Procedura koja cita slog} D a
p ra v iln o
var
N e
simbol:char;
pravilno : boolean; G resk a
begin
with osoba do s im b o l
begin
write('Unesite ime i prezime osobe: '); s im b o l
readln(ime); S I M E
write('Unesite adresu osobe: '); z a n im a n je = s tu d e n t
readln(adresa);
repeat z a n im a n je = in z e n je r
write('Unesite starost osobe: ');
readln(starost); z a n im a n je = m e n a d z e r
pravilno:=(starost>=0) and (starost<=120);
if not pravilno then writeln('Greska u unosenju z a n im a n je = e k o n o m is ta
godina!');
until pravilno; K ra j
writeln('Unesite S, ako je osoba student');
writeln('Unesite I, ako je osoba inzenjer');
writeln('Unesite M, ako je osoba menadzer');
writeln('Unesite E, ako je osoba ekonomista');
readln(simbol);
case simbol of P o č e ta k
'S' : zanimanje:=student;
'I' : zanimanje:=inzenjer; c ita n je S lo g a (o so b a 1 )
'M' : zanimanje:=menadzer;
'E' : zanimanje:=ekonomista; c ita n je S lo g a (o s o b a 2 )
end; D a
writeln o s o b a 1 .s ta r o s t> o s o b a 2 .s ta r o s t
end N e
s ta rija = o s o b a 2 s ta rija = o s o b a 1
end;
47
else starija:=osoba2;
with starija do
begin
writeln('Starija osoba je: ');
writeln(ime);
writeln(adresa);
case zanimanje of
student : writeln('Student');
inzenjer : writeln('Inzenjer');
menadzer : writeln('Menadzer');
ekonomista : writeln('Ekonomista');
end
end
end.
Primer 10.2 (Knjiga) Napisati program kojim se citaju slogovi koji sadrze prezime,
adresu i broj telefona, a zatim ih ispisuju u afabetskom poretku.
program Imenik;
uses WinCrt;
{Program ispisuje alfabetski uredjen imenik}
const
maks=50; {Maksimalan broj imena u imeniku}
type
licnost=record
prezime:string;
adresa:string;
telefon:string; c ita n je S lo g a (te k u c is lo g )
end;
niz=array[1..maks] of licnost; te k u c is lo g .p r e z im e ,
var te k u c is lo g .a d r e s a ,
i, brojac : integer; te k u c is lo g .te le f o n
spisak : niz;
simbol : char; K raj
48
begin
with tekucislog do
begin
write('Unesite prezime osobe: ');
readln(prezime);
write('Unesite adresu osobe: ');
readln(adresa);
write('Unesite telefon: ');
readln(telefon);
end
end;
begin
brojac:=0;
repeat
brojac:=brojac+1;
citanjeSloga(spisak[brojac]);
writeln('Ima li jos slogova (D/N): ');
49
readln(simbol);
until (simbol<>'D') or (brojac>=maks); P o č e ta k
sortiranje(brojac, spisak);
b ro ja c = 0
for i:=1 to brojac do
begin b ro ja c = b ro ja c + 1
write('Pritisnite <ENTER> za ispis sledeceg
sloga'); c ita n je S lo g a (sp is a k [b ro ja c ])
read(simbol);
ispisSloga(spisak[i]) s im b o l
end; D a
( s i m b o l < > 'D ') o r ( b r o j a c > = m a k s )
writeln('Ispisani su svi slogovi.');
N e
end.
s o r tir a n je ( b r o ja c ,s p is a k )
i= 1 , n
is p is S lo g a (s p is a k [ i] )
K raj
50
DATOTEKE
FILE ili datoteka se definiše kao skup povezanih celina koji se nalaze na disku ili drugom
medijumu. Nad datotekom se mogu izavoditi sledeće operacije:
1. čitanje iz fajla
2. upisivanje u fajl.
Datoteke mogu biti tekstualne ili binarne. Tekstualne datoteke su skupovi struktura i svih
njegovih karaktera tipa char. Tekstualne datoteke se sastoje od linija karaktera razdvojenih sa
krajem linije (EOLN). Fajl na disku izgleda isto kao i tekst na ekranu koji se unosi preko
tastature.
Pristup tekstualnoj datoteci
Da bi pristupili tekstualnoj datoteci, moramo deklarisati promenljivu file sa tipom text. Npr.:
var
f:text;
Otvaranje datoteke
Da bi čitali podatke iz datoteke, moramo je prvo otvoriti sa standardnom procedurom reset:
reset(f);
Da bi povezali promenljivu f sa datotekom koja se nalazi na disku koristimo proceduru
assign. Ukoliko znamo ime datoteke navodimo u ovom proceduri:
assign(f,c: \config.sys);
reset(f);
Važno je naglasiti da kada se navodim ime fajla, ukoliko nije u istom direktorijumu u kome se
program izvršava, potrebno je navesti putanju datoteke.
Zatvaranje datoteke vrši se procedurom close, kada završimo sa otvaranjem i manipulacijom
sa podacima u datoteci.
close(f);
Opšta formula za pripremu tekstualne datoteke je sledeća:
Zaglavlje programa
PROGRAM Ime;
Deklaracija promenljivih
f :TEXT;
Povezivanje imena datoteke sa imenima promenljivih file
ASSIGN(f, ime-file);
Otvaranje datoteke
RESET(f);
Zatvaranje datoteke
CLOSE(f);
Čitanje podataka iz datoteke vrši se pomoću procedura read i readln.
READLN(f, lista podataka);
READ(f, lista podataka);
Funkcije za određivanje kraja linije i kraja datoteke su:
EOLN(f)
EOF(f)
Ispisivanje sadržaja tekstualne datoteke vrši se pomođu write, ali prethodno se podaci moraju
pročitati iz datoteke_
READLN(f,Ch);
51
WRITE(Ch);
Da bi se razdvojile linije u datoteci pri ispisu na ekranu nepohodno je koristiti naredbu writeln,
kada se utvrdi kraj jednog reda.
Kreiranje datoteke vrši se sa rewrite:
REWRITE(f);
Upisivanje u datoteku vrši se sa procedurom write ili writeln:
WRITELN(f, lista promenljivih);
or
WRITE(f, lista promenljivih);
Definisanje tipa datoteke:
type
identifikator=file of tip-podatka;
Tip podataka može biti integer, array (strukturni tip) ili slog.
Dodavanje podataka u datoteku
Za dodavanje podataka u datoteci koristi se sledeći oblik:
APPEND(promenljive u datoteci);
Sa append se pozicioniramo na kraj datoteke pa se novi podaci dodaju na kraju.
Brisanje sdadržaja datoteke se vrši uz pomć procedure ERASE, koja ima oblik:
ERASE(promenljive);
1. Napisati program koji upisuje niz celih brojeva u binarnu datoteku, a zatim ocitava
vrednosti iz te datoteke i ispisuje ih na ekran.
program upisivanjeBrojevaUDatoteku; P o č e ta k
uses WinCrt;
var f , 'c : \ i z l a z . d a t '
f: file of Integer; i= 1 , 6
i,j: Integer;
begin f, i
Assign(f,'c:\izlaz.dat');
Rewrite(f);
for i := 1 to 6 do D a
E o f(f)
Write(f,i); N e
Writeln('U fajlu su upisani brojevi:'); f, i
Reset(f);
while not Eof(f) do i
begin
Read(f,i);
Writeln(i); K raj
end;
52
Close(f);
end.
2. Napisati program koji upisuje niz celih brojeva u binarnu datoteku, a zatim ocitava
vrednosti iz te datoteke i ispisuje ih na ekran.
program citanjeBrojevaizDatoteke; P o č e ta k
uses WinCrt; im e d a t1
type f u la z ,im e d a t1
intdat = file of Integer; D a
E o f(fu la z )
var N e
fulaz : intdat; fu la z , x
x : integer;
imedat1 : string[30]; 2*x
begin
write('Upisati ime datoteke: ');
K raj
readln(imedat1);
assign(fulaz, imedat1);
reset(fulaz);
while not Eof(fulaz) do
begin
Read(fulaz,x);
{x:=x*2;}
Writeln(2*x);
end;
close(fulaz)
end.
3. Napisati program koji cita broj sa ekrana, mnozi ga sa dva i upisuje rezultat u
tekstualnu datoteku.
program upisBrojevaUDatoteku;
uses WinCrt; P o č e ta k
var
fizlaz : text; x ,im e d a t1
x : integer; f iz la z ,im e d a t1
imedat1 : string[30];
begin x=2*x
write('Upisati broj: ');
fiz la z , x
readln(x);
write('Upisati ime datoteke: '); K raj
readln(imedat1);
assign(fizlaz, imedat1);
reset(fizlaz);
rewrite(fizlaz);
x:=2*x;
53
write(fizlaz, x);
close(fizlaz)
end.
program kopidatoteke;
uses WinCrt;
var
ch:char;
x,y:text;
imedat1, imedat2:string[20];
begin P o č e ta k
write('Upisati ime datoteke (celu putanju): ');
readln(imedat1); im e d a t1
assign(x, imedat1);
assign(y, 'c:\nova.txt'); x ,im e d a t1
reset(x); y , 'c : \ n o v a . t x t '
rewrite(y);
while not eof(x) do N e
e o f(x )
begin D a
while not eoln(x) do N e
e o ln (x )
begin D a
read(x,ch); x, ch
write(y,ch);
if ch=' ' then y, ch
begin N e
ch=' '
while(ch=' ') and not eoln(x) do D a
read(x, ch); N e
( c h = ' ') a n d n o t e o l n ( x )
if not eoln(x) then write(y, ch) D a
end x, ch
end;
readln(x); N e
writeln(y) e o ln (x )
end; D a y, ch
close(x);
close(y); x , ln
writeln('Datoteka je iskopirana');
end. y , ln
K raj
54
Napisati program za unos podataka o automobilima. Na početku definisati broj
automobila n i podatke o vrsti, godini proizvodnje, ceni i registarskom broju smestititi u
datoteku auto.txt.
program UnosAuta; P o č e ta k
uses wincrt;
type f ,'a u t o . t x t'
auto = record
n
vrsta :string[18];
godproiz :integer; i= 1 , n
cena :integer;
registar :string[10]; a [ i] .v rs ta ,a [ i] .g o d p r o iz ,
end; a [ i].c e n a ,a [ i].re g is ta r
type
niz=array[1..20] of auto; f ,a [ i].v r s ta , f ,a [ i] .g o d p r o iz ,
var f ,a [ i] .c e n a , f ,a [ i] .r e g is ta r
a:niz;
f :text;
n,i:integer;
K raj
begin
assign(f, 'auto.txt');
rewrite(f);
writeln('Uneti broj automobila: ');
readln(n);
for i:=1 to n do
begin
write('Uneti vrstu automobila: '); readln(a[i].vrsta);
write('Godina proizvodnje: '); readln(a[i].godproiz);
write('Cena automobila: '); readln(a[i].cena);
write('Registarski broj: '); readln(a[i].registar);
{ Smestanje informacija u fajl }
writeln(f, a[i].vrsta);
writeln(f, a[i].godproiz);
writeln(f, a[i].cena);
writeln(f, a[i].registar);
end;
close(f)
end.
program DodavanjeAuta;
uses wincrt;
type
auto = record
vrsta :string[18];
godproiz :integer;
55
cena :integer;
registar :string[10]; P o č e ta k
end;
type f , 'a u t o . t x t '
niz=array[1..20] of auto; n
var
a:niz; ap p en d (f)
f :text;
n,i:integer; i= 1 , n
ime:string;
begin a [ i] .v r s ta ,a [ i] .g o d p r o iz ,
a [ i].c e n a ,a [ i].re g is ta r
writeln('Koliko automobila dodajete u datoteku');
readln(n);
writeln('Uneti podatke'); f ,a [ i] .v r s ta , f ,a [ i] .g o d p r o iz ,
writeln; f ,a [ i] .c e n a , f ,a [ i] .r e g is ta r
assign(f, 'auto.txt');
append(f);
for i:=1 to n do K raj
begin
write('Uneti vrstu automobila: '); readln(a[i].vrsta); writeln(f,a[i].vrsta);
write('Uneti godinu proizvodnje: '); readln(a[i].godproiz); writeln(f,a[i].godproiz);
write('Uneti cenu: '); readln(a[i].cena); writeln(f,a[i].cena);
write('Uneti registarski broj: '); readln(a[i].registar); writeln(f,a[i].registar);
writeln;
end;
close(f);
end.
program Automobil;
uses wincrt;
type
auto = record
vrsta :string[18];
godproiz :integer;
cena :integer;
registar :string[10];
end;
type
niz=array[1..20] of auto;
var
a:niz;
f :text;
n,i,godina,zbir:integer;
56
ime:string;
begin
writeln('Uneti vrstu automobila ciju ukupnu vrednost trazite');
readln(ime);
writeln('Uneti godinu proizvodnje od koje ce se ispistati vrsta i cena automobila');
readln(godina);
assign(f, 'auto.txt'); P o č e ta k
reset(f);
zbir:=0; f ,'a u t o . t x t '
n:=1;
writeln; im e , g o d in a
writeln('Automobli proizvodeni
posle ',godina,' su: '); z b ir= 0 , n = 1
while not eof(f) do D a
e o f(f)
begin N e
readln(f,a[n].vrsta);
readln(f,a[n].godproiz); a [ n ] .v r s ta ,a [ n ] .g o d p ro iz ,
readln(f,a[n].cena); a [ n ] .c e n a ,a [ n ] .r e g i s t a r
readln(f,a[n].registar); D a
if a[n].vrsta=ime then a [ n ] .v r s ta = im e
zbir:=zbir+a[n].cena; N e z b ir= z b ir+ a [n ].c e n a
if a[n].godproiz>godina then
writeln(a[n].vrsta, ': D a
a [ n ] .g o d p r o iz > g o d in a
',a[n].godproiz, ' god. ', a[n].cena,' N e
din'); a [ n ] .v r s ta ,
n:=n+1; a [ n ] . g o d p ro iz , a [n ].c e n a
end;
writeln; n=n+1
writeln('Ukupna vrednost svih
automobila tipa ',ime, ' je ',zbir);
K raj
close(f)
end.
program SortiranjeAutomobila;
uses wincrt;
type
auto = record
vrsta :string[18];
godproiz :integer;
cena :integer;
registar :string[10];
end;
type
niz=array[1..20] of auto;
57
var
a:niz;
f:text;
n,i,j,pomc, pomg:integer;
pomv,pomr:string;
begin
assign(f, 'auto.txt');
reset(f); P o č e ta k
n:=1;
while not eof(f) do f ,'a u t o . t x t '
begin n=1
readln(f,a[n].vrsta);
readln(f,a[n].godproiz); D a
e o f(f)
readln(f,a[n].cena); N e
readln(f,a[n].registar);
a [ n ] .v r s ta ,a [ n ] .g o d p r o iz ,
n:=n+1;
a [ n ] .c e n a ,a [ n ] .r e g is ta r
end;
for i:=1 to n-1 do n=n+1
for j:=i+1 to n do
begin
if (a[i].cena)>(a[j].cena) then i= 1 , n -1
begin j= i+ 1 , n
pomc:=a[i].cena;
a [ i].c e n a > a [ j] .c e n a N e
a[i].cena:=a[j].cena;
a[j].cena:=pomc; D a
pomv:=a[i].vrsta; p o m c = a [i] .c e n a
a[i].vrsta:=a[j].vrsta; a [ i].c e n a = a [ j] .c e n a
a[j].vrsta:=pomv; a [ j].c e n a = p o m c
pomg:=a[i].godproiz; p o m v = a [ i] .v r s ta
a[i].godproiz:=a[j].godproiz; a [ i].v r s ta = a [ j] .v r s ta
a[j].godproiz:=pomg; a [j].v rs ta = p o m v
pomr:=a[i].registar; p o m g = a [ i] .g o d p r o iz
a[i].registar:=a[j].registar; a [ i] .g o d p r o iz = a [ j] .g o d p r o iz
a[j].registar:=pomr; a [j].g o d p r o iz = p o m g
end;
end; p o m r = a [ i].r e g is ta r
writeln(n); a [ i] .r e g is ta r = a [ j] .r e g is ta r
a [j].re g is ta r = p o m r
for i:=1 to n do
begin
writeln; i= 1 , n
write(a[i].vrsta,' ');
write(a[i].godproiz,' '); a [ i] .v r s ta , a [ i] .g o d p r o iz ,
write(a[i].cena,' '); a [ i] .c e n a , a [i] .r e g is ta r
write(a[i].registar,' ');
end;
close(f) K raj
end.
58