Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
43
13. Naredbe za ponavljanje
U programima često postoji potreba da se deo programa više puta uzastopno izvede. U tu
svrhu koriste se tzv. naredbe za ponavljanje. Pascal koristi tri vrste naredbi za ponavljanje:

FOR,

WHILE,

REPEAT - UNTIL.
Naredba FOR omoguduje bezuslovno ponavljanje određenog dela programa toliko puta
koliko programer želi. To se može prikazati dijagramom toka na slededi način:
Evo prvog primera naredbe FOR:
FOR i := 1 TO 5 DO
write ('+')
Kad je izvršena naredba FOR, naredba WRITE de se izvršiti pet puta i računar de ispisati:
+
+
+
+
+
Naredba write je zapravo deo FOR naredbe. U prvom izvršavanju vrednost i je 1, u drugom
ponavljanju i je 2 itd.
Ako upotrebimo DOWNTO umesto TO računar de brojati unazad:
FOR h:=5 DOWNTO 1 DO
WRITE (i:4)
rezultat de biti: 54321
Naredba koja se ponavlja razmatra se kao deo FOR naredbe. To znači da tačka-zarez odvaja
naredbu FOR od susednih naredbi koje dolaze pre FOR i posle naredbe koja se ponavlja. Na
primer, razmotrimo sledede:
x:=3.5;
FOR i:=1 TO 5 DO write (i:4);
y : = 7.9
Pišudi naredbu, koja se ponavlja, u istom redu kao ostatak naredbe FOR, istakli smo, da je
write (i:4) deo naredbe FOR.
Isti princip važi kad je naredba za ponavljanje složena naredba. U tom slučaju naredba FOR
se sastoji od svega što je između reči FOR do reči END koja završava složenu naredbu.
Tačka-zarez odvaja naredbu FOR od sledede naredbe koja dolazi posle reči END.
Autor: Velja Milanovid msc. prof.
09.02.2012
43/119
Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
44
Primer:
x:=3.5;
FOR i == 1 TO 5 DO
BEGIN
read (j);
write (j:4)
END;
y:=7.9
ZADACI:
Neka je data slededa grupa naredbi.
a := 5;
for i :=1 to 5 do
a :=a-i;
a :=a-4;
kolika de biti vrednost promenljive a posle izvršenja datog koda ?
Rešenje:
1. prolaz:
a=a-i=5-1=4
2. prolaz:
a=a-i=4-2=2
3. prolaz:
a=a-i=2-3-=1
4. prolaz:
a=a-i=-1-4=-5
5. prolaz:
a=a-i=-5-5=-10
i na kraju se izvršava naredba:
a=a-4=-10-4=-14
Uočite da je u telu ciklusa samo naredba a := a-i koja de biti izvršena pet puta, dok de
naredba a :=a-4 biti izvršena samo jednom.
Napisati program i nacrtati algoritam
koji izračunava zbir svih brojeva do n:
p
n
PROGRAM AA;
VAR
S,n,i:integer;
BEGIN
writeln( ' Unesi n ' ); readln (n);
S:=0;
for i:=1 to n do
S:=S+i
Writeln( ' Zbir je jednak ' , S:4 );
END.
ne
i<=n
da
S=s+i
s
Autor: Velja Milanovid msc. prof.
S=n
k
09.02.2012
44/119
Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
Napisati program koji sabira i množi
brojeve od 30 do 50 :
45
p
S=0
PROGRAM ABC;
VAR
P,S,i:integer;
BEGIN
P:=1; S:=0
for i:=30 to 50 do
begin
S:=S+i;
P:=P*i
end;
writeln( ' Zbir je ' , S:4, '
Proizvod je ' , P:4);
readln
END.
P=1
ne
30<i<50
da
S=s+i
s
P=p*i
k
Napisati program koji sabira i množi
brojeve deljive sa 3,u intervalu od 10 do
50:
p
S=0
P=1
ne
30<i<50
da
S=s+i
s
PROGRAM ABCD;
VAR
P,S,i:integer;
BEGIN
P:=1; S:=0;
for i:=10 to 50 do
if i mod 3 = 0 then
begin
S:=S+i;
P:=P*i
end;
writeln( ' Zbir je ' , S:4);
writeln( ' Proizvod je ' , P:4);
readln END.
P=p*i
k
Autor: Velja Milanovid msc. prof.
09.02.2012
45/119
Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
Nacrtati algoritam i napisati program
koji izračunava zbir n brojeva koji se
unose sa tastature (odnosno sa ulaza):
46
p
n
PROGRAM ABC;
VAR
n,S,i,x:integer;
BEGIN
writeln( ' Unesi n ' );
readln(n);
S:=0;
for i:=1 to n do
begin
writeln( ' Unesi broj x ' );
readln(x);
S:=S+x
end;
writeln( ' Zbir je ' , S:4);
readln
END.
S=0
i<=n
s
Unesi x
k
x
S=s+x
Nacrtati algoritam i napisati program
koji sabira i množi n brojeva koji se unose
sa tastature,a imaju osobinu da su deljivi
sa 3 i 6:
p
n
PROGRAM ABC;
VAR
x,n,S,P:integer;
BEGIN
writeln( ' Unesi n ' );
readln(n);
S:=0; P:=1;
for i:=1 to n do
begin
writeln( ' Unesi x ' );
readln(x);
if (x mod 3) and (x mod 6) then
begin
S:=S+x;
P:=P*x
end;
end;
writeln( ' Vrednost zbira je ' ,s:4);
writeln( ' Vrednost proizvoda je ',P:4 );
readln END.
S=0
ne
i<=n
S,p
Autor: Velja Milanovid msc. prof.
P=1
unesi
k
x
da
Xmod...
S=s+x
P=p*x
09.02.2012
46/119
Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
47
Napisati program i nacrtati algoritam
koji nalazi aritmetičku sredinu svih parnih
brojeva koji se unose sa tastature:
PROGRAM ABCD;
VAR
S,x,n,br,i:integer;
Sr:real;
BEGIN
writeln( ' Unesi n ' );
readln(n);
S:=0;
br:=0;
for i:=1 to n do
begin
writeln( ' Unesi x ' );
readln(x);
if x mod 2=0 then
begin
S:=S+x;
br:=br+1;
end;
end;
Sr:=S/br;
writeln( ' Srednja vrednost je ' ,
Sr:4:2 );
readln
END.
Autor: Velja Milanovid msc. prof.
09.02.2012
47/119
Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
48
Napisati program koji omoguduje
unošenje n brojeva,a zatim izračunava
aritmetičku sredinu svih brojeva koji su
parni. Zatim ispisuje sve ponovo unešene
brojeve koji su manji od aritmetičke
sredine:
PROGRAM ABCD;
VAR
Sr:real;
i,x,n,S,br:integer;
BEGIN
writeln( ' Unesi n ' );
readln(n);
S:=0;
br:=0;
for i:=1 to n do
begin
writeln( ' Unesi x ' );
readln(x);
if x mod 2 =0 then
begin
S:=S+x;
br:=br+1;
end;
end;
Sr:=S/br;
writeln( ' Srednja vrednost je ' ,
Sr:4:2);
writeln ( ' Nastavak ' );
for i:=1 to n do
begin
readln(x);
if x< Sr then writeln( x:4 );
end;
readln
END.
Autor: Velja Milanovid msc. prof.
09.02.2012
48/119
Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
49
Napisati program koji omogudava unos n
brojeva ako je broj n paran racuna zbir
Sp=13+23…(n-1)3 a u suprotnom
Sn=23+43…(n-1)3
Program Abc;
Var
n,i,Sn,Si:integer;
Begin
Writeln(’unesi n’);
Readln(n);
Sp:=0; Sn:=0;
if N mod 2=0 then
Begin
For I:= to n-1 do
Sp:=Sp+sqr(I)*I;
End
Else
Begin
For i:=2 to n-1 do
begin
i:=i+2;
Sn:=Sn+sqr(i)*I;
End;
Writeln(’sn i sp’, sn:3, sp:3);
Readln
End.
Autor: Velja Milanovid msc. prof.
09.02.2012
49/119
Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
50
Kreirati algoritamsku šemu i napisati
odgovarajudi program kojim se učitava
realna promenljiva x različita od nule, a
zatim se izračunava, slededa suma:
S
22
42
102

 ..... 
x 2 x 4
x 10
Program bbv;
var
X,s:real; i;integer;
Begin
Writeln('Unesite realni broj x');
Readln(x);
S:=0;
For i:=2 to 10 do
begin
S:=(s+sqr(i))/(x*sqrt(i));
I:=i+2
End;
Writeln('rezultat je =',s:4:2);
Readln
End.
Kreirati algoritamsku šemu i napisati
odgovarajudi program koji za unetu
vrednost prirodnog broja n izračunava
slededi količnik:
1! 2! 3! ...  n !
R
1 1
1
1    ... 
2 3
n
Program ccdd;
Var
I,n,fakt,s:integer;
Im,r:real;
Begin
Writeln('Unesite prirodan broj n:');
Readln(n);
s:=0;Im:=0;Fakt:=1;
For i:=1 to n do
Begin
Fakt:=fakt*i; s:=s+fakt; im:=1/i
end;
R:=s/im;
Writeln('Rezultat =',R:5:2);
Readln End.
Autor: Velja Milanovid msc. prof.
09.02.2012
50/119
Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
51
Zadaci sa bloka ( If i For )
1. Sastaviti program kojim se za zadate realne brojeve x, y, z izračunava Q po
 3  min( x , y , z ), y  0

formuli: Q  
 4*max( x , y , z ), y  0

2. Napisati program koji za 4 prirodna broja a, b, c, d određuje koliko je njih deljivo sa 2,
koliko sa 6, a koliko sa 4 i 6.
3. Učitati prirodan broj n, a zatim n celih brojeva. Ispisati zbir parnih i zbir neparnih
odvojeno, a zatim ispitati koji je od njih veći.
4. Napiši program koji ispisuje trocifrene brojeve deljive sa 8 ili 4 i izračunava njihovu
aritmetičku sredinu.
5. Napisati program koji za 4 prirodna broja a, b, c, d određuje koliko je njih deljivo sa 3,
koliko sa 4,
a kolika sa 3 i 4.
6. Zadaju se brojevi U i V. Sastaviti program koji prikazuje vrednost veličine K:
 (u 4  v)

............ za u  v 



u2
K 

u3 * v2
 u

...... za u  v 
 5 
3


7. Napisati program za izračunavanje zbira kvadrata parnih i kubova neparnih prirodnih
brojeva od n do m, a zatim ispitati koji je od njih veći.
8. Učitati prirodan broj n, a zatim n celih brojeva. Ispisati broj pozitivnih, broj negativnih i
broj onih koji su jednaki nuli i njihovu aritmetičku sredinu.
9. Sastaviti program za izračunavanje površine i obima trougla ako su date sve tri stanice uz
postavljanje uslova da je zbir dve stranice veći od treće!
10. Napisati program koji za 4 prirodna broja a, b, c, d određuje koliko je njih deljivo sa 4,
koliko sa 5 i razliku njihovih zbirova.
11. Napisati program koji sabira i množi brojeve na intervalu 1 do n počev od 1 i uzimajući
sve naredne brojeve koji se međusobno razlikuju za 3.
12. Učitati prirodan broj n, a zatim n realnih brojeva, pa ispisati njihovu aritmetičku sredinu i
proizvod.
13. Napisati program koji za 4 prirodna broja a, b, c, d određuje koliko je njih deljivo sa 2,
koliko sa 6, a koliko sa sa 4 i 6.
14. Preko tastature se zadaju brojevi P, Q, R, K, N. Sastaviti program koji proverava da li je
broj P veći od aritmetičke sredine ostalih brojeva, ako jeste izračunava: B=3*Q2 – (R-P)3,
a u suprotnom
B=4*Q2 – (R-P)3/K*N
15. Napiši program koji ispisuje dvocifrene brojeve deljive sa 3 i izračunava njihovu
aritmetičku sredinu i proizvod.
16. Učitati prirodan broj n, a zatim n celih brojeva. Ispisati aritmetičku sredinu brojeva većih
od zadatog broja NNbroj i te brojeve.
Autor: Velja Milanovid msc. prof.
09.02.2012
51/119
Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
52
17. Sastaviti program kojim se za zadate realne brojeve x, y, z izračunava Q po formuli:
13 min( x , y , z ),

Q
42*max( x , y , z ),


y 0
y 0
18. Napisati program koji za 4 prirodna broja a, b, c, d određuje koliko je njih deljivo sa 3,
koliko sa 9, a zatim zbir njihovih zbirova.
19. Napisati program koji za uneti prirodan broj n najpre ispituje da li je paran ili neparan.
Ukoliko je neparan izračunava se suma oblika Sn=23 + 43 +...+ (n-1)3, a ukoliko je paran
suma oblika Sp = 13 +33 +... +( n-1 )3 i štampa odgovarajući rezultat.
20. Učitati prirodan broj n, a zatim n celih brojeva. Ispisati procenat brojeva manjih od
zadatog broja HHH i te brojeve.
Naredba WHILE
Za korišdenje naredbe FOR moramo znati
broj ponavljanja. On se mora naznačiti pre
nego što se i jedno ponavljanje izvrši. Ali
ponekad želimo ponavljati naredbe sve dotle
dok je ispunjen neki uslov. U tom slučaju ne
znamo unapred koliko de biti ponavljanja.
Dijagram toka pokazuje opisani slučaj:
Ovde demo upotrebiti naredbu WHILE za ponavljanje. Njen opšti oblik je:
WHILE Booleov izraz DO
naredba
Booleov izraz procenjuje uslov, pa ako je vrednost Booleovog izraza ISTINA naredba se
izvršava. Taj proces se ponavlja tako dugo dok Booleov izraz ima vrednost ISTINA. Kad
postane LAŽ ponavljanje prestaje i računar ide na slededu naredbu u programu. Kao i kod
FOR naredbe, naredba za ponavljanje može biti jednostavna ili složena naredba. Na primer,
razmotrimo sledede:
i:=0;
WHILE i < =20 DO
WRITELN (i);
i:=i + 5;
WRITELN ('Ponavljanje završeno')
U ovom slučaju naredba i:=i + 5 de se izvršavati ponavljanjem. Svakim izvršenjem raste
vrednost i za 5, pa de imati sledede vrednosti: 0, 5, 10, 15, 20. Pre svakog ponavljanja
vrednost i se proverava da li je manja ili jednaka 20. Kad je vrednost i 0, 5, 10, 15 ili 20 ovaj
test prođe i ponavljanje se izvršava. Ali kada je vrednost i 25, vrednost i < = 20 je LAŽ, pa je
ponavljanje završeno.
Autor: Velja Milanovid msc. prof.
09.02.2012
52/119
Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
53
Možemo uzeti postupno vrednosti i koristedi složenu naredbu kao naredbu za ponavljanje:
i:=0;
WHILE i < =20 DO
BEGIN
write (i:4);
i := i + 5
END
Rezultat de biti: 0
5
10
15
20
Zadnja vrednost i = 25 nije ispisana. Zašto? Obzirom da naredba WHILE proverava vrednost
Booleovim izrazom pre svakog izvršavanja naredbe za ponavljanje, ne izvršava se čim se prvi
put dođe do Booleovog izraza LAŽ.
Na primer, u slučaju:
i:=21;
WHILE i < =20 DO
BEGIN
write (i:4);
i:=i+5
END
ni jedna vrednost nede biti ispisana, obzirom da je kod prvog ispitivanja uslova i < = 20
vrednost LAŽ.
Zadatak:
Neka je data slededa grupa naredbi:
s :=0; i :=-1;
while s<4 do
begin
s :=s+0.7;
i :=i+3
end;
s :=s+i;
Kolike de biti vrednosti promenljivih s i i nakon napuštanja navedenog koda.
Rešenje:
1. prolaz
s=s+0.7=0+0.7=0.7
i=i+3=-1+3=2
2.prolaz
s=s+0.7=0.7+0.7=1.4
i=i+3=2+3=5
3.prolaz
s=s+0.7=1.4+0.7=2.1
i=i+3=5+3=8
4.prolaz
s=s+0.7=2.1+0.7=2.8
Autor: Velja Milanovid msc. prof.
09.02.2012
53/119
Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
54
i=i+3=8+3=11
5.prolaz
s=s+0.7=2.8+0.7=3.5
i=i+3=11+3=14
6. prolaz
s=s+0.7=3.5+0.7=4.2
i=i+3=14+3=17
7. prolaz
bududi da je s = 4.2 > 4 ovog prolaza nema pa se izvršava instrukcija iza
while ciklusa
s :=s+i = 4.2+17=21.2
Zadatak:
Neka je data slededa grupa naredbi:
s :=1; i :=1;
while s<4 do
begin
s :=s+0.6;
i :=i+2
end;
s :=s+i;
Kolike de biti vrednosti promenljivih s i i nakon napuštanja navedenog koda.
Rešenje:
1. prolaz
s=s+0.6=1+0.6=1.6
i=i+2=1+2=3
2.prolaz
s=s+0.6=1.6+0.6=2.2
i=i+2=3+2=5
3.prolaz
s=s+0.6=2.2+0.6=2.8
i=i+2=5+2=7
4.prolaz
s=s+0.6=2.8+0.6=3.4
i=i+2=7+2=9
5.prolaz
s=s+0.6=3.4+0.6=4.0
i=i+2=9+2=11
6. prolaz
bududi da je s = 4.0 i nije manje od 4 ovog prolaza nema pa se izvršava instrukcija
iza while
ciklusa s := s + i = 4.0 + 11 = 15
Zadatak:
Neka je data slededa grupa naredbi:
while a > b do
Autor: Velja Milanovid msc. prof.
09.02.2012
54/119
Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
55
begin
c :=a*b;
c :=c+a
end;
Kako de se izvršiti ova grupa naredbi.
Ako je a <= b tada instrukcije u telu ciklusa nede biti izvršene ni jedanput a ako je a > b
program de trajno ostati u telu ciklusa takozvanom beskonačnom ciklusu.
Napisati program korišdenjem strukture
while koji sabira dva broja a i b, koji se
unose sa tastature I to dok je a>b…
Program abc;
Var
A,b,s:integer;
Begin
Writeln (’unesi brojeve…’);
Readln (a,b);
While a>b do
Begin
Readln (a,b);
S:=a+b;
end;
Writeln(’zbir je=’, s:4);
Readln
End.
p
A,b
S=0
ne
A>b
Zbir je
A,b
k
S=a+b
Autor: Velja Milanovid msc. prof.
09.02.2012
55/119
Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
Napisati program koristedi strukturu while
koji sabira brojeve koji se unose sa tastature
sve dok se ne unese broj 5…
Program abc
Var
S,x:integer;
Begin
Writeln(’unesi broj’);
Readln(x);
S:=0;
While x<>5 do
Begin
writeln('unesi broj');
Readln(x)
End;
Writeln(’zbir=’,s:4);
Readln
End.
56
p
x
S=0
ne
X<>5
s
S=s+x
k
x
Napisati program za izračunavanje n-tog
stepena celog broja a.
program NtiStepen;
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);
readln
END.
Autor: Velja Milanovid msc. prof.
09.02.2012
56/119
Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
57
Napiši program kojim se sabiraju svi
neparni brojevi od 100 do 1000 upotrebom
while naredbe.
program pr;
var
zbir : real;
i : integer;
begin
zbir :=0;
i := 101;
while i < 1000 do
begin
zbir :=zbir+i;
i :=i+2;
end;
WriteLn('Trazeni zbir je ',zbir:8:2);
ReadLn
End.
Kao prvi neparni broj uzeti broj 101 a svaki
slededi neparni je za 2 vedi od prethodnog.
Ciklus de se završiti kada i dostigne vrednost
od 1001 ali taj broj nede udi u zbir. Inače
traženi zbir je 247500.
Zadatak:
Napiši program upotrebom while naredbe kojim se izračunava zbir niza za svaki broj n
unešen sa tastature ako je dat niz:
program prog;
var
zbir, j : real; n,i : integer;
begin
Write('Unesi broj n : '); ReadLn(n);
zbir :=0; i := 1;
while i <= n do
begin
j :=1 /(2*i-1);
zbir :=zbir+j; i :=i+1;
end;
WriteLn('Trazeni zbir niza je :',zbir:8:2);
ReadLn
End.
Suština rešenja ovog zadatka je da izračuna član niza i doda na prethodnu sumu. Nakon toga
Autor: Velja Milanovid msc. prof.
09.02.2012
57/119
Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
58
se i uvedava za 1. Ciklus se obnavlja sve dok i ne dostigne vrednost n+1, ali taj član nede udi u
zbir bududi da je uslov zadovoljen.
Napisati program koji za zadati broj n
ispituje da li je paran i vedi od 20.
Ako jeste računa sumu s1 svih parnih
četvorocifrenih brojeva i štampa je,
ako nije računa sumu s2 svih
neparnih trocifrenih brojeva i
štampa je.
Program klk;
Var
S1, s2, i, n:integer;
Begin
Writeln('Unesi broj n');
Readln(n);
If (n mod 2 = 0) and (n>20) then
Begin
S1:=0; i:=1000;
While (i<9999) do
begin
if (i mod 2=0) then
s1:=s1+i;
i:=i+1
end
writeln('Zbir parnih je=',s1:4);
end
else
Begin
S2:=0; i:=100;
While ( i<999 ) do
begin
if (i mod 2<>0) then
s1:=s2+i;
i:=i+1
end;
writeln('Zbir neparnih je=',s2:4);
end
end;
readln
end.
Autor: Velja Milanovid msc. prof.
09.02.2012
58/119
Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
59
Naredba REPEAT
Pascal dozvoljava još jednu naredbu za kontrolu ponavljanja, to je REPEAT naredba, koja ima
slededi oblik:
REPEAT
naredbe
UNTIL Booleov izraz
Dijagram toka za ovu naredbu je:
Bilo koji broj naredbi odvojen tačka-zarezom može biti smešten između REPEAT i UNTIL.
Bududi da reči - REPEAT i UNTIL čine oblik poput para zagrada, BEGIN i END nisu potrebni.
Naredbe između REPEAT i UNTIL se izvršavaju nakon što je procenjen Booleov izraz.
Ako je vrednost Booleovog izraza ISTINA nema više ponavljanja, pa računar ide na
slededu naredbu u programu. Ako je vrednost Booleovog izraza LAŽ naredbe
ponavljanja se ponovo izvršavaju itd.
Na primer, naredbe:
i:=0;
REPEAT
write (i:4);
i:=i + 5
UNTIL i >20
izazivaju ispis: 0
5
10
15
20
Posle vrednosti 20 naredba: i := i + 5 menja vrednost i u 25. Sada vrednost: i >20 postaje
ISTINA i nema više ponavljanja.
Najvažnija odlika naredbe REPEAT je da se vrednost Booleovog izraza proverava posle
izvršenja naredbi ponavljanja, a ne pre.
Ovo znači, da se naredbe ponavljanja uvek izvršavaju najmanje jednom .
Možemo napraviti poređenje s dve grupe sličnih naredbi, jedna upotrebljava WHILE, a druga
REPEAT:
Autor: Velja Milanovid msc. prof.
09.02.2012
59/119
Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
i := 21
WHILE i < =20 DO
BEGIN
write (i:4);
i:=i + 5
END
60
i:= 21;
REPEAT
write (i:4);
i:=i + 5
UNTIL i > 20
Naredbe levo nede izazvati nikakav ispis. Naredbe desno uslovljavaju ispis 21. Kada se izvrše
naredbe na levoj strani, vrednost i postaje 21, a kada se izvrše na desnoj strani i postaje 26.
Razlika između ova dva primera je u primeru na levoj strani, gde se naredbe ponavljanja ne
izvršavaju, dok u primeru na desnoj strani imamo izvršeno jedno ponavljanje. To je zato što
naredba WHILE ispituje (proverava) Booleov izraz pre svakog izvršavanja naredbi
ponavljanja, a REPEAT ispituje posle.
Važno!
Za razliku od "for" ciklusa koji se sigurno završava, ove dve vrste petlji ne moraju da se
završe! Na primer, slededa dva ciklusa:
k := 1;
k := 1;
while k > 0 do
repeat
k := k + 1;
k := k + 1
until k = 0;
de se završiti tek kada nestane stuje.
Zato uvek moramo imati nešto što raste (ili opada) i tako se približava uslovu za izlazak iz
petlje. To nešto je najčede neka promenljiva čija vrednost raste (ili se smanjuje) u svakom
prolazu kroz petlju. Kadgod napišete "while" ili "repeat" ciklus, proverite obavezno da li de
se završiti. Na primer, u ciklusu:
k := 0;
repeat
k := k + 1;
writeln(k, 'Hello!')
until k = 10;
vrednost promenljive k raste u svakom prolazu kroz ciklus. Kako smo krenuli od nule, ciklus
de se sigurno završiti.
Zadatak:
Neka je data slededa grupa naredbi:
s :=1; i :=1;
repeat
s :=s+0.6;
i :=i+2
until s=4;
s :=s+i;
Kolike de biti vrednosti promenljivih s i i nakon napuštanja navedenog koda.
Autor: Velja Milanovid msc. prof.
09.02.2012
60/119
Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
61
Rešenje:
1. prolaz
s=s+0.6=1+0.6=1.6
i=i+2=1+2=3
2.prolaz
s=s+0.6=1.6+0.6=2.2
i=i+2=3+2=5
3.prolaz
s=s+0.6=2.2+0.6=2.8
i=i+2=5+2=7
4.prolaz
s=s+0.6=2.8+0.6=3.4
i=i+2=7+2=9
5.prolaz
s=s+0.6=3.4+0.6=4.0
i=i+2=9+2=11
uslov je zadovoljen pa se napušta repeat ciklus pa de s biti:
s=s+i = 4.0+11=15
Zadatak:
Neka je data slededa grupa naredbi:
s :=0; i :=-1;
repeat
s :=s+0.7;
i :=i+3
until s=4.2;
s :=s+i;
Kolike de biti vrednosti promenljivih s i i nakon napuštanja navedenog koda.
Rešenje:
1. prolaz
s=s+0.7=0+0.7=0.7
i=i+3=-1+3=2
2.prolaz
s=s+0.7=0.7+0.7=1.4
i=i+3=2+3=5
3.prolaz
s=s+0.7=1.4+0.7=2.1
Autor: Velja Milanovid msc. prof.
09.02.2012
61/119
Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
62
i=i+3=5+3=8
4.prolaz
s=s+0.7=2.1+0.7=2.8
i=i+3=8+3=11
5.prolaz
s=s+0.7=2.8+0.7=3.5
i=i+3=11+3=14
6. prolaz
s=s+0.7=3.5+0.7=4.2
i=i+3=14+3=17
bududi da je uslov zadovoljen to je s=s+i=4.2+17=21.2.
Napisati program za izračunavanje
recipročnih vrednosti do n.
program Suma;
var
i,n: integer;
s:real;
begin
s:=0;
i:=1;
write(‘Unesite broj n ’);
readln(n);
repeat
s:=s+1/i;
i:=i+1;
until i>n;
write(’Trazeni zbir je ’,s);
end.
Autor: Velja Milanovid msc. prof.
09.02.2012
62/119
Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid
63
Napiši program upotrebom repeat
instrukcije kojim se traži zbir brojeva od 1 do
100 deljivih sa 6 i 4. Brojevi od 50 do 60 ne
ulaze u taj zbir.
program prog;
var
zbir : real;
i : integer;
begin
zbir :=0;
i := 1;
repeat
if (((i mod 4 = 0) and (i mod 6 = 0))
and ((i < 50) or (i > 60)))
then zbir := zbir+i;
i := i+1;
until i = 101;
WriteLn('Trazeni zbir je :',zbir:8:2);
ReadLn
End.
Napisati program kojim se odredjuje broj
jedinica u binarnom zapisu prirodnog broja
n.
program BrojJedinica;
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.
Autor: Velja Milanovid msc. prof.
09.02.2012
63/119
Download

Uvod u programiranje u PASCAL-u sa zbirkom