37
OSNOV OSNOV I I PROGRAMIRANJA PROGRAMIRANJA ( V ) ( V ) NAREDBE U PROGRAMSKOM JEZIKU C NAREDBE U PROGRAMSKOM JEZIKU C mr Dražen Brđanin Elektrotehnički fakultet Banja Luka 2007.

OP - T05 - Naredbe u Programskom Jeziku C

Embed Size (px)

Citation preview

Page 1: OP - T05 - Naredbe u Programskom Jeziku C

OSNOVOSNOVI I PROGRAMIRANJAPROGRAMIRANJA( V )( V )

NAREDBE U PROGRAMSKOM JEZIKU CNAREDBE U PROGRAMSKOM JEZIKU C

mr Dražen BrđaninElektrotehnički fakultet Banja Luka

2007.

Page 2: OP - T05 - Naredbe u Programskom Jeziku C

2

55..11.. NaredbeNaredbe u u programskomprogramskom jezikujeziku CC

NAREDBE ?NAREDBE ?

NaredbeNaredbeC raspolaC raspolažže malim skupom naredbie malim skupom naredbi

Svaka naredba (iskaz) zavrSvaka naredba (iskaz) završšava sa ava sa ;; (terminator iskaza)(terminator iskaza)

Osnovne grupe naredbi:Osnovne grupe naredbi:naredbe grananja i izbora:naredbe grananja i izbora: if, switchif, switch

naredbe petlji:naredbe petlji: while, do while, forwhile, do while, for

naredbe za nasilnu promjenu toka:naredbe za nasilnu promjenu toka: break, continue, goto, returnbreak, continue, goto, return

Komponovana (sloKomponovana (složžena) naredbaena) naredbajednu ili vijednu ili višše naredbi grupie naredbi grupiššemo koriemo korišštenjem velikih zagrada tenjem velikih zagrada {}{}

opopššti oblik:ti oblik:{ {

iskaz1;iskaz1;iskaz2;iskaz2;

……iskazNiskazN;;

}}

Složena naredba izvršava se tako što se izvršavaju jedna po jedna prosta naredba (iskaz)

od kojih je sastavljena

Ekvivalentna je BLOKU naredbi u PASCALUBEGIN ... END

Page 3: OP - T05 - Naredbe u Programskom Jeziku C

3

55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora

ifif ??

Naredba Naredba ififOmoguOmoguććava realizaciju grananja u programu:ava realizaciju grananja u programu:

jednoblokovsko, dvoblokovsko, vijednoblokovsko, dvoblokovsko, viššeblokovskoeblokovsko

Jednoblokovsko grananjeJednoblokovsko grananje

iskaz

ISTINA LAŽuslov

if (uslov) iskaz;if (uslov) iskaz;

složeni iskaz

ISTINA LAŽuslov

if (uslov) if (uslov) { {

iskaziskaz11;;... ... iskazNiskazN;;

}}

Page 4: OP - T05 - Naredbe u Programskom Jeziku C

4

55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora

ifif ??

PrimjerProgram koji provjerava da li je učitani broj pozitivan.

broj

ISTINA LAŽ

POČETAK

"pozitivan"

KRAJ

broj>0

#include <stdio.h>#include <stdio.h>

main()main()

{{float float brojbroj;;

printf(printf( ””UnesiteUnesite brojbroj: : ”” ););

scanfscanf( ( ””%%ff””,, &&brojbroj ););

if ( if ( brojbroj>0 ) >0 )

printf(printf( ””BrojBroj jeje pozitivanpozitivan\\nn””,, ););

}}

Page 5: OP - T05 - Naredbe u Programskom Jeziku C

5

55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora

ifif ??

Dvoblokovsko grananjeDvoblokovsko grananje

if (uslov) if (uslov) iskaz1;iskaz1;

elseelseiskaz2;iskaz2;

if (uslov) if (uslov) { {

iskaziskaz11;;... ... iskazNiskazN;;

}}elseelse{ {

iskaziskaz11;;... ... iskazNiskazN;;

}}

ISTINA LAŽuslov

iskaz 1 iskaz 2

ISTINA LAŽuslov

složeni iskaz 1 složeni iskaz 2

Page 6: OP - T05 - Naredbe u Programskom Jeziku C

6

55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora

ifif ??

PrimjerProgram koji provjerava da li je učitani prirodni broj paran ili neparan.

#include <stdio.h>#include <stdio.h>main()main(){{

int int brojbroj, ost;, ost;printf(printf( ””UnesiteUnesite brojbroj: : ”” ););scanfscanf( ( ””%d%d””,, &&brojbroj ););if ( if ( brojbroj<=<=0 ) 0 )

