programski jezik pascal - etf...

58
Programski jezik Pascal 1

Upload: others

Post on 29-Oct-2019

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

Programski jezik Pascal

1

Page 2: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA

Primer 24. (Zbirka) Napisati program na programskom jezikuPASKAL kojim se vrsi prevododjenje kolicine tecnosti iz galona u litre,ako je 1 galon = 4.54 litra. program IzGalonaULitre;uses WinCrt;var g, l : real;begin write('Unesite kolicinu tecnosti u galonima: '); readln(g); l := g*4.54; writeln('Odgovarajuca kolicina u litrima je: ', l:8:2 );end.

Primer 25. (Zbirka) Napisati program na programskom jeziku PASKAL kojim se vrsipreracunavanje americkih dolara u Euro, ako su poznate dinarske vrednosti ovih valuta.program Konverzija;uses WinCrt;var D, KursDolara, KursEura : real;begin write('Koliko dolara treba konvertovati u Eure: '); readln(D); write('Uneti kurs dolara izrazen u dinarima: '); readln(KursDolara); write('Uneti kurs Eura izrazen u dinarima: '); readln(KursEura); writeln(D:10:2, ' $ =', D*KursDolara/KursEura:8:2, ' Eura');end.

Primer 26. (Zbirka) Sa punim automobilskim rezervoarom kapaciteta V litara predjen jeput od S kilometara. Napisati program kojim se racuna potrosnja automobila u litrimana 100 km. program PotrosnjaGoriva;uses WinCrt;var V, S, potrosnja : real;begin write('Unesite kapacitet rezervoara: '); readln(V); write('Unesite predjeni put: '); readln(S); potrosnja:=V*100/S; writeln('Potrosnja na 100 km je: ', potrosnja:6:2, ' l');end.

2

P o č e t a k

K r a j

g

l = g * 4 . 5 4

l

P o č e t a k

K r a j

D , K u r s E u r a ,K u r s D o l a r a ,

D *K u r s E u r aK u r s D o l a r a /

P o č e t a k

K r a j

V , S

p o t r o s n j a = V * 1 0 0 / S

p o t r o s n j a

Page 3: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

Primer 27. (Zbirka) Napisati program na programskom jeziku PASKAL kojim seizracunava hipotenuza pravouglog trougla na osnovu zadatih kateta. program Hipotenuza;uses WinCrt;var a, b, c : real;begin write('Unesite duzinu kateta: '); readln(a, b); c:=sqrt(sqr(a)+sqr(b)); writeln('Duzina hipotenuze je: ', c:6:2);end.

Primer 3.9. (knjiga) Napisati program koji resava sledeci matematicki izraz: 222 yx program razlomak1;uses WinCrt;var x, y, resenje : real;begin write('Unesite vrednosti promenljivih x i y: '); readln(x, y); resenje := sqr((sqr(x)+sqr(y))); writeln('Resenje razlomka je: ', resenje:6:2);end.

Primer 8. (Zbirka) Napisati program koji izgacunava izraz: a

acbb

2

42

program razlomak1;uses WinCrt;var a, b, c, resenje : real;begin write('Unesite vrednosti parametara a, b i c: '); readln(a, b, c); resenje := (-b-sqrt(sqr(b)-4*a*c))/ (2*a); writeln('Resenje zadatog razlomka je: ', resenje:8:2 );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 t a k

K r a j

x , y

r e z u l t a t = ( a + b )

r e z u l t a t

2 2 2

P o č e t a k

K r a j

a , b , c

r e s e n j e = ( a + b )

r e s e n j e

2 2 2

P o č e t a k

K r a j

a , b , c

r e s e n j e = - b - b - 4 a c 2 a

r e s e n j e

2

Page 4: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

begin write('Unesite temperaturu u stepenima Celzijusa: '); readln(tempC); tempF := tempC*1.8+32; writeln('Temperatura po Farenhajtu je: ', tempF:8:2 );end.

Primer 3.9. (knjiga) Za ucenike koji su zaposleni prekoomladinske zadruge izracunati bruto i neto dohodak, ako jepoznat broj radnih sati, cena po satu i procenat odbijanja na osnovu odredjenog doprinosa.Izmedju poznatih i nepoznatih velicina postoje sledeci odnosi: bruto = sati*cena neto = bruto-bruto*procenat/100 program dohodak;uses WinCrt;var sati, cena, procenat, bruto : integer; neto : real;begin write('Unesite broj radnih sati: '); readln(sati); write('Unesite cenu po satu: '); readln(cena); write('Unesite procenat za odbijanje: '); readln(procenat); bruto := sati*cena; neto := bruto - bruto*(procenat/100); writeln('Bruto dohodak je: ', bruto ); writeln('Neto dohodak je: ', neto:8:2 );end.

USLOVNI IZRAZI

Jednostavni uslovni izraz: IF-THEN

IF-THEN izraz ima opšti oblik:IF uslov THENizraz;

IF Age < 18 THENWRITELN('Ovo je maloletnik.');

IF-THEN-ELSE izraz

Opsti oblik ovog izraza je:

4

P o č e t a k

K r a j

t e m p C

t e m p F = t e m p C * 1 , 8 + 3 2

t e m p F

P o č e t a k

K r a j

s a t i , c e n a , p r o c e n a t

b r u t o = s a t i * c e n an e t o = b r u t o - b r u t o * p r o c e n a t / 1 0 0

b r u t o , n e t o

Page 5: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

IF uslov THENizraz1ELSEizraz2;

ELSE-IF Ukoliko postoji višestruko granjanje pored koristi se sledeđi izraz:IF uslov1 THENizraz1ELSE IF uslov2 THENizraz2ELSE IF uslov3 THENizraz3...ELSEizraz n;

Primer 3.13 (Zbirka) Napisati program na programskom jeziku PASCAL kojim sepromenljivoj max dodeljuje vrednost veceg izmedju brojeva a i b.program Max2;uses WinCrt;var a, b, max : integer; begin write('Unesite dva cela broja: '); readln(a, b); if a>b then max:=a else max:=b; writeln('Veci broj je: ', max);end.

Primer 3.16 (Zbirka) Napisati program na programskom jezikuPASCAL kojim se promenljivoj max dodeljuje najveca vrednostod tri zadata cela broja.program Max3;uses WinCrt;var a, b, c, max : integer; begin write('Unesite tri cela broja: '); readln(a, b, c); max:=a; if max<b then max:=b; if max<c then max:=c; writeln('Najveci broj je: ', max);end.

5

P o č e t a k

K r a j

a , b

m a x

a > b

m a x = am a x = b

D a

N e

P o č e t a k

K r a j

a , b , c

m a x

m a x < b

m a x < c

m a x = c

m a x = c

m a x = aD a

D a

N e

N e

Page 6: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

Primer 3.14 (Zbirka) Napisati naredbu uslovnog prelaska kojom se za zadate realnebrojeve x i y izracunava z po formuli

