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

13. Naredbe za ponavljanje · 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

  • Upload
    others

  • View
    28

  • Download
    0

Embed Size (px)

Citation preview

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 43

    Autor: Velja Milanovid msc. prof.

    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.

    09.02.2012 43/119

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 44

    Autor: Velja Milanovid msc. prof.

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

    p

    n

    S=n

    i

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 45

    Autor: Velja Milanovid msc. prof.

    Napisati program koji sabira i množi brojeve od 30 do 50 :

    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

    P=1

    30

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 46

    Autor: Velja Milanovid msc. prof.

    Nacrtati algoritam i napisati program koji izračunava zbir n brojeva koji se unose sa tastature (odnosno sa ulaza):

    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.

    p

    n

    S=0

    i

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 47

    Autor: Velja Milanovid msc. prof.

    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.

    09.02.2012 47/119

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 48

    Autor: Velja Milanovid msc. prof.

    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.

    09.02.2012 48/119

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 49

    Autor: Velja Milanovid msc. prof.

    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.

    09.02.2012 49/119

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 50

    Autor: Velja Milanovid msc. prof.

    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:

    2 2 22 4 10

    .....2 4 10

    Sx x x

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

    1 1 11 ...

    2 3

    nR

    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.

    09.02.2012 50/119

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 51

    Autor: Velja Milanovid msc. prof.

    Zadaci sa bloka ( If i For )

    11.. SSaassttaavviittii pprrooggrraamm kkoojjiimm ssee zzaa zzaaddaattee rreeaallnnee bbrroojjeevvee xx,, yy,, zz iizzrraaččuunnaavvaa QQ ppoo

    ffoorrmmuullii::

    3 min( , , ), 0

    4*max( , , ), 0

    x y z y

    x y z y

    Q

    22.. NNaappiissaattii pprrooggrraamm kkoojjii zzaa 44 pprriirrooddnnaa bbrroojjaa aa,, bb,, cc,, dd ooddrreeđđuujjee kkoolliikkoo jjee nnjjiihh ddeelljjiivvoo ssaa 22,,

    kkoolliikkoo ssaa 66,, aa kkoolliikkoo ssaa 44 ii 66..

    33.. UUččiittaattii pprriirrooddaann bbrroojj nn,, aa zzaattiimm nn cceelliihh bbrroojjeevvaa.. IIssppiissaattii zzbbiirr ppaarrnniihh ii zzbbiirr nneeppaarrnniihh

    ooddvvoojjeennoo,, aa zzaattiimm iissppiittaattii kkoojjii jjee oodd nnjjiihh vveeććii..

    4. Napiši program koji ispisuje trocifrene brojeve deljive sa 8 ili 4 i izračunava njihovu aritmetičku sredinu.

    55.. NNaappiissaattii pprrooggrraamm kkoojjii zzaa 44 pprriirrooddnnaa bbrroojjaa aa,, bb,, cc,, dd ooddrreeđđuujjee kkoolliikkoo jjee nnjjiihh ddeelljjiivvoo ssaa 33,,

    kkoolliikkoo ssaa 44,,

    aa kkoolliikkaa ssaa 33 ii 44..

    66.. ZZaaddaajjuu ssee bbrroojjeevvii UU ii VV.. SSaassttaavviittii pprrooggrraamm kkoojjii pprriikkaazzuujjee vvrreeddnnoosstt vveelliiččiinnee KK:: 4

    2

    3 2

    ( )............

    *......

    5 3

    u vza u v

    uK

    u u vza u v

    7. Napisati program za izračunavanje zbira kvadrata parnih i kubova neparnih prirodnih brojeva od n do m, aa zzaattiimm iissppiittaattii kkoojjii jjee oodd nnjjiihh vveeććii..

    8. UUččiittaattii pprriirrooddaann bbrroojj nn,, aa zzaattiimm nn cceelliihh bbrroojjeevvaa.. IIssppiissaattii bbrroojj ppoozziittiivvnniihh,, bbrroojj nneeggaattiivvnniihh ii

    bbrroojj oonniihh kkoojjii ssuu jjeeddnnaakkii nnuullii ii nnjjiihhoovvuu aarriittmmeettiiččkkuu ssrreeddiinnuu..

    99.. SSaassttaavviittii pprrooggrraamm zzaa iizzrraaččuunnaavvaannjjee ppoovvrrššiinnee ii oobbiimmaa ttrroouuggllaa aakkoo ssuu ddaattee ssvvee ttrrii ssttaanniiccee uuzz

    ppoossttaavvlljjaannjjee uusslloovvaa ddaa jjee zzbbiirr ddvvee ssttrraanniiccee vveeććii oodd ttrreeććee!!

    1100.. NNaappiissaattii pprrooggrraamm kkoojjii zzaa 44 pprriirrooddnnaa bbrroojjaa aa,, bb,, cc,, dd ooddrreeđđuujjee kkoolliikkoo jjee nnjjiihh ddeelljjiivvoo ssaa 44,,

    kkoolliikkoo ssaa 55 ii rraazzlliikkuu nnjjiihhoovviihh zzbbiirroovvaa..

    1111.. NNaappiissaattii pprrooggrraamm kkoojjii ssaabbiirraa ii mmnnoožžii bbrroojjeevvee nnaa iinntteerrvvaalluu 11 ddoo nn ppooččeevv oodd 11 ii uuzziimmaajjuuććii

    ssvvee nnaarreeddnnee bbrroojjeevvee kkoojjii ssee mmeeđđuussoobbnnoo rraazzlliikkuujjuu zzaa 33..

    1122.. UUččiittaattii pprriirrooddaann bbrroojj nn,, aa zzaattiimm nn rreeaallnniihh bbrroojjeevvaa,, ppaa iissppiissaattii nnjjiihhoovvuu aarriittmmeettiiččkkuu ssrreeddiinnuu ii

    pprrooiizzvvoodd..

    1133.. NNaappiissaattii pprrooggrraamm kkoojjii zzaa 44 pprriirrooddnnaa bbrroojjaa aa,, bb,, cc,, dd ooddrreeđđuujjee kkoolliikkoo jjee nnjjiihh ddeelljjiivvoo ssaa 22,,

    kkoolliikkoo ssaa 66,, aa kkoolliikkoo ssaa ssaa 44 ii 66..

    1144.. PPrreekkoo ttaassttaattuurree ssee zzaaddaajjuu bbrroojjeevvii PP,, QQ,, RR,, KK,, NN.. SSaassttaavviittii pprrooggrraamm kkoojjii pprroovveerraavvaa ddaa llii jjee

    bbrroojj PP vveeććii oodd aarriittmmeettiiččkkee ssrreeddiinnee oossttaalliihh bbrroojjeevvaa,, aakkoo jjeessttee iizzrraaččuunnaavvaa:: BB==33**QQ22 –– ((RR--PP))33,,

    aa uu ssuupprroottnnoomm

    BB==44**QQ22 –– ((RR--PP))33//KK**NN

    1155.. NNaappiiššii pprrooggrraamm kkoojjii iissppiissuujjee ddvvoocciiffrreennee bbrroojjeevvee ddeelljjiivvee ssaa 33 ii iizzrraaččuunnaavvaa nnjjiihhoovvuu

    aarriittmmeettiiččkkuu ssrreeddiinnuu ii pprrooiizzvvoodd..

    1166.. UUččiittaattii pprriirrooddaann bbrroojj nn,, aa zzaattiimm nn cceelliihh bbrroojjeevvaa.. IIssppiissaattii aarriittmmeettiiččkkuu ssrreeddiinnuu bbrroojjeevvaa vveeććiihh

    oodd zzaaddaattoogg bbrroojjaa NNNNbbrroojj ii ttee bbrroojjeevvee..

    09.02.2012 51/119

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 52

    Autor: Velja Milanovid msc. prof.

    1177.. SSaassttaavviittii pprrooggrraamm kkoojjiimm ssee zzaa zzaaddaattee rreeaallnnee bbrroojjeevvee xx,, yy,, zz iizzrraaččuunnaavvaa QQ ppoo ffoorrmmuullii:: 13 min( , , ), 0

    42*max( , , ), 0

    x y z y

    x y z y

    Q

    1188.. NNaappiissaattii pprrooggrraamm kkoojjii zzaa 44 pprriirrooddnnaa bbrroojjaa aa,, bb,, cc,, dd ooddrreeđđuujjee kkoolliikkoo jjee nnjjiihh ddeelljjiivvoo ssaa 33,,

    kkoolliikkoo ssaa 99,, aa zzaattiimm zzbbiirr nnjjiihhoovviihh zzbbiirroovvaa..

    1199.. NNaappiissaattii pprrooggrraamm kkoojjii zzaa uunneettii pprriirrooddaann bbrroojj nn nnaajjpprree iissppiittuujjee ddaa llii jjee ppaarraann iillii nneeppaarraann..

    UUkkoolliikkoo jjee nneeppaarraann iizzrraaččuunnaavvaa ssee ssuummaa oobblliikkaa SSnn==2233 ++ 4433 ++......++ ((nn--11))33,, aa uukkoolliikkoo jjee ppaarraann

    ssuummaa oobblliikkaa SSpp == 1133 ++3333 ++...... ++(( nn--11 ))33 ii ššttaammppaa ooddggoovvaarraajjuuććii rreezzuullttaatt..

    2200.. UUččiittaattii pprriirrooddaann bbrroojj nn,, aa zzaattiimm nn cceelliihh bbrroojjeevvaa.. IIssppiissaattii pprroocceennaatt bbrroojjeevvaa mmaannjjiihh oodd

    zzaaddaattoogg bbrroojjaa HHHHHH ii ttee bbrroojjeevvee..

    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.

    09.02.2012 52/119

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 53

    Autor: Velja Milanovid msc. prof.

    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

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 54

    Autor: Velja Milanovid msc. prof.

    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 b do

    09.02.2012 54/119

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 55

    Autor: Velja Milanovid msc. prof.

    begin

    c :=a*b;

    c :=c+a

    end;

    Kako de se izvršiti ova grupa naredbi.

    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

    A>b

    Zbir je

    A,b

    S=a+b

    k

    ne

    09.02.2012 55/119

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 56

    Autor: Velja Milanovid msc. prof.

    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 x5 do Begin writeln('unesi broj'); Readln(x) End; Writeln(’zbir=’,s:4); Readln End.

    p

    x

    S=0

    X5

    s

    x

    S=s+x

    k

    ne

    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

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 57

    Autor: Velja Milanovid msc. prof.

    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

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 58

    Autor: Velja Milanovid msc. prof.

    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

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 59

    Autor: Velja Milanovid msc. prof.

    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:

    09.02.2012 59/119

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 60

    Autor: Velja Milanovid msc. prof.

    i := 21 i:= 21; WHILE i < =20 DO REPEAT BEGIN write (i:4); write (i:4); i:=i + 5 i:=i + 5 UNTIL i > 20 END

    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; while k > 0 do k := k + 1;

    k := 1; repeat 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.

    09.02.2012 60/119

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 61

    Autor: Velja Milanovid msc. prof.

    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

    09.02.2012 61/119

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 62

    Autor: Velja Milanovid msc. prof.

    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.

    09.02.2012 62/119

  • Algoritmi i programiranje u PASCAL-u sa zbirkom rešenih zadatka - V. Milanovid 63

    Autor: Velja Milanovid msc. prof.

    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.

    09.02.2012 63/119