printf(printf(””Nije prirodanNije prirodan\\nn””););elseelse{{

ost = broj % 2;ost = broj % 2;if (ost==0)if (ost==0)

printf(printf(””ParanParan\\nn””););elseelse

printf(printf(””NeparanNeparan\\nn””););}}

}}

ISTINA LAŽ

ISTINA LAŽ

POČETAK

broj

"GREŠKA"

"Paran" "Neparan"

KRAJ

ost = broj MOD 2

broj<=0

ost = 0

if (broj % 2 == 0)

Page 7: OP - T05 - Naredbe u Programskom Jeziku C

7

55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora

ifif ??

ViViššeblokovsko grananjeeblokovsko grananje

if (uslov1) if (uslov1) iskaz1;iskaz1;

else if (uslov2)else if (uslov2)iskaz2; iskaz2;

else if (uslov3)else if (uslov3)iskaz3; iskaz3;

... ...

else if (uslovN)else if (uslovN)iskazN;iskazN;

[[elseelseiskaz0;iskaz0;]]

Blok 1Uslov 1 ISTINA

LAŽ

Blok 2

Blok NUslov N ISTINA

LAŽ

Uslov 2 ISTINA

LAŽ

Blok 0

Page 8: OP - T05 - Naredbe u Programskom Jeziku C

8

55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora

ifif ??

PrimjerProgram koji za učitanu numeričkuocjenu ispisuje opisnu ocjenu.

#include <stdio.h>#include <stdio.h>main()main(){{

int int ocjenaocjena;;printf(printf( ””OcjenaOcjena? ? ”” ););scanfscanf( ( ””%d%d””,, &&ocjenaocjena ););if (if (ocjenaocjena====5) 5)

printf(printf(””OdlicanOdlican\\nn””););elseelse if (if (ocjenaocjena====4) 4)

printf(printf(””VrloVrlo dobardobar\\nn””););elseelse if (if (ocjenaocjena====3) 3)

printf(printf(””DobarDobar\\nn””););elseelse if (if (ocjenaocjena====2) 2)

printf(printf(””DovoljanDovoljan\\nn””););elseelse if (if (ocjenaocjena====1) 1)

printf(printf(””NedovoljanNedovoljan\\nn””););elseelse

printf(printf(””GRESKAGRESKA\\nn””););}}

POČETAK

ocjena=5

ocjena

ISTINA

"Odlican"

LAŽ

"GRESKA"

KRAJ

ISTINA

"Nedovoljan"

ocjena=4ISTINA

"Vrlo dobar"

LAŽ

ocjena=3ISTINA

"Dobar"

LAŽ

ocjena=2

ocjena=1

LAŽISTINA

"Dovoljan"

LAŽ

Page 9: OP - T05 - Naredbe u Programskom Jeziku C

9

55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora

switchswitch ??

Naredba Naredba switchswitch

OmoguOmoguććava realizaciju ava realizaciju selektivnogselektivnogviviššeblokovskog grananjaeblokovskog grananja

izraz

v1 v2 vn inače. . .

blok 1 blok 0blok 2 blok n

switch (izraz) switch (izraz) {{

case v1:case v1:iskaz1;iskaz1;......

iskazN;iskazN;case v2:case v2:

iskaz1;iskaz1;......

iskazN;iskazN;......

case case vNvN::iskaz1;iskaz1;......

iskazN;iskazN;[default:[default:

iskaz0;iskaz0;]]}}

Page 10: OP - T05 - Naredbe u Programskom Jeziku C

10

55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora

switchswitch ??

Naredba Naredba switchswitchswitch (izraz) switch (izraz) {{

case v1:case v1:iskaz1;iskaz1;......

iskazN;iskazN;case v2:case v2:

iskaz1;iskaz1;......

iskazN;iskazN;......

case case vNvN::iskaz1;iskaz1;......

iskazN;iskazN;[default:[default:

iskaz0;iskaz0;]]}}

selektorski izrazne može biti float ili double

Na početku se izračunava vrijednost izraza

Izračunata vrijednost pronalazi se među konstantama v1 .. vN

Ako se vrijednost pronađe, izvršavaju se svi iskazi od pronađenog case do kraja switch

Ako se vrijednost ne pronađe,prelazi se na iskaze iza default:

Ako se želi izlazak iz naredbe switch kad se završi odgovarajući case, treba koristiti

naredbu break

break;

break;

break;

Page 11: OP - T05 - Naredbe u Programskom Jeziku C

11

55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora

switchswitch ??

PrimjerProgram koji za učitanu numeričku ocjenu ispisuje opisnu ocjenukoristeći selektivno višeblokovsko grananje.