0),,max(

0),,min(22 yyx

yyxz

program ZpoFormuli;uses WinCrt;var x, y, z : real; begin write('Unesite vrednosti za x i y: '); readln(x, y); if y<0 then if sqr(x)<sqr(y) then z:=sqr(y) else z:=sqr(x) else if x<y then z:=x else z:=y; writeln('Vrednost z je: ', z:8:2);end.

Primer 3.15 (Zbirka) Napisati program kojom se za zadate realne brojeve x i yizracunava z po formuli:

),(max1

5.0),min(2 yx

yxz

program ZpoFormuli;uses WinCrt;var x, y, z : real; begin write('Unesite vrednosti za x i y: '); readln(x, y); if x<y then z:=(x+0.5)/(1+sqr(y)) else z:=(y+0.5)/(1+sqr(x)); writeln('Vrednost z je: ', z:8:2);end.

Primer 3.15 (Zbirka) Napisati program kojom se resava jednacina: ax+b=0program LinearnaJednacina;uses WinCrt;var a, b : real; begin

6

P o č e t a k

K r a j

x , y

z

y < 0x < y

x < yz = y

z = yz = xz = x

D a

D a

D aN e

N e

N e

2 2

22

P o č e t a k

K r a j

x , y

z

x < y

z = ( x + 0 , 5 ) / ( 1 + y )z = ( x + 0 , 5 ) / ( 1 + x )

D a

N e22

Page 7: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

write('Unesite koeficijente a i b: '); readln(a, b); if a<>0 then writeln('x= ', -b/a:10:3) else if b<>0 then writeln('Jednacina nema resenja') else writeln('Jednacina ima beskonacno resenja');end.

Primer 3.23 (Zbirka) Napisati program kojim se ispitujeda li se seku prave y=a1*x+b1 i y=a2*x+b2. Ako se sekuodrediti koordinate preseka.program PresekPravih;uses WinCrt;var a1, b1, a2, b2, x, y : real;begin write('Unesite koeficijente a1 i b1: '); readln(a1, b1); write('Unesite koeficijente a2 i b2: '); readln(a2, b2); if a1=a2 then if b1=b2 then writeln('Prave su podudarne') else writeln('Prave su paralelne') else begin x:=(b2-b1)/(a1-a2); y:=a1*x+b1; writeln('Koordinate preseka pravih su: x=', x:5:2, ', y=', y:5:2) endend.

CASE-ELSE izrazOpsti oblik CASE izraza je:CASE izraz OFlabel-1 : izraz-1;label-2 : izraz-2;...label-n : izraz-n;ELSEizrazEND

7

P o č e t a k

K r a j

D a

D a

a , b

a = 0

b = 0

x = - b / a

J e d n a c i n a n e m ar e s e n j e

J e d n a c i n a i m ab e s k o n a c n o r e s e n j a

N e

N e

P o č e t a k

K r a j

D aa 1 , b 1 , a 2 , b 2

a 1 = a 2N e D ab 1 = b 2

P r a v e s u p o d u d a r n e

P r a v e s up a r a l e l n e

N ex = ( b 2 - b 1 ) / ( a 1 - a 2 )y = a 1 * x + b 1

x , y

Page 8: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

Primer 3.26 (Zbirka) Napisati program kojim se na osnovuunetih brojnih ocena 5, 4, 3, 2, 1 ispisuju opisne ocene'odlican', 'vrlo dobar', 'dobar', dovoljan' i 'nedovoljan.program Ocene;uses WinCrt;var ocena : integer;begin write('Unesite ocenu: '); readln(ocena); case ocena of 5 : writeln('odlican'); 4 : writeln('vrlo dobar'); 3 : writeln('dobar'); 2 : writeln('dovoljan'); 1 : writeln('nedovoljan'); endend.

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 dali je godina prestupna.program DaniUMesecu;uses WinCrt;var mesec : integer; prestupna : char; begin write('Unesite broj meseca od 1 do 12: '); readln(mesec); if (mesec<1) or (mesec>12) then writeln('Broj meseca je nekorektan') else case mesec of 1,3,5,7,8,10,12 : writeln('Mesec ima 31dan'); 4,6,9,11 : writeln('Mesec ima 30 dana'); 2 : begin write('Da li je godina prestupna (D/N)?'); readln(prestupna); if (prestupna='D') or (prestupna='d') then writeln('Mesec ima 29 dana') else writeln('Mesec ima 28 dana'); end endend.

Primer 3.33 (Zbirka) Napisati program kojim se ucitava znak za operaciju (+,-,*,/) i dvarealna operanda, a zatim stampa rezultat.

8

P o č e t a k

K r a j

o c e n a

' o d l i c a n '

5 4 3 2 1o c e n a

' v r l o d o b a r '

' d o b a r '

' d o v o l j a n '

' n e d o v o l j a n '

P o č e t a k

K r a j

p r e s t u p n a

m e s e cD a

' M e s e c i m a3 1 d a n '

' B r o j m e s e c aj e n e k o r e k t a n '

1 , 3 , 5 , 7 , 8 , 1 0 , 1 2 4 , 6 , 9 , 1 1 2

p r e s t u p n a

m e s e c < 0 | | m e s e c > 1 2

' M e s e c i m a3 0 d a n a '

' M e s e c i m a2 9 d a n a '

' M e s e c i m a2 8 d a n a '

' D a l i j e g o d i n a p r e s t u p n a D / N '

D

N

Page 9: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

program MiniKalkulator;uses WinCrt;var x, y, rezultat : real; operacija : char; def : boolean;begin write('Unesite vrednost za x: '); readln(x); write('Unesite operaciju: '); readln(operacija); write('Unesite vrednost za y: '); readln(y); def:=true; case operacija of '+' : rezultat:=x+y; '-' : rezultat:=x-y; '*' : rezultat:=x*y; '/' : if y=0 then begin def:=false; write('Rezultat jenedefinisan') end else rezultat:=x/y end; if def then writeln('Rezultat je ',rezultat:10:3)end.

PETLJE (CIKLUSI)

FOR petlja

FOR petlja se koristi kada izraz ili brok izraza treba ponoviti određeni broj puta. U okvirupetlje 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 koristidekrementiranje, jer se petlja nikad nece izvrsiti. Za dekrementiranje se umesto To koristiDOWNTO:FOR kontrolna promenljiva := izraz-1 DOWNTO izraz-2 DOizraz;

9

P o č e t a k

K r a j

x , o p e r a c i j a , y

D a

D a

N e

N e

d e f = t r u e

d e f = f a l s e

r e z u l t a t = x + y

r e z u l t a t = x / y

r e z u l t a t = x * y

r e z u l t a t = x - y

' R e z u l t a t j en e d e f i n i s a n '

+ - * /

o p e r a c i j a

y = 0

d e f = t r u e

r e z u l t a t

Page 10: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

U ovoj petlji brojač počinje od veće vrednosti i umanjuje se sve dok ne dostigne kranjuvrednost.

Primer 4.6. (Zbirka) Napisati program za ucitavanje, sumiranje i stampanje brojeva od1 do 100.program Suma100;uses WinCrt;var s : integer; i : integer;begin s:=0; for i:=1 to 100 do s:=s+i;writeln('Suma je: ', s);end.

Primer 4.9. (Zbirka) Napisati program kojim se za zadato n izracunava faktorijal brojan (faktorijal=n!=1*2*3*...n).program Suma100;uses WinCrt;var fakt : integer; i, n : integer;begin write('Upisati broj n: '); readln(n); fakt:=1; for i:=1 to n do fakt:=fakt*i;writeln('Faktorijal zadatog broja je: ', fakt);end.

Primer 4.14. (Zbirka) Napisati program kojim se za dati ceo broj n i realan broj x,izracunava izraz: )(sin)sin( 2 xxS +...+ )(sin xn

program SumaSinus;uses WinCrt;var i, n : integer; s, p, x : real;begin write('Upisati broj n: '); readln(n); write('Upisati broj x: '); readln(x);

10

P o č e t a k

K r a j

s = 0

s

i = 0 , 1 0 0

s = s + i

P o č e t a k

K r a j

n

f a k t = 1

f a k t

i = 1 , n

f a k t = f a k t * i

P o č e t a k

K r a j

n , x

s = 0 p = 1

s

i = 1 , n

p = p * s i n ( x )s = s + p

Page 11: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

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.

Primer 4.22. (Zbirka) Napisati program za izracunavanje istampanje vrednosti realne funkcije:

1

222

2

x

xxy

ako se x menja od xp do xk sa korakom h.program razlomak;uses WinCrt;var i, n : integer; xp, xk, h, x, y : real; begin write('Upisati vrednosti za xp, xk i korak h: '); 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 DOizraz;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

P o č e t a k

K r a j

x p , x k , h

n = t r u n c ( ( x k - x p ) / h ) + 1 x = x p

x , y

i = 1 , n

x = x + h

y = ( x * x - 2 . 0 * x + 2 . 0 ) / ( s q r ( x ) + 1 . 0 )

Page 12: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

i, s : integer;begin s:=0; i:=1; while i<99 do begin s:=s+i; i:=i+2; end; writeln('Suma neparnih brojeva je: ', s);end.

Primer 5.21. (Zbirka) Napisati program za izracunavanje n-tog stepenacelog broja aprogram NtiStepen;uses WinCrt;var a, n, i, stepen : integer;begin write('Unesite brojeve a i n: '); readln(a, n); stepen:=1; i:=1; while i<=n do begin stepen:=stepen*a; i:=i+1 end; writeln('Stepen broja ', a, ' je ', stepen);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

P o č e t a k

K r a j

s = 0 i = 1

s

i 9 9<

s = s + ii = i + 2

P o č e t a k

K r a j

n , a

s t e p e n = 1 i = 1

s t e p e n

i = n<

s t e p e n = s t e p e n * ai = i + 1

Page 13: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

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.

Primer 5.33 (Zbirka) Napisati program kojim se ustandardnoj ulaznoj (input) tekstualnoj datoteciodredjuje broj praznina, tacaka i interpukcijskihznakova tipa: zapeta, dvotacka, tacka-zapeta, ako se udatoteci nalaze samo nabrojani znaci. program Znakovi;uses WinCrt; var znak : char; praznina, tacka, znakInt : integer;begin praznina := 0; tacka := 0; znakInt := 0; while not eof do begin while not eoln do begin 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

P o č e t a k

K r a j

z n a k

p r a z n i n a = 0t a c k a = 0z n a k I n t = 0

p r a z n i n a = p r a z n i n a + 1

t a c k a = t a c k a + 1

z n a k I n t = z n a k I n t + 1

e o f

e o l n

z n a k

D a

D a

N e

N e

p r a z n i n a , t a c k a , z n a k I n t

' ' ' . ' ' : ' , ' ; ' , ' , '

Page 14: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

REPEAT petljaOva petlja se koristi za izvrsavanje veceg broja izraza sve dok se ne postigne određeni uslov.Opsti oblik ove petlje:REPEATizraz-1;izraz-2;...izraz-n;UNTIL uslov;

Primer 6.14 (Zbirka) Napisati program kojim se odredjuje broj jedinica u binarnomzapisu prirodnog broja n.

program BrojJedinica;uses WinCrt; var n,s : integer;begin write('Unesite broj n: '); readln(n); s:=0; repeat s:=s+n mod 2; {n mod 2 izdvaja cifru 0 ili 1} n:=n div 2 until (n=0); writeln('U binarnom zapisu broja ima: ',s,' jedinica');end.

14

P o č e t a k

K r a j

n

sD a

N e

s = 0

n = 0

s = s + n m o d 2n = n d i v 2

Page 15: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

FUNKCIJE

Funkcije predstavljaju podprograme koji vraćaju jednu vrednost. Funkcije su deo nekog izrazakoji se koristi u glavnom programu. Označavaju se sa rezervisanom reči FUNCTION iza kojesledi ime funkcije i formalni parametri. Razlikuje se od procedure jer se mora odrediti tipfunkcije, odnosno tip rezultata. Ukoliko funkcija ne vraca vrednost kao tip rezultata navodi sevoid. Sintaksa funkcije ima sledeci oblik:

FUNCTION Ime_funkcije(VAR formalni_parametri : tip; parametri : tip):tip_funkcije;

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.program FunkcijaMax2;uses WinCrt; function max2(broj1, broj2 : integer) : integer;begin if broj1 > broj2 then max2 := broj1 else max2 := broj2end;var a, b, rezultat : integer;begin writeln('Unesite dva cela broja: '); readln(a,b); rezultat := max2(a,b); writeln('Veci broj je: ', rezultat);end.

Primer 7.7 (Zbirka) Pretpostavljajuci da funkcije abs i odd nisu standardne, sastaviti njihov zapis.

function abs(a:real):real;begin if a>=0 then abs:=a else abs:=-aend;

function odd(a:integer):boolean;begin odd:=a mod 2=1end;

15

m a x 2 ( b r o j 1 , b r o j 2 )

K r a j

N e

D a

m a x 2 = b r o j 1m a x 2 = b r o j 1

b r o j 1 b r o j 2>

P o č e t a k

K r a j

a , b

r e z u l t a t = m a x 2 ( a , b )

r e z u l t a t

a b s ( a )

K r a j

N e

D a

a b s = aa b s = - a

a 0>

Page 16: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

Primer 7.10 (Zbirka) Napisati funkciju za izracunavanje n-tog stepenacelog broja a.function stepen(a, n : integer) : integer;var an, i : integer;begin an :=1; for i:=1 to n do an:=an*a; stepen :=anend;

Primer Funkcija (Knjiga) suma kvadrata. Napisati funkciju kojom seizracunava suma kvadrata celih brojeva od m do n.function sumakv(m, n : integer): integer; var s, i : integer;begin s:=0; for i:=m to n do s:=s+sqr(i); sumakv:=send;

Primer Funkcija (Knjiga) suma kubova. Napisati funkciju kojom seizracunava suma kubova celih brojeva od m do n.function sumakub(m, n : integer): integer; var s, i : integer;begin s:=0; for i:=m to n do s:=s+i*i*i; sumakub:=send;

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 izlazmoraju biti deklarisani kao promenljivi parametri. Oni moraju imati rezervisanu reč VAR u svojojdeklaraciji. S druge strane neki parametri služe samo kao ulazni; oni predaju vrednostiproceduri i obično su deklarisani kao parametri vrednosti. Ako parametar služi za oboje, ulaz iizlaz, onda mora biti deklarisan kao promenljivi parametar.

procedure ime_procedure(var formalni_parametri : tip);

16

s t e p e n ( n , a )

K r a j

a n = 1

i = 1 , n

a n = a n * a

s t e p e n = a n

s u m a k v ( m , n )

K r a j

s = 0

i = m , n

s = s + i * i

s u m a k v = s

s u m a k u b ( m , n )

K r a j

s = 0

i = m , n

s = s + i * i * i

s u m a k u b = s

Page 17: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

begin... naredbeend;

Formalni parametri se nazivaju još i varednosni parametri. Procedura se poziva na sledećinačin:procedure ime;iliprocedure ime(lista parametara);

Primer Procedure (Knjiga) Napisati program koji koristi proceduru kvkub cije su ulaznevrednosti dva cela broja m i n, a izlazne vrednosti su celi brojevi p i q. Rezultat p trebada 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 pisemojednu proceduru koja izracunava ove dve vrednosti.program PrimerProcedura;{Ilustruje koriscenje procedure}uses WinCrt;var broj1, broj2, m, n, k, p, q : integer; procedure kvkub(m, n:integer; var kv, kub : integer); {Izracunava sumu kvadrata i sumu kubova brojeva od m do n} var i : integer; begin kv:=0; kub:=0; for i:=m to n do begin kv:=kv+i*i; kub:=kub+i*i*i; end end;begin write('Upisati vrednosti za broj1 i broj2 (broj1<broj2): '); readln(broj1, broj2); kvkub(broj1, broj2, p, q); writeln(p:6, q:6);end.

Primer 6.6 (Knjiga) Napisati proceduru kojom se izracunava minimum i maksimum naosnovu dva zadata cela broja.procedure minmax(aa, bb:integer; var min, max : integer); begin if aa>bb then begin

17

k v k u b ( m , n , k v , k u b )

K r a j

k v = 0 k u b = 0

i = m , n

k v = k v + i * ik u b = k u b + i * i * i

k v k u b ( b 1 , b 2 , p , q )

P o č e t a k

K r a j

b 1 , b 2

p , q

Page 18: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

min:=bb; max:=aa; end else begin min:=aa; max:=bb; endend;

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.

Resenje programa se sastoji u tome da se prvo porede x iy, zatim x i z, i na kraju y i z. Ako su dva brojarasporedjena na zeljeni nacin ide se na sledeceporedjenje, a ukoliko nisu procedurom razmeni menjajumesta.program Poredak;{Ilustruje koriscenje procedure}uses WinCrt; var x, y, z : integer; procedure razmeni(var a, b : integer); {Izracunava sumu kvadrata i sumu kubova brojeva od mdo n} var tmp : integer; begin tmp:=a; a:=b; b:=tmp end; begin write('Upisati vrednosti za x, y i z: '); readln(x, y, z); if x>y then razmeni(x, y); if x>z then razmeni(x, z); if y>z then razmeni(y, z); writeln('Raspored brojeva u neopadajucem (rastucem) poredku je: ', x:6, y:6, z:6);end.

REKURZIJA

Funkcije ili procedure se mogu pozivati unutar funkcije ili procedure i to svojstvo se naziva rekurzija.

18

m i n m a x ( a a , b b , m i n , m a x )

K r a j

N e

D a

m i n = b bm a x = a a

m i n = a am a x = b b

a a b b>

r a z m e n i ( a , b )

K r a j

t m p = aa = b

b = t m p

r a z m e n i ( x , y )

r a z m e n i ( x , z )

r a z m e n i ( y , z )

P o č e t a k

K r a j

x , y , z

N e

N e

N e

D a

D a

D a

x , y , z

x > y

x > z

y z>

Page 19: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

Primer Rekurzivna funkcija (Knjiga). Napisati rekurzivnu funkciju za izracunavanje faktorijala broja n.

fakt(n) = 1 za n=1,fakt (n) = n*fakt(n-1)

function fakt(n : integer): integer;begin if n=1 then fakt:=1 else fakt:=n*fakt(n-1)end;

{Primer 6.12 (Knjiga) Banka na pocetku svake godine ulagacima obracunava kamatu odp procenata na novcanu sumu koja je orocena u toku prethodne godine. Napisatiprogram kojim se izracunava novcani iznos kojim ceraspolagati ulagac posle n godina,ako je pocetno ulaganje S.

Problem se moze resiti rekurzivno:Ako je an novcani iznos akumuliran nakon n godina, tada je:

a0=s - pocetno ulaganjea1=s+s*p/100 - iznos posle prve godinea2=a1+a1*p/100 - iznos posle druge godine

Vidi se da je akumulirani iznos nakon i-te godine:

ai=a(i-1)+a(i-1)*p/100

ili ai=(1+p/100)*a(i-1)

pa se konacno dobija rekurzivna formula:

a0=Sai=(1+p/100)*a(i-1)

Ova formula se lako transformise u funkciju:

function iznos(n:integer):real;begin if n=0 then iznos:=s else iznos:=(1+p/100)*iznos(n-1)end;

program Banka;

19

f a k t ( n )

K r a j

N e

D a

f a k t = 1f a k t = n * f a k t ( n - 1 )

n = 1

i z n o s ( n )

K r a j

N e

D a

i z n o s = si z n o s : = ( 1 + p / 1 0 0 ) * i z n o s ( n - 1 )

n = 0

Page 20: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

uses WinCrt;var n, p, s : integer; function iznos(n:integer):real;begin if n=0 then iznos:=s else iznos:=(1+p/100)*iznos(n-1)end;begin write('Unesite pocetni iznos novca, kamatu i broj godina: '); 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 cijaduzina nije poznata, a obelezje kraja niza je *. Napisati program koji obezbedjuje ispisniza u inverznom poretku.Na primer, ako su ulazni podaci:

abcde*racunar na izlazu treba da ispise:

*edcbaprogram inverzno(input,output); uses WinCrt;procedure inverz;var x:char;begin read(x); if x<>'*' then inverz; write(x)end;

begin write('Upisati niz karaktera koji se zavrsavaju znakom *: '); inverzend.

RESAVANJE PROBLEMA METODOM ODOZGO NADOLE

Korisnik unosi brojcane vrednosti dana, meseca i godine. Napisati program koji ispisujedan u mesecu (brojcano), naziv datog meseca godinu i broj zadatog dana u godini. Naprimer ako je zadato “15 3 1988”, ispisuje se ”15 mart 1988 dan 75”.

program kalendar(input,output);uses WinCrt;

20

P o č e t a k

K r a j

s , p , n

n , i z n o s ( n )

i n v e r z

i n v e r z

K r a j

x

x

D a

N ex = ' * '

P o č e t a k

i n v e r z

K r a j

Page 21: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

{*program numericku prezentaciju dana, meseca i godineprevodi u dan, naziv meseca, godinu i dan u godini*}vardan,mesec,godina,danaugodini,i:integer;prestupna :boolean;

procedure testprest(godina:integer;var prestupna:boolean);{*procedura promenljivoj prestupna dodeljuje true ako jegodina prestupna u protivnom false*}beginprestupna:=(godina mod 100<>0) and (godina mod 4 = 0) or(godina mod 400=0)end;

{****g1avni program****}begin

{*Modul 1: unos dana, meseca i godine*}readln(dan,mesec,godina);

{*Modu1 2: ispis dana i meseca*}write(dan);

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

Page 22: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

12 : write(' decembar')end;

{*Modul 3:Izracunavanje broja dana u godini*}danaugodini:=dan;

for i:=1 to mesec-1 docase i of

1,3,5,7,8,10: danaugodini:=danaugodini+31;

2 : danaugodini:=danaugodini+28;

4,6,9,11: danaugodini:=danaugodini+30end;

{*Provera da li je godina prestupna*}testprest(godina,prestupna);

if prestupna and (mesec>2)

then danaugodini:=danaugodini+1;

{*Modul 4:ispis godine i dana u godini*}writeln(godina:5,' dan ',danaugodini)end.

22

Page 23: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

RAD SA MODULIMA TURBO PASCAL-aKreirati unit pod imenom bibl1 sa funkcijama tangens zbir i faktorijal.Da bi se mogao koristiti unit snimiti pod imenom bibl1.pas iobavezno kompajlirati (prevesti na masinski jezik). Zatim uprogramu koji koristi funkcije iz ovog unita prikljuciti bibl1 u usesdelu.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 iprocedura) 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 sveostale funkcije iz unit-a bibl1.TPU )koji sam ja napravio)