#include <stdio.h>#include <stdio.h>main()main(){{

int int ocjenaocjena;;printf(printf(””OcjenaOcjena? ? ””);); scanfscanf((””%d%d””,&,&ocjenaocjena););switch (ocjena)switch (ocjena){{

case 5:case 5:printf(printf(””OdlicanOdlican\\nn””);); break;break;

case 4:case 4:printf(printf(””VrloVrlo dobardobar\\nn””);); break;break;

case 3:case 3:printf(printf(””DobarDobar\\nn””);); break; break;

case 2:case 2:printf(printf(””DovoljanDovoljan\\nn””);); break; break;

case 1:case 1:printf(printf(””NedovoljanNedovoljan\\nn””);); break;break;

default:default:printf(printf(””GRESKAGRESKA\\nn””););

}}}}

Page 12: OP - T05 - Naredbe u Programskom Jeziku C

12

55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora

switchswitch ??

Primjer: Program koji simulira rad kalkulatora cjelobrojnih operacija#include <stdio.h>#include <stdio.h>main()main(){{

int x,y,rez;int x,y,rez;char op;char op;printf(printf(””Unesite izraz u obliku op1 operator op2: Unesite izraz u obliku op1 operator op2: \\nn””););scanfscanf((””%d %c %d%d %c %d””,&x,&op,&y),&x,&op,&y);;switch (op)switch (op){{

case case ’’++’’::rezrez==x+yx+y;; break;break;

case case ’’--’’::rezrez==xx--yy;; break;break;

case case ’’**’’::rezrez=x*y;=x*y; break;break;

case case ’’//’’::rezrez==x/yx/y;; break;break;

default:default:printf(printf(””NeNe poznajempoznajem tutu operaciju!operaciju!\\nn””););return (0);return (0);

}}printfprintf ((””%d %c %d = %d %c %d = %d%d””, , x,op,y,rezx,op,y,rez););

}}

Nasilni izlaz izprograma

Page 13: OP - T05 - Naredbe u Programskom Jeziku C

13

55.2..2. Naredbe grananja i izboraNaredbe grananja i izbora

ZADACI ZAZADACI ZA VJEVJEŽŽBBUU......

ZadaciZadaci::1. Napisati program koji učitava dva broja, a zatim ispisuje manji broj. 2. Napisati program koji učitava tri broja, a zatim ispisuje najmanjeg (najvećeg).3. Napisati program koji učitava prirodan broj manji od 100, a zatim ispisuje zbir njegovih

cifara. 4. Napisati program koji učitava prirodan broj manji od 1000, a zatim ispisuje zbir njegovih

cifara. 5. Učitati godinu, pa ispisati da li je ona prestupna ili nije.6. Napisati program koji za učitani redni broj dana u sedmici ispisuje njegov naziv

(ponedjeljak, utorak, ... , nedjelja). 7. Napisati program koji za učitani redni broj mjeseca u godini ispisuje naziv mjeseca

(januar, februar, ... , decembar). 8. Napisati program koji učitava redni broj mjeseca i godinu, a zatim ispisuje koliko ima

dana u tom mjesecu. U obzir uzeti da li je godina prestupna.

Page 14: OP - T05 - Naredbe u Programskom Jeziku C

14

55..33.. Naredbe nasilne promjene tokaNaredbe nasilne promjene toka

break break ??

Naredba Naredba breakbreakDejstvo:Dejstvo:

u naredbi u naredbi switchswitch::•• nasilni prekid izvrnasilni prekid izvrššavanja naredbe switchavanja naredbe switch

•• prelazak na prvi iskaz iza naredbe switchprelazak na prvi iskaz iza naredbe switch

u petljama:u petljama:•• nasilni prekid izvrnasilni prekid izvrššavanja petljeavanja petlje

•• prelazak na prvi iskaz iza petljeprelazak na prvi iskaz iza petlje

u ostalim sluu ostalim sluččajevima:ajevima:•• nema dejstvanema dejstva

Page 15: OP - T05 - Naredbe u Programskom Jeziku C

15

55..33.. Naredbe nasilne promjene tokaNaredbe nasilne promjene toka

return return ??

Naredba Naredba returnreturnDejstvo: izlazak iz funkcije Dejstvo: izlazak iz funkcije

•• prekida izvrprekida izvrššavanje date funkcije avanje date funkcije

(ignori(ignoriššu se svi iskazi iza return)u se svi iskazi iza return)

•• ako se nalazimo u main funkciji ako se nalazimo u main funkciji –– prekid programaprekid programa

OmoguOmoguććava da funkcija vrati neku vrijednostava da funkcija vrati neku vrijednostOpOpššti oblikti oblik

return (vrijednost);return (vrijednost);

iliili

return (izrazreturn (izraz););

Page 16: OP - T05 - Naredbe u Programskom Jeziku C

16

55..33.. Naredbe nasilne promjene tokaNaredbe nasilne promjene toka

goto goto ??

Naredba Naredba gotogotoOmoguOmoguććava bezuslovni skokava bezuslovni skok

OpOpššti oblikti oblik

goto labela;goto labela;

Labela (oznaka) neke naredbe u istoj funkciji

Primjer#include <stdio.h>#include <stdio.h>main()main(){{

int broj;int broj;lab1:lab1: printf(printf(””Unesite prirodan broj:Unesite prirodan broj: ””););scanfscanf((””%d%d””,&broj,&broj););if (broj<1)if (broj<1){ { printf(printf(””Nije prirodan!Nije prirodan!\\nn””); ); gotogoto krajkraj; }; }printfprintf ((””%d %s %d %s paranparan\\nn””, , brojbroj, (broj%2)? , (broj%2)? ””nijenije”” : : ””jeje””););gotogoto lab1;lab1;krajkraj: : printf(printf(””KRAJKRAJ......””););

}}

Bezuslovni skokna iskaz označen

sa lab1

Bezuslovni skokna iskaz označen

sa kraj

Page 17: OP - T05 - Naredbe u Programskom Jeziku C

17

55..44.. Naredbe petljiNaredbe petlji

while while ??

Naredba Naredba whilewhileOmoguOmoguććava realizaciju petlje sa izlazom na vrhuava realizaciju petlje sa izlazom na vrhu

while (izraz) while (izraz) { {

iskaziskaz11;;... ... iskazNiskazN;;

}}

uslov

ISTINA

tijelopetlje

LAŽ while (izraz) while (izraz) iskaz;iskaz;

OpOpššti oblikti oblik

Ciklus Ciklus ćće se izvre se izvrššavati sve avati sve dok je uslov ispunjen dok je uslov ispunjen

(ne mora ni jedamput)(ne mora ni jedamput)

iliili

Sve dok je izraz ISTINIT (!=0) izvrSve dok je izraz ISTINIT (!=0) izvrššava se ava se (slo(složžena) naredbaena) naredba

Kad izraz postane LAKad izraz postane LAŽŽ (==0) prekida se (==0) prekida se izvrizvrššavanje petljeavanje petlje

Page 18: OP - T05 - Naredbe u Programskom Jeziku C

18

55..44.. Naredbe petljiNaredbe petlji

while while ??

Primjer: Program koji N puta ispisuje riječ "ALGORITAM“.

POČETAK

KRAJ

n

b = 1

b <=n

"ALGORITAM"

ISTINA

LAŽ

b = b + 1

#include <stdio.h>#include <stdio.h>main()main(){{

int n, b=1;int n, b=1;printf(printf(””UnesiteUnesite NN: : ””););scanfscanf((””%d%d””,&n,&n););while ( b<=n )while ( b<=n ){{

printf(printf(””AlgoritamAlgoritam\\nn””););b++;b++;

}}}}

Page 19: OP - T05 - Naredbe u Programskom Jeziku C

19

55..44.. Naredbe petljiNaredbe petlji

while while ??

Primjer: Program koji N puta ispisuje riječ "ALGORITAM".(bez korištenja pomoćnog brojača)

POČETAK

KRAJ

n

n

"ALGORITAM"

ISTINA

LAŽ

n--

#include <stdio.h>#include <stdio.h>main()main(){{

int n;int n;printf(printf(””UnesiteUnesite NN: : ””);); scanfscanf((””%d%d””,&n,&n););while (n)while (n){{

printf(printf(””ALGORITAMALGORITAM\\nn””););nn----;;

}}}}

#include <stdio.h>main(){

int n;printf(”Unesite N: ”); scanf(”%d”,&n);while (n--) printf(”ALGORITAM\n”);

}

Page 20: OP - T05 - Naredbe u Programskom Jeziku C

20

55..44.. Naredbe petljiNaredbe petlji

while while ??

Primjer: Program koji učitava n, a zatim izračunava i ispisuje n!

#include <stdio.h>#include <stdio.h>

main()main()

{{

int n, f=1;int n, f=1;

printf(printf(””UnesiteUnesite NN: : ””););

scanfscanf((””%d%d””,&n,&n););

printf(printf(””%d!=%d!=””,n,n););

while (n)while (n)

f *= nf *= n----;;

printf(printf(””%d%d””,f,f););

}}

POČETAK

KRAJ

n

f = 1

n

f

ISTINA

LAŽ

f = f * n

n = n -1

Page 21: OP - T05 - Naredbe u Programskom Jeziku C

21

55..44.. Naredbe petljiNaredbe petlji

while while ??

Primjer: Program koji učitava prirodan broj, a zatim ispisuje zbir njegovih cifara.

#include <stdio.h>#include <stdio.h>main()main(){{

int b, s=0;int b, s=0;printf(printf(””UnesiteUnesite brojbroj: : ””););scanfscanf((””%d%d””,&b,&b););if (b<1)if (b<1)

printf(printf(””Nije prirodan!Nije prirodan!””););elseelse{{

while (b)while (b){{

s += b % 10;s += b % 10;b /= 10;b /= 10;

}}printf(printf(””Zbir cifara je:%dZbir cifara je:%d””,s,s););

}}}}

POČETAK

b

KRAJ

"Nijeprirodan"

b < 1ISTINA LAŽ

s = 0

b > 0LAŽ

ISTINA

c = b MOD 10

s = s + c

b = b DIV 10

s

KRAJ

Page 22: OP - T05 - Naredbe u Programskom Jeziku C

22

55..44.. Naredbe petljiNaredbe petlji

while while ??

Primjer: Program koji učitava prirodan broj, a zatim ispisuje da li je on prost ili nije.

#include <stdio.h>#include <stdio.h>#include <#include <mathmath.h>.h>main()main(){{

int b, p, d=int b, p, d=11;;printf(printf(””UnesiteUnesite brojbroj: : ””););scanfscanf((””%d%d””,&b,&b););if (b<1)if (b<1)

printf(printf(””Nije prirodan!Nije prirodan!””););elseelse{{

p = p = ((bb ==== 22)) | (b % 2);| (b % 2);while (while (p && (d+=2p && (d+=2))<=<=sqrt(bsqrt(b))))

pp = b % = b % dd;;printf(printf(””%%dd %s prost%s prost””,, b, p ? b, p ? ””jeje””::””nijenije””););

}}}}

POČETAK

b

KRAJ

"Nijeprirodan"

b < 1ISTINA LAŽ

p = (b==2) ∨ (b%2)

LAŽ

ISTINA

p = b%d != 0

d = 3

KRAJ

p && d < b

d = d + 2

LAŽISTINAp

“NIJE"“JESTE"

Page 23: OP - T05 - Naredbe u Programskom Jeziku C

23

55..44.. Naredbe petljiNaredbe petlji

do ... do ... while while ??

Naredba Naredba do...wdo...whilehileOmoguOmoguććava realizaciju petlje sa izlazom na dnuava realizaciju petlje sa izlazom na dnu

dodo{ {

iskaziskaz11;;... ... iskazNiskazN;;

} } while (izraz); while (izraz);

dodoiskaz;iskaz;

while (izraz); while (izraz);

OpOpššti oblikti oblik

iliiliISTINA

uslov

tijelopetlje

LAŽ

1. Izvr1. Izvrššavaju se iskazi iza avaju se iskazi iza dodo2. Ra2. Raččuna se vrijednost izrazauna se vrijednost izraza3. Ako je izraz ISTINIT (!=0) idi na korak 13. Ako je izraz ISTINIT (!=0) idi na korak 14. Ako je izraz LA4. Ako je izraz LAŽŽ (==0) prekida se izvr(==0) prekida se izvrššavanje avanje

petlje i prelazi na sljedepetlje i prelazi na sljedećći iskaz iza i iskaz iza whilewhile

Page 24: OP - T05 - Naredbe u Programskom Jeziku C

24

55..44.. Naredbe petljiNaredbe petlji

do ... do ... while while ??

Primjer: Program koji N puta ispisuje riječ "ALGORITAM“.

#include <stdio.h>#include <stdio.h>main()main(){{

int n, b=1;int n, b=1;dodo{{

printf(printf(””UnesiteUnesite NN: : ””););scanfscanf((””%d%d””,&n,&n););

}}while (while (n<1n<1));;dodo{{

printf(printf(””AlgoritamAlgoritam\\nn””););b++;b++;

}}while (b<=n);while (b<=n);

}}

POČETAK

N

b = 1

"ALGORITAM"

b = b + 1

ISTINA N < 1

LAŽ

ISTINAb<=N

KRAJ

LAŽ

#include <stdio.h>main(){

int n, b=1;

do{

printf(”Unesite N: ”);scanf(”%d”,&n);

}while (n<1);

doprintf(”Algoritam\n”);

while ( ++b <= n );}

Page 25: OP - T05 - Naredbe u Programskom Jeziku C

25

55..44.. Naredbe petljiNaredbe petlji

do ... do ... while while ??

Primjer: Euklidovim algoritmom odrediti NZD dva prirodna broja.

#include <stdio.h>#include <stdio.h>main()main(){{

int int x,y,p,ostx,y,p,ost;;dodo{{

printf(printf(””UnesiteUnesite X i Y:X i Y:””););scanfscanf((””%d%d %d%d””,&,&x,&yx,&y););

}}while (while (x<1 || y<1x<1 || y<1));;if (x<y) if (x<y) { p=x; x=y; y=p; }{ p=x; x=y; y=p; }dodo{ {

ostost = = x%yx%y;;x = y;x = y;y = y = ostost;;

}}while (y);while (y);

}}

POČETAK

X , Y

ISTINA

LAŽ

X<1 v Y<1

P=XX=YY=P

ISTINA LAŽX < Y

T

Y > 0

KRAJ

ISTINA

X = Y

Y = ost

ost=X MOD Y

X

T

LAŽ

Page 26: OP - T05 - Naredbe u Programskom Jeziku C

26

55..44.. Naredbe petljiNaredbe petlji

do ... do ... while while ??

Primjer: Podijeliti dva prirodna broja na proizvoljan broj decimala.(koristeći pravilo za ručno dijeljenje)

#include <stdio.h>#include <stdio.h>main()main(){{

int int x,yx,y,,bd;bd;dodo{{ printf(printf(””UnesiteUnesite X i Y:X i Y:””);); scanfscanf((””%d%d %d%d””,&,&x,&yx,&y);); }}while (while (x<1 || y<1x<1 || y<1));;dodo{{ printf(printf(””Broj decimalaBroj decimala::””);); scanfscanf((””%d%d””,&bd,&bd);); }}while (bdwhile (bd<1<1)); ; printf(printf(””%d:%d=%d.%d:%d=%d.””, x, y, x/y);, x, y, x/y);dodo{ {

xx = = x%yx%y * 10* 10;;printf(printf(””%d%d””, x/y);, x/y);

}}while (while (----bdbd););

}}

Page 27: OP - T05 - Naredbe u Programskom Jeziku C

27

55..44.. Naredbe petljiNaredbe petlji

do ... do ... while while ??

Primjer: Program koji računa drugi korijen iz pozitivnog realnog brojaX na četiri decimale koristeći Njutnovu iterativnu formulu.

...2 ,1 ,0 ,2

,2

110 =

+=

+= + nx

XxxXx n

n

n

POČETAK

X

ISTINA

LAŽ

X < 0

eps = 0.0001

xN = (X+1) / 2

xS = xN

xN = (xS + X/ xS) / 2

|xN - xS | > epsISTINA

KRAJ

LAŽ

xN

#include <stdio.h>#include <stdio.h>#include <#include <math.hmath.h>>#define EPS 0.0001#define EPS 0.0001main()main(){{

floatfloat x,xs,xnx,xs,xn;;dodo{ { printf(printf(””X=X=””);); scanfscanf((””%%ff””,&,&x);}x);}while (while (x<0x<0));;xnxn = (x+1)/2; = (x+1)/2; dodo{ { xsxs = = xnxn; ; xnxn = (= (xsxs + + x/xsx/xs) / 2;}) / 2;}while (while (fabs(xnfabs(xn--xsxs)>EPS);)>EPS);printf(printf(””KorijenKorijen jeje: %8.4f: %8.4f””,xn);,xn);

}}

Page 28: OP - T05 - Naredbe u Programskom Jeziku C

28

55..44.. Naredbe petljiNaredbe petlji

for for ??

Naredba Naredba forfor

for (poc_izraz; uslov; izraz_petlje)for (poc_izraz; uslov; izraz_petlje){ {

iskaziskaz11;;... ... iskazNiskazN;;

}}

for (poc_izraz; uslov; izraz_petlje) for (poc_izraz; uslov; izraz_petlje) iskaz;iskaz;

OpOpššti oblikti oblik

iliiliuslov petlje

ISTINA

tijelopetlje

LAŽ

početniizraz

izraz petlje Ekvivalentno sljedeEkvivalentno sljedeććoj oj whilewhile petlji:petlji:

pocetni_izraz;pocetni_izraz;while (uslov)while (uslov){ {

iskaziskaz; ; izraz_petljeizraz_petlje;;}}

Page 29: OP - T05 - Naredbe u Programskom Jeziku C

29

55..44.. Naredbe petljiNaredbe petlji

forfor ??

Primjer: Program koji N puta ispisuje riječ "ALGORITAM“.

#include <stdio.h>#include <stdio.h>main()main(){{

int n, int n, ii;;

printf(printf(””UnesiteUnesite NN: : ””);); scanfscanf((””%d%d””,&n,&n););