program TangensBroja;

23

Page 24: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

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);

writeln('Unesite dva realna broja: '); readln(a, b); rezultat := zbir(a, b); writeln('Zbir zadatih brojeva je: ', rezultat:8:2);

writeln('Unesite ceo broj ciji se faktorijal racuna: '); readln(n); rez := faktorijal(n); writeln('Faktorijal zadatog broja je: ', rez);

{Izracunava vrednost izraza c=n!/(m!(n-m)!)} writeln('Unesite dva cela broj ciji se faktorijal racuna: n>m'); readln(n, m); rezultat := faktorijal(n) div (faktorijal(m) div faktorijal(n-m); writeln('Resenje zadatog izraza je: ', rezultat:6:2);

end.

24

Page 25: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

NESTANDARDNI TIPOVI PODATAKA

Osim standardnih tipova podataka u Pascal-u postoje i nestandardni prosti tipovipodataka. To su nabrojivi i intervalni tipovi koje definise korisnik. Primena ovih tipovapoboljsava citljivost programa i njegovo lakse razumevanje.

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;

koja je tipa nabrojive promenljive.Vrednost promenljive dan moze biti bilo koja (ali samo jedna u jednom trenutku)

od nabrojanih vrednosti.

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 '); endend.

25

Page 26: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

NIZOVI

Nizovi su skupovi podataka istog tipa. Nizovi su indeksne promenljive. Svaki član nizazauzima određenu memorijsku lokaciju. Ovakvi nizovi se nazivaju jednodimenzionalni nizovipodataka. Korisni su za predstavljanje npr. imena ljudi, rezultata ispita ili nekih sličnihpodataka. 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 koristeza složenije strukture. Dvodimenzionalni nizovi se sastoje od redova (vrsta) i kolona.Primer dvodimenzionalnog niza:AijA-ime matricei-indeks vrste matricej-indeks kolone matrice

Deklaracija nizova je sledeća:VARIme niza: ARRAY[veličina indeksa] OF tip podatka;

ili najčešće:

TYPEniz = ARRAY[1..6] OF INTEGER;VARmojniz :niz;

Primer 11.5 (Zbirka) Zadat je celobrojni niz x. Napisati program kojim se izracunavasrednja 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; var n, broj, i : integer; s : real; x : niz;

procedure ucitaj(n:integer; var a:niz);

26

u c i t a j ( n , a )

K r a j

a [ i ]

i = 1 , n

Page 27: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

{Procedura ucitava clanove niza}var i : integer;begin for i:=1 to n do read(a[i])end;

procedure ProsecnaVrednost(n:integer; a:niz; var s:real);{Procedura koja izracunava prosecnu vrednost clanova niza}var i : integer;begin s:=0; for i:=1 to n do s:=s+a[i]; s:=s/nend;

begin write('Unesite broj clanova niza: '); readln(n); writeln('Unesite clanove niza: '); ucitaj(n, x); ProsecnaVrednost(n,x,s); writeln('Prosecan vrednost clanova niza je: ', s:8:2);end.

Primer 11.6 (Zbirka) Zadat je celobrojni niz x. Napisati program kojim se izracunavamaksimalna 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 n, broj, i : integer; amax : real; x : niz;

procedure ucitaj(n:integer; var a:niz);{Procedura ucitava clanove niza}var

27

P r o s e c n a V r e d n o s t ( n , a , s )

K r a j

s = 0

s = s + a [ i ]

s = s / n

i = 1 , n

P o č e t a k

u c i t a j ( n , x )

P r o s e c n a V r e d n o s t ( n , x , s )

K r a j

n

s

u c i t a j ( n , a )

K r a j

a [ i ]

i = 1 , n

Page 28: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

i : integer;begin for i:=1 to n do read(a[i]) end;

procedure MaksimalnaVrednost(n:integer; a:niz; varamax:real);{Procedura koja izracunava prosecnu vrednostclanova niza}begin amax:=a[1]; for i:=1 to n do if a[i]>amax then amax:=a[i];end;

begin write('Unesite broj clanova niza: '); readln(n); writeln('Unesite clanove niza: ');{Unosi se jedan rezultat pa se sa Enter prelazi u sledecired, pa se unosi sledeci pa Enter itd} ucitaj(n, x); MaksimalnaVrednost(n,x,amax); writeln('Maksimalna vrednost u nizu je: ', amax:8:2);end.

Primer 11.9 (Zbirka) Zadat je celobrojni niz x. Napisati program kojim se izracunavasuma pozitivnih elemenata zadatog niza.

program SumaPozitivnih;uses WinCrt;{Maksimalni dozvoljeni broj elemenata-clanovaniza je 30}const k=30;{Deklarisemo novi tip podataka - niz od 100realnih brojeva} type niz=array[1..k] of real; var n, i : integer; rezultat : real; x : niz;

procedure ucitaj(n:integer; var a:niz);{Procedura ucitava clanove niza - u jednoj liniji}var

28

M a k s i m a l n a V r e d n o s t ( n , a , a m a x )

K r a j

N e

D a

a m a x = a [ 1 ]

a m a x = a [ i ]

i = 2 , n

a [ i ] > a m a x

P o č e t a k

u c i t a j ( n , x )

M a k s i m a l n a V r e d n o s t ( n , x , a m a x )

K r a j

n

a m a x

u c i t a j ( n , a )

K r a j

a [ i ]

i = 1 , n

P o č e t a k

u c i t a j ( n , x )

r e z u l t a t = S u m a P o z i t i v n i h C l a n o v a ( n , x )

K r a j

n

r e z u l t a t

Page 29: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

i : integer;begin for i:=1 to n do read(a[i])end;

function SumaPozitivnihClanova(n:integer; a:niz):real;{Funkcija koja izracunava zbir pozitivnih clanovaniza}var i:integer; s:real;begin s:=0; for i:=1 to n do if a[i]>0 then s:=s+a[i]; SumaPozitivnihClanova:=send;

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 takmicenjaiz programiranja imalo natprosecne rezultate.

Problem se moze razloziti na sledece module:

1. Ucitavanje vrednosti elemenata niza.Ovaj modul se realizuje procedurom ucitaj.2. Izracunavanje prosecnog rezultata:Realizuje se procedurom prosek.3. Prebrojavanje natprosecnog rezultata.Realizuje se u samom programu.4. Ispisivanje izvestaja (izlazni podaci)Realizuje se ispisom rezultata u samom programu.

program Natprosecni;uses WinCrt;

const k=100;type

29

S u m a P o z i t i v n i h C l a n o v a ( n a ),

K r a j

N e

D a

s = 0

s = s + a [ i ]

i = 1 , n

a [ i ] > 0

S u m a P o z i t i v n i h C l a n o v a = s

Page 30: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

niz=array[1..k] of real; var n, broj, i : integer; s : real; x : niz;

procedure ucitaj(n:integer; var a:niz);{Procedura ucitava rezultate takmicara - elemente niza}var i : integer;begin for i:=1 to n do readln(a[i])end;

procedure prosek(n:integer; a:niz; var s:real);{Procedura koja izracunava prosecan rezultat}var i : integer;begin s:=0; for i:=1 to n do s:=s+a[i]; s:=s/nend;

begin write('Unesite broj takmicara: '); readln(n); writeln('Unesite rezultate: '); {Unosi se jedan rezultat pa se sa Enter prelazi u sledeci red, pase unosi sledeci rezultat, pa Enter itd} ucitaj(n, x); prosek(n,x,s); broj:=0; {prebrojavanje prosecnih rezultata} for i:=1 to n do if x[i]>s then broj:=broj+1; writeln('Prosecan rezultat je: ', s); writeln('Natprosecne rezultate je imalo: ', broj, ' ucesnika')end.

SORTIRANJE

Primer 8.11 (Knjiga) Zadat je celobrojni niz a. Napisati program koji koristi procedurusort1 za sortiranje niza u monotono neopadajuci poredak.

30

u c i t a j ( n , a )

K r a j

a [ i ]

i = 1 , n

p r o s e k ( n , a , s )

K r a j

s = 0

s = s + a [ i ]

s = s / n

i = 1 , n

P o č e t a k

u c i t a j ( n , x )

p r o s e k ( n , x , s )

K r a j

n

N e

D a

b r o j = 0

b r o j = b r o j + 1

i = 1 , n

x [ i ] > s

b r o j

Page 31: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

Prvi algoritam sortiranja radi na sledeci nacin:Pri prvom prolasku kroz niz (i=1) razmenjuju se vrednosti clana a[1] sa clanovima ostatkaniza a[2], a[3], ... a[n] koji su manji od njega. Zatim (za i=2) istim postupkom komponentaa[2] dobija najmanju vrednost od ostatka niza. Procedura sort1 koristi proceduru razmenida 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;

procedure ucitaj(n:integer; var a:niz);{Procedura ucitava clanove niza}var i : integer;begin for i:=1 to n do read(a[i])end;

procedure razmeni(var a,b : real);var tmp : real;begin tmp:=a; a:=b; b:=tmpend;

procedure sort1(n:integer; var a:niz);{Procedura koja sortira clanove niza u neopadajucemporedku}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 pisi(n:integer; var a:niz);

31

u c i t a j ( n , a )

K r a j

a [ i ]

i = 1 , n

r a z m e n i ( a , b )

K r a j

t e m p = aa = bb = t e m p

r a z m e n i ( a [ i ] , a [ j ] )

s o r t 1 ( n a ),

K r a j

N e

D a

i = 1 , n - 1

j = i + 1 , n

a [ i ] > a [ j ]

Page 32: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

{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 endend;

begin write('Unesite broj elemenata niza: '); readln(n); writeln('Unesite elemente niza: '); ucitaj(n, a); sort1(n, a); writeln('Sortirani niz je: '); pisi(n, a);end.

Primer 8.11 (Knjiga) Zadat je celobrojni niz a. Napisati program koji koristi procedurusort2 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 razmenjujumesta. Posle poredjenja svih parova susednih elemenata najveci ce isplivati na kraj niza izato se ovaj metod naziva metod mehurica. Postupak se ponavlja n-1 puta dok se ne izvrsisortiranje 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;

procedure ucitaj(n:integer; var a:niz);{Procedura ucitava clanove niza}var i : integer;begin for i:=1 to n do

32

i s p i s ( n , a )

K r a j

a [ i ]

i = 1 , n

P o č e t a k

i s p i s ( n , a )

u c i t a j ( n , a )

s o r t 1 ( n , a )

K r a j

n

u c i t a j ( n , a )

K r a j

a [ i ]

i = 1 , n

Page 33: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

read(a[i])end;

procedure razmeni(var a,b : real);var tmp : real;begin tmp:=a; a:=b; b:=tmpend;

procedure sort2(n:integer; var a:niz); {Procedura koja sortira clanove niza u neopadajucemporedku - 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(n:integer; var a:niz);{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 endend;

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);end.

33

r a z m e n i ( a , b )

K r a j

t e m p = aa = bb = t e m p

i s p i s ( n , a )

K r a j

a [ i ]

i = 1 , n

P o č e t a k

i s p i s ( n , a )

u c i t a j ( n , a )

s o r t 2 ( n , a )

K r a j

n

r a z m e n i ( a [ i ] , a [ i + 1 ] )

s o r t 2 ( n a ),

K r a j

N e

D a

g r a n i c a = n - 1 , 1 , - 1

i = 1 , g r a n i c a

a [ i ] > a [ i + 1 ]

Page 34: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

BINARNO PRETRAZIVANJE SORTIRANOG NIZA

Primer 11.43 (Zbirka) Zadat je celobrojni niz a. Napisati program koji koristi procedurusort2 za sortiranje niza u monotono neopadajuci poredak i funkciju BinPret za nalazenjeindeksa 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;

procedure ucitaj(n:integer; var a:niz);{Procedura ucitava clanove niza}var i : integer;begin for i:=1 to n do read(a[i])end;

procedure razmeni(var a,b : real);var tmp : real;begin tmp:=a; a:=b; b:=tmpend;

procedure sort2(n:integer; var a:niz);{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;

function BinPret(n:integer; b:real; a:niz) : integer;

34

Page 35: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

{Rezultat binarnog pretrazivanja je indeks onog elementa, uredjenog niza Akoji je jednak vrednosti od b, ili nula ako takvog elementa nema}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;

procedure pisi(n:integer; var a:niz);{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 endend;

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);

35

Page 36: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

IndeksPronadjenogElementa:=BinPret(n, b, a); 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 U KOME SU ZAPISANE FUNKCIJE ZA UCITAVANJE I ISPISIVANJENIZA NA EKRAN, ZATIM FUNKCIJE I PROCEDURE ZA SORTIRANJE IBINARNO PRETRAZIVANJE NIZA

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 jednakvrednosti 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

Page 37: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

var tmp : real;begin tmp:=a; a:=b; b:=tmpend;

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 endend;

function BinPret;{Rezultat binarnog pretrazivanja je indeks onog elementa, uredjenog niza A koji je jednakvrednosti od b, ili nula ako takvog elementa nema}var gornja, donja, sredina : integer; nadjen : boolean;

37

Page 38: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

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;end.

38

Page 39: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

MATRICE

Dvodimenzionalni nizovi se sastoje od redova (vrsta) i kolona.Primer dvodimenzionalnog niza (matrice):AijA-ime matricei-indeks vrste matricej-indeks kolone matriceDeklaracija matrice:type ili dim=1..max;

mat=array[dim,dim] of tip;var

A:mat;

Primer 6.12a (Zbirka) Napisati program (funkciju) kojom se za realnu matricu A (NxN)izracunava suma svih elemenata (clanova) matrice.

program SumaClanovaMatrice;uses WinCrt;

const k=10;type niz=array[1..k] of real; matrica=array[1..k] of niz;

var A : matrica; rezultat : real; i, j, n : integer;

procedure ucitajMatricu(n:integer;var A:matrica);var i, j : integer;begin for i:=1 to n do for j:=1 to n do read(A[i][j])end;

function SumaElemenata(n:integer; A:matrica) : real;var s : real; i, j : integer;begin s:=0;

39

u c i t a j ( n , A )

K r a j

A [ i ] [ j ]

j = 1 , n

i = 1 , n

S u m a E l e m e n a t a ( n , A )

K r a j

s = 0

s = s + A [ i ] [ j ]

S u m a E l e m a n a t a = s

i = 1 , n

j = 1 , n

P o č e t a k

i s p i s ( n , A )

u c i t a j ( n , A )

r e z u l t a t = S u m a E l e m e n a t a ( n , A )

K r a j

n

r e z u l t a t

const m=10; type niz=array[1..m] of real; mat=array[1..m] of niz; var a:mat;

Page 40: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

for i:=1 to n do for j:=1 to n do s:=s+A[i,j]; SumaElemenata:=send;

begin write('Upisati dimenzije matrice (n):'); readln(n); write('Unesite elemente matrice (3x3): '); ucitajMatricu(n, A); writeln('Elementi matrice su: '); for i:=1 to n do for j:=1 to n do writeln(A[i][j]:8:2); 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.

function SumaDijagonalnihElemenata(n:integer; A:matrica) : real;var s : real; 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;

Primer 6.12e (Zbirka) Napisati program (funkciju) kojom se za realnu matricu A (NxN)izracunava suma svih negativnih elemenata (clanova) matrice.

function SumaNegativnihElemenata(n:integer; A:matrica) : real;var s : real; i, j : integer;begin s:=0; for i:=1 to n do

40

i s p i s ( n , A )

K r a j

A [ i ] [ j ]

j = 1 , n

i = 1 , n

S u m a D i j a g o n a l n i h E l e m e n a t a ( n , A )

K r a j

s = 0

s = s + A [ i ] [ j ]

S u m a D i j a g o n a l n i h E l e m a n a t a = s

i = 1 , n

j = 1 , n

i = jD a

N e

Page 41: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

for j:=1 to n do if A[i,j]<0 then s:=s+A[i,j]; SumaNegativnihElemenata:=send;

Unit u kome se nalaze funkcije za rad samatricama.

unit bibl3;

interface const k=10; type niz=array[1..k] of real; 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

S u m a N e g a t i v n i h E l e m e n a t a ( n , A )

K r a j

s = 0

s = s + A [ i ] [ j ]

S u m a N e g a t i v n i h E l e m a n a t a = s

i = 1 , n

j = 1 , n

A [ i ] [ j ] < 0D a

N e

Page 42: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

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

Page 43: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

STRINGOVIFunkcije 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žinomlen.POS(str1, str2)-vraća pozicju prvog pojavljivanje karaktera str1 u str2. Ako se str1 ne sadrži ustr2 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 jekorisna kada se ne zna koliko karaktera ima u redu. Za ovu funkciju se može koristiti petlja:WHILE NOT EOLN DOBEGINREAD(Ch);...END;

Druga Bulova funkcija je EOF koja se koristi za određivanje kraja datoteke. Funkcija dajevrednost FALSE sve dok se ne dođe do kraja datoteke kada dobija vrednost TRUE. Obično sekoriste funkcije EOF i EOL u kombinaciji kako bi se analiziralo više redova teksta.WHILE NOT EOF DOBEGINWHILE NOT EOLN DOBEGINREAD(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 jednegrupe, a zatim se ispisuju u alfabetskom poretku.

program Alfabet; uses WinCrt;

const k=50;type maxstring=string[30]; {maksimalni broj slova u prezimenu}var i, j, n : integer; prezime : array[1..k] of maxstring;

43

r a z m e n i ( s 1 , s 2 )

K r a j

t e m p = s 1s 1 = s 2s 2 = t e m p

Page 44: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

procedure razmeni(var s1,s2 : maxstring); var tmp : string[30]; begin tmp:=s1; s1:=s2; s2:=tmp; end;

begin write('Unesite broj studenata: '); readln(n); writeln('Unesite prezimena: '); for i:=1 to n do readln(prezime[i]); for i:=1 to n-1 do for j:=i+1 to n do if prezime[i]>prezime[j] then razmeni(prezime[i], prezime[j]); writeln('Prezimena studenata uredjena poalfabetskom redosledu su: '); for i:=1 to n do writeln(prezime[i]);end.

Primer 13.4 (Zbirka) Napisati program kojim se u zadatom stringu s broji pojavljivanjedatog znaka x.

program BrojZnakova;uses WinCrt;

var i, brojac : integer; s : string; x : char;

begin write('Unesite tekst: '); readln(s); writeln('Unesite znak x: '); readln(x); brojac:=0;

for i:=1 to length(s) do brojac:=brojac+ord(s[i]=x); writeln(x, ' se pojavljuje ', brojac, ' puta. ');end.

44

K r a j

n

p r e z i m e [ i ]

p r e z i m e [ i ]

j = i + 1 , n

i = 1 , n - 1

i = 1 , n

i = 1 , n

p r e z i m e [ i ] > p r e z i m e [ j ]

r a z m e n i ( p r e z i m e [ i ] , p r e z i m e [ j ] )

P o č e t a k

K r a j

s , x

b r o j a c

i = 1 , l e n g t h ( s )

b r o j a c = 0

b r o j a c = b r o j a c + o r d ( s [ i ] = x )

P o č e t a k

Page 45: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

Primer 13.18 (Zbirka) Napisati program kojim se u zadatom stringu s zamenjuje svakopojavljivanje stringa s1 sa s2. program Zamena;uses WinCrt;var pozicija : integer; s, s1, s2 : string;begin write('Unesite tekst: '); readln(s); writeln('Zameniti string (s1): '); readln(s1); writeln('Sa stringom (s2): '); readln(s2); while pos(s1,s)<>0 do 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).

program BrojReci;uses WinCrt;var i, brojac, k : integer; s : string;begin write('Unesite string: '); readln(s); brojac:=0; k:=0; s:=s+' '; for i:=1 to length(s) do if s[i]<>' ' then k:=k+1 else begin if k>0 then brojac:=brojac+1; k:=0; end; writeln('Broj reci u stringu je: ', brojac);end.

45

K r a j

s , s 1 , s 2

s

p o z i c i j a = p o s ( s 1 , s )d e l e t e ( s , p o z i c i j a , l e n g t h ( s 1 ) )i n s e r t ( s 2 , s , p o z i c i j a )

P o č e t a k

p o s ( s 1 , s 2 ) = 0 N e

D a

K r a j

s

b r o j a c

i = 1 , l e n g t h ( s )

k = k + 1

b r o j a c = b r o j a c + 1k = 0

b r o j a c = 0k = 0s = s + ' '

P o č e t a k

N e

N e

D a

D a

s [ i ] = ' '

k 0>

Page 46: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

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 = RECORDlista polja

END;Npr. zapis o zaposlenima:TYPE

Zaposleni = RECORDIme :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. Naprimer:Zaposleni.Ime := 'Pero Peric';Zaposleni.Plata := 22500;Ako treba da se odštampa npr. podatak o imenu:WRITELN('Ime zaposlenog: ', Zaposleni.Ime);

WITH izrazWITH izraz omogućava da se pristupi poljima sloga bez korišćenja promenljivih polja. Efekatupotrebe with izraza je da se pripoji svako ime polja imenu sloga. Ako neka od promenljivih ubloku nije identifikator polja, neće se promeniti sa with izrazom. Ako iza with ima samo jedanizraz, nema potrebe da se koristi BEGIN-END blok. With se može koristiti pri pozivanjuprocedure npr:WITH ZaposleniRec DOPrikaziRezultat(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 ostarijoj osobi.

program Stariji;uses WinCrt;{Program cita podatke o dve osobe i ispisuje podatke o starijoj osobi} type licnost=record ime:string;

46

Page 47: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

adresa:string; starost:integer; zanimanje:(student,inzenjer,menadzer,ekonomista) end; var starija, osoba1,osoba2:licnost;

procedure citanjeSloga(var osoba:licnost); {Procedura koja cita slog}var simbol:char; pravilno : boolean;begin with osoba do begin write('Unesite ime i prezime osobe: '); readln(ime); write('Unesite adresu osobe: '); readln(adresa); repeat write('Unesite starost osobe: '); readln(starost); pravilno:=(starost>=0) and (starost<=120); if not pravilno then writeln('Greska u unosenjugodina!'); until pravilno; 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 'S' : zanimanje:=student; 'I' : zanimanje:=inzenjer; 'M' : zanimanje:=menadzer; 'E' : zanimanje:=ekonomista; end; writeln end end;

begin citanjeSloga(osoba1); citanjeSloga(osoba2); if osoba1.starost>osoba2.starost then starija:=osoba1

47

c i t a n j e S l o g a o s o b a 1( )

c i t a n j e S l o g a o s o b a 2( )

K r a j

s t a r i j a . i m e ,s t a r i j a . a d r e s a ,

s t a r i j a . z a n i m a n j e

D a

N e

P o č e t a k

o s o b a 1 . s t a r o s t > o s o b a 2 . s t a r o s t

s t a r i j a = o s o b a 1s t a r i j a = o s o b a 2

c i t a n j e S l o g a o s o b a( )

K r a j

o s o b a . i m e , o s o b a . a d r e s a

o s o b a . s t a r o s t

s i m b o l

G r e s k a

p r a v i l n o = ( s t a r o s t > = 0 ) & & ( s t a r o s t < = 1 2 0 )

z a n i m a n j e = s t u d e n t

z a n i m a n j e = i n z e n j e r

z a n i m a n j e = m e n a d z e r

z a n i m a n j e = e k o n o m i s t a

p r a v i l n o

s i m b o l

D a

N e

S I M E

Page 48: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

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 endend.

Primer 10.2 (Knjiga) Napisati program kojim se citaju slogovi koji sadrze prezime,adresu i broj telefona, a zatim ih ispisuju u afabetskom poretku.

Zadatak se moze razbiti na tri modula:1. Citanje slogova2. Sortiranje slogova3. Ispisivanje sortiranih slogova

Da bi program bio jednostavniji citanje, ispisivanje i sortiranje slogova pisemo u obliku procedura.

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; end; niz=array[1..maks] of licnost; var i, brojac : integer; spisak : niz; simbol : char;

procedure citanjeSloga(var tekuciSlog:licnost); {Procedura za ucitavanje sloga}

48

c i t a n j e S l o g a t e k u c i s l o g( )

K r a j

t e k u c i s l o g . p r e z i m e ,t e k u c i s l o g . a d r e s a ,t e k u c i s l o g . t e l e f o n

Page 49: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

begin with tekucislog do begin write('Unesite prezime osobe: '); readln(prezime); write('Unesite adresu osobe: '); readln(adresa); write('Unesite telefon: '); readln(telefon); endend;

procedure ispisSloga(var tekuciSlog:licnost);{Procedura za ispisivanje sloga na ekranu}begin writeln(''); with tekuciSlog do begin writeln(prezime); writeln(adresa); write('Tel. ', telefon); endend; procedure sortiranje(n:integer; var spisak:niz); {Procedura sortira slogove po prezimenu}var i, j : integer; pomocni : licnost;begin for i:=1 to n-1 do for j:=i+1 to n do if spisak[i].prezime>spisak[j].prezime then begin pomocni:=spisak[i]; spisak[i]:=spisak[j]; spisak[j]:=pomocni endend;

begin brojac:=0; repeat brojac:=brojac+1; citanjeSloga(spisak[brojac]); writeln('Ima li jos slogova (D/N): ');

49

i s p i s S l o g a t e k u c i s l o g( )

K r a j

t e k u c i s l o g . p r e z i m e ,t e k u c i s l o g . a d r e s a ,t e k u c i s l o g . t e l e f o n

D a

N e

p o m o c n i = s p i s a k [ i ]s p i s a k [ i ] = s p i s a k [ j ]s p i s a k [ j ] = p o m o c n i

s o r t i r a n j e s p i s a k( n , )

K r a j

j = 1 , ni +

i = 1 , n - 1

s p i s a k [ i ] . p r e z i m e > s p i s a k [ j ] . p r e z i m e

Page 50: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

readln(simbol); until (simbol<>'D') or (brojac>=maks); sortiranje(brojac, spisak); for i:=1 to brojac do begin write('Pritisnite <ENTER> za ispis sledecegsloga'); read(simbol); ispisSloga(spisak[i]) end; writeln('Ispisani su svi slogovi.');end.

50

c i t a n j e S l o g a s p i s a k [ b r o j a c ]( )

i s p i s S l o g a s p i s a k [ i ]( )

K r a j

s i m b o l

D a

N e

P o č e t a k

( s i m b o l < > ' D ' ) o r ( b r o j a c > = m a k s )

s o r t i r a n j e b r o j a c s p i s a k( , )

i = 1 , n

b r o j a c = 0

b r o j a c = b r o j a c + 1

Page 51: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

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 fajla2. 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 datoteciDa bi pristupili tekstualnoj datoteci, moramo deklarisati promenljivu file sa tipom text. Npr.:varf:text;Otvaranje datotekeDa 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 manipulacijomsa podacima u datoteci.close(f); Opšta formula za pripremu tekstualne datoteke je sledeća:Zaglavlje programaPROGRAM Ime;Deklaracija promenljivihf :TEXT;Povezivanje imena datoteke sa imenima promenljivih fileASSIGN(f, ime-file);Otvaranje datotekeRESET(f);Zatvaranje datotekeCLOSE(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

Page 52: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

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);orWRITE(f, lista promenljivih);Definisanje tipa datoteke:typeidentifikator=file of tip-podatka;Tip podataka može biti integer, array (strukturni tip) ili slog.Dodavanje podataka u datotekuZa 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 ocitavavrednosti iz te datoteke i ispisuje ih na ekran.

procedura Assign dodeljuje ime spoljasnje datoteke datotecnoj promenljivoj (datotecnom pokazivacu). ( Dodeljuje ime spalja{njeg fajla promenljivoj tipa fajl.)procedura Reset otvara postojecu datoteku.procedura Rewrite kreira i otvara novu datoteku.procedura Close zatvara prethodno otvoreni fajl.

program upisivanjeBrojevaUDatoteku; uses WinCrt;var f: file of Integer; i,j: Integer; begin Assign(f,'c:\izlaz.dat'); Rewrite(f); for i := 1 to 6 do Write(f,i); Writeln('U fajlu su upisani brojevi:'); Reset(f); while not Eof(f) do begin Read(f,i); Writeln(i); end;

52

K r a j

f , i

f , i

i

E o f ( f )

P o č e t a k

i = 1 , 6

f , ' c : \ i z l a z . d a t '

N e

D a

Page 53: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

Close(f);end.

2. Napisati program koji upisuje niz celih brojeva u binarnu datoteku, a zatim ocitavavrednosti iz te datoteke i ispisuje ih na ekran.

program citanjeBrojevaizDatoteke;uses WinCrt;

type intdat = file of Integer;

var fulaz : intdat; x : integer; imedat1 : string[30];begin write('Upisati ime datoteke: '); 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 utekstualnu datoteku.program upisBrojevaUDatoteku;uses WinCrt; var fizlaz : text; x : integer; imedat1 : string[30];begin write('Upisati broj: '); readln(x); write('Upisati ime datoteke: '); readln(imedat1); assign(fizlaz, imedat1); reset(fizlaz); rewrite(fizlaz); x:=2*x;

53

K r a j

x , i m e d a t 1

f i z l a z , x

x = 2 * x

P o č e t a k

f i z l a z , i m e d a t 1

K r a j

i m e d a t 1

f u l a z , x

2 * x

E o f ( f u l a z )

P o č e t a k

f u l a z , i m e d a t 1

N e

D a

Page 54: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

write(fizlaz, x); close(fizlaz)end.

4. Napisati program koji kopira sadrzaj zadate datoteke u datoteku c:\nova.txt.

program kopidatoteke;uses WinCrt;

var ch:char; x,y:text; imedat1, imedat2:string[20];

begin write('Upisati ime datoteke (celu putanju): '); readln(imedat1); assign(x, imedat1); assign(y, 'c:\nova.txt'); reset(x); rewrite(y); while not eof(x) do begin while not eoln(x) do begin read(x,ch); write(y,ch); if ch=' ' then begin while(ch=' ') and not eoln(x) do

read(x, ch); if not eoln(x) then write(y, ch) end end; readln(x); writeln(y) end; close(x); close(y); writeln('Datoteka je iskopirana'); end.

54

K r a j

i m e d a t 1

x , c h

x , l n

x , c h

y , c h

y , l n

y , c h

e o f ( x )

e o l n ( x )

c h = ' '

e o l n ( x )

P o č e t a k

x , i m e d a t 1

y , ' c : \ n o v a . t x t '

N e

N e

N e

N e

N e

D a

D a

D a

D a

D a

( c h = ' ' ) a n d n o t e o l n ( x )

Page 55: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

Napisati program za unos podataka o automobilima. Na početku definisati brojautomobila n i podatke o vrsti, godini proizvodnje, ceni i registarskom broju smestititi udatoteku auto.txt.

program UnosAuta; uses wincrt;type

auto = recordvrsta :string[18];godproiz :integer;cena :integer;registar :string[10];end;

type niz=array[1..20] of auto;

var a:niz;

f :text; n,i:integer;

beginassign(f, 'auto.txt');rewrite(f);

writeln('Uneti broj automobila: '); readln(n);

for i:=1 to n dobegin

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.

Napisati program za dodavanje n automobila u datoteku auto.txt.

program DodavanjeAuta;uses wincrt;type

auto = recordvrsta :string[18];godproiz :integer;

55

K r a j

a [ i ] . v r s t a , a [ i ] . g o d p r o i z ,a [ i ] . c e n a , a [ i ] . r e g i s t a r

f , a [ i ] . v r s t a , f , a [ i ] . g o d p r o i z ,f , a [ i ] . c e n a , f , a [ i ] . r e g i s t a r

n

P o č e t a k

i = 1 , n

f , ' a u t o . t x t '

Page 56: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

cena :integer;registar :string[10];end;

type niz=array[1..20] of auto;

var a:niz;

f :text;n,i:integer;

ime:string;begin writeln('Koliko automobila dodajete u datoteku'); readln(n); writeln('Uneti podatke'); writeln; assign(f, 'auto.txt'); append(f);for i:=1 to n do 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.

Iz formirane datoteke auto.txt procitati podatke o automobilima i izracunati ukupnuvrednost svih automobila zadate vrste automobila. Ispisati na ekranu vrstu, godinuproizvodnje i cenu automobila koji su proizvedeni posle zadate godine.

program Automobil;uses wincrt;type

auto = recordvrsta :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

K r a j

a [ i ] . v r s t a , a [ i ] . g o d p r o i z ,a [ i ] . c e n a , a [ i ] . r e g i s t a r

f , a [ i ] . v r s t a , f , a [ i ] . g o d p r o i z ,f , a [ i ] . c e n a , f , a [ i ] . r e g i s t a r

n

P o č e t a k

i = 1 , n

f , ' a u t o . t x t '

a p p e n d ( f )

Page 57: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

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');reset(f);

zbir:=0; n:=1; writeln; writeln('Automobli proizvodeniposle ',godina,' su: '); while not eof(f) do begin

readln(f,a[n].vrsta);readln(f,a[n].godproiz);readln(f,a[n].cena);readln(f,a[n].registar);

if a[n].vrsta=ime then zbir:=zbir+a[n].cena;

if a[n].godproiz>godina then writeln(a[n].vrsta, ':',a[n].godproiz, ' god. ', a[n].cena,'din'); n:=n+1; end; writeln; writeln('Ukupna vrednost svihautomobila tipa ',ime, ' je ',zbir);

close(f)end.

Iz formirane datoteke auto.txt sortirati podatke o automobilima prema ceni kostanja iispisati podatke na ekranu.

program SortiranjeAutomobila;uses wincrt;type

auto = recordvrsta :string[18];godproiz :integer;cena :integer;registar :string[10];end;

type niz=array[1..20] of auto;

57

K r a j

a [ n ] . v r s t a , a [ n ] . g o d p r o i z ,a [ n ] . c e n a , a [ n ] . r e g i s t a r

a [ n ] . v r s t a , a [ n ] . g o d p r o i z , a [ n ] . c e n a

e o f ( f )

a [ n ] . v r s t a = i m e

a [ n ] . g o d p r o i z g o d i n a>

P o č e t a k

f , ' a u t o . t x t '

z b i r = 0 , n = 1

z b i r = z b i r + a [ n ] . c e n a

n = n + 1

N e

N e

N e

D a

D a

D a

i m e , g o d i n a

Page 58: Programski jezik Pascal - ETF Materijalietf.beastweb.org/index.php/site/download/Pascal_sa_Algoritmima_zadnja... · UVOD – RAD SA OSNOVNIM TIPOVIMA PODATAKA Primer 24. (Zbirka)

var a:niz; f:text; n,i,j,pomc, pomg:integer; pomv,pomr:string;begin

assign(f, 'auto.txt');reset(f);

n:=1; while not eof(f) do begin

readln(f,a[n].vrsta);readln(f,a[n].godproiz);readln(f,a[n].cena);readln(f,a[n].registar);

n:=n+1; end; for i:=1 to n-1 do for j:=i+1 to n do begin if (a[i].cena)>(a[j].cena) then begin pomc:=a[i].cena; a[i].cena:=a[j].cena; a[j].cena:=pomc; pomv:=a[i].vrsta; a[i].vrsta:=a[j].vrsta; a[j].vrsta:=pomv; pomg:=a[i].godproiz; a[i].godproiz:=a[j].godproiz; a[j].godproiz:=pomg; pomr:=a[i].registar; a[i].registar:=a[j].registar; a[j].registar:=pomr; end; end; writeln(n); for i:=1 to n do begin writeln;

write(a[i].vrsta,' ');write(a[i].godproiz,' ');write(a[i].cena,' ');write(a[i].registar,' ');

end;close(f)

end.

58

K r a j

a [ n ] . v r s t a , a [ n ] . g o d p r o i z ,a [ n ] . c e n a , a [ n ] . r e g i s t a r

a [ i ] . v r s t a , a [ i ] . g o d p r o i z ,a [ i ] . c e n a , a [ i ] . r e g i s t a r

e o f ( f )

D a

N e

P o č e t a k

p o m c = a [ i ] . c e n aa [ i ] . c e n a = a [ j ] . c e n aa [ j ] . c e n a = p o m c

p o m v = a [ i ] . v r s t aa [ i ] . v r s t a = a [ j ] . v r s t aa [ j ] . v r s t a = p o m v

p o m g = a [ i ] . g o d p r o i za [ i ] . g o d p r o i z = a [ j ] . g o d p r o i za [ j ] . g o d p r o i z = p o m g

p o m r = a [ i ] . r e g i s t a ra [ i ] . r e g i s t a r = a [ j ] . r e g i s t a ra [ j ] . r e g i s t a r = p o m r

j = 1 , ni +

i = 1 , n - 1

i = 1 , n

f , ' a u t o . t x t '

n = 1

n = n + 1

a [ i ] . c e n a > a [ j ] . c e n a

N e

D a