for (i=1 ; i<=n ; i++)for (i=1 ; i<=n ; i++)printf(printf(””AlgoritamAlgoritam\\nn””););

}}

POČETAK

KRAJ

i = 1, N

"ALGORITAM"

N

#include <stdio.h>main(){

int n;

printf(”Unesite N: ”); scanf(”%d”,&n);

for ( ; n ; n--)printf(”Algoritam\n”);

}

Početni izraz nepotreban, pa je izostavljen.

Uslov petlje (n), odnosno (n>0)

Page 30: OP - T05 - Naredbe u Programskom Jeziku C

30

55..44.. Naredbe petljiNaredbe petlji

forfor ??

Primjer: Program koji ispisuje cijele brojeve iz intervala <A,B>.

#include <stdio.h>#include <stdio.h>main()main(){{

int a, b, broj;int a, b, broj;

printf(printf(””UnesiteUnesite granice intervalagranice intervala: : ””););scanfscanf((””%d %d%d %d””,&a, &b,&a, &b););

for (for ( brojbroj==a+a+1 ; 1 ; brojbroj<=<=bb--11 ; ; brojbroj++++ ))printf(printf(”” %d%d””, broj, broj););

}}

#include <stdio.h>main(){

int a, b, broj;

printf(”Unesite granice intervala: ”);scanf(”%d %d”,&a, &b);

for ( broj=a+1 ; broj<=b-1 ; )printf(” %d”, broj++);

}

POČETAK

KRAJ

broj = A+1, B-1

broj

A , B

izraz petlje izostavljen ali je implementiran u sljedećem

iskazu!!!printf(” %d”, broj++);

Page 31: OP - T05 - Naredbe u Programskom Jeziku C

31

55..44.. Naredbe petljiNaredbe petlji

forfor ??

Primjer: Program koji računa n!

#include <stdio.h>#include <stdio.h>main()main(){{

int n, bint n, b, p, p;;dodo{{ printf(printf(””n=n=””);); scanfscanf((””%d%d””,&,&n); }n); }while (n<0);while (n<0);for (for ( p=1, p=1, bb=2 ; =2 ; bb<=n ; <=n ; bb++++ ) )

p=p*b;p=p*b;printf(printf(””%d%d!=%d!=%d””, , n, p);n, p);

}}

POČETAK

KRAJ

P = 1

P

b = 2, N

P = P * b

N

ISTINA N < 0

LAŽ

#include <stdio.h>main(){

int n, p;do{ printf(”n=”); scanf(”%d”,&n); }while (n<0);for ( p=1 ; n ; p*=n-- ); printf(”%d”, p);

}

dva početna izrazameđusobno odvojeni zapetom

Page 32: OP - T05 - Naredbe u Programskom Jeziku C

32

55..44.. Naredbe petljiNaredbe petlji

forfor ??

Primjer: Učitati prirodan broj, pa provjeritida li je on savršen.

KRAJ

LAŽ

“NIJE"

ISTINA

“JESTE"

broj = S

POČETAK

broj

D = 2, broj/2

ost = broj % D

"Nijeprirodan"

broj < 1ISTINA LAŽ

ost = 0

ISTINA

LAŽ

S = 1

S = S + D

KRAJ

#include <stdio.h>#include <stdio.h>main()main(){{

int broj, d, s;int broj, d, s;printf(printf(””Unesite prirodan broj:Unesite prirodan broj:””););scanfscanf((””%d%d””,&broj,&broj); ); if if ((brojbroj<<11))

printf(printf(””Nije prirodan!Nije prirodan!””););elseelse{{

for (for ( s=1, d=2 ; d<=broj/2 ; d++s=1, d=2 ; d<=broj/2 ; d++ ) ) s += (s += (broj%dbroj%d) ? 0 : d;) ? 0 : d;

printf(printf(””%d%d %s %s savrsensavrsen””, , brojbroj, , ((brojbroj==s) ? ==s) ? ””jeje”” : : ””nijenije”” ););

}}}}

Page 33: OP - T05 - Naredbe u Programskom Jeziku C

33

55..44.. Naredbe petljiNaredbe petlji

forfor ??

Primjer: Ispisati sve savršene prirodnebrojeve manje od 1000.

LAŽISTINA

broj

broj = S

KRAJ

POČETAK

broj = 1, 999

D = 2, broj/2

ost = broj MOD D

ost = 0

ISTINA

LAŽ

S = 1

S = S + D

#include <stdio.h>#include <stdio.h>main()main(){{

int broj, d, s;int broj, d, s;

for (for ( broj=1broj=1 ; ; brojbroj<1000<1000 ; ; brojbroj++++ ))

{ { for (for ( s=1, d=2 ; d<=broj/2 ; d++s=1, d=2 ; d<=broj/2 ; d++ ) )

s += (s += (broj%dbroj%d) ? 0 : d;) ? 0 : d;

if (broj==s) if (broj==s) printf(printf(”” %d%d””, , brojbroj));;

}}}}

Page 34: OP - T05 - Naredbe u Programskom Jeziku C

34

55..44.. Naredbe petljiNaredbe petlji

forfor ??

Primjer: Program koji ispisuje prvih n redova sljedećeg trougla:

***************...

#include <stdio.h>#include <stdio.h>main()main(){{

int n, red, broj;int n, red, broj;

do{ printf(”n=? ”); scanf(”%d”,&n); }while (n<1 || n>20);

for (for ( red=1red=1 ; ; red<=nred<=n ; ; redred++++ )){ {

for (for ( brojbroj==11 ; ; brojbroj<=red<=red ; ; brojbroj++++ ) ) printf(printf(””**””););

printf(printf(””\\nn””));;

}}}}

Page 35: OP - T05 - Naredbe u Programskom Jeziku C

35

55..44.. Naredbe petljiNaredbe petlji

forfor ??

Primjer: Program koji ispisuje prvih n redova sljedećeg trougla:

1121231234...123456789123456789012345678901...

#include <stdio.h>#include <stdio.h>main()main(){{

int n, red, broj;int n, red, broj;

do{ printf(”n=? ”); scanf(”%d”,&n); }while (n<1 || n>20);

for (for ( red=1red=1 ; ; red<=nred<=n ; ; redred++++ )){ {

for (for ( brojbroj==11 ; ; brojbroj<=red<=red ; ; brojbroj++++ ) )

printf(printf(””**””););

printf(printf(””\\nn””));;

}}}}

printf(”%d”, broj%10);

Page 36: OP - T05 - Naredbe u Programskom Jeziku C

36

55..44.. Naredbe petljiNaredbe petlji

forfor ??

Primjer: Program koji ispisuje prvih n redova sljedeće piramide cifara:1

23234543

4567654...

89012345432109890123456765432109

.

.

.

#include <stdio.h>#include <stdio.h>main()main(){{

int n, red, broj;int n, red, broj;

do{ printf(”n=”); scanf(”%d”,&n); }while (n<1 || n>20);

for (for ( red=1red=1 ; ; red<=nred<=n ; ; redred++++ )){ {

for (for ( brojbroj==11 ; ; brojbroj<=<=nn--redred ; ; brojbroj++++ ) ) printf(printf(”” ””));;

for (for ( brojbroj=red ; =red ; brojbroj<=<=2*2*redred--1 ; 1 ; brojbroj++++ ) ) printf(printf(””%d%d””, broj%10), broj%10);;

for (for ( brojbroj=2*red=2*red--2 ; 2 ; brojbroj>=>=redred ; ; brojbroj---- ) ) printf(printf(””%d%d””, broj%10), broj%10);;

printf(printf(””\\nn””));;}}

}}

Page 37: OP - T05 - Naredbe u Programskom Jeziku C

37

55..44.. Naredbe petljiNaredbe petlji

ZADACI ZAZADACI ZA VJEVJEŽŽBBUU......

ZadaciZadaci::1. Napisati program koji koji učitava prirodan broj, a zatim ispisuje sve parne brojeve

manje od njega. Zadatak riješiti korištenjem a) for petlje; b) while petlje; c) do…while petlje.

2. Napisati program koji tabelarno ispisuje vrijednosti funkcije f(x)=2x+3, za vrijednostiargumenta x∈[A,B], s korakom Δx. Zadatak riješiti korištenjem a) for petlje; b) while petlje; c) do…while petlje.

3. Učitati n brojeva, a zatim ispisati koliko među njima ima pozitivnih, kao i njihovuaritmetičku sredinu.

4. Učitati n brojeva, a zatim ispisati najvećeg. 5. Učitati n brojeva, a zatim ispisati najmanjeg, kao i njegov redni broj. 6. Ispisati sve dvocifrene proste brojeve. 7. Ispisati prvih n prostih brojeva.8. Ispisati prvih n savršenih brojeva.9. Učitati broj pa provjeriti da li je Armstrongov. Broj je Armstrongov ako je jednak zbiru

kubova svojih cifara. 10. Učitati dva prirodna broja pa provjeriti da li oni predstavljaju par prijateljskih brojeva.

Za dva broja kažemo da su prijateljski ako je prvi jednak zbiru djelilaca drugog, a drugi jednak zbiru djelilaca prvog broja.