You are on page 1of 14

SEKVENCA I SELEKCIJA

IF I IF-ELSE

Naredba je osnovna jedinica obrade u programu. Naredbe se dele na deklarativne i izvršne


naredbe. Deklarativnim naredbama se definišu neki elementi programa (podaci, funkcije ...), a
izvršnim naredbama se izvode elementarne obrade. Strukture koje određuju redosled
izvršavanja izvršnih naredbi zovu se upravljačke strukture.
Upravljačke strukture mogu se podeliti u tri grupe:
 sekvenca,
 selekcija, i
 ciklusi ili petlje.

SEKVENCA: { }

Sekvenca se u C jeziku piše kao niz naredbi unutar zagrada { }

{
naredba_1;
naredba_2;
.
.
.
naredba_N;
}

Sadržaj sekvenci uvlači se za tabulator u odnosu na zagrade {}, i svaka naredba se radi
preglednosti piše u posebnom redu. Sekvenca u C jeziku, ispred prve izvršne naredbe može
sadržati i nekoliko deklarativnih naredbi, i tada sekvenca predstavlja blok (kao što je na primer
telo main funkcije).

Na primer:
Neka je data sekvenca:

{
x+=y;
y-=x;
x-=y;
}

Sekvenca se može napisati i kao niz izraza:


x+=y, y-=x, x-=y;

Preporučuje se da se niz naredbi koristi kada je u pitanju niz jako povezanih radnji, a da
se u svim ostalim slučajevima koriste sekvence.
SELEKCIJE

Selekcije su upravljačke strukture koje omogućavaju uslovno izvršavanje naredbi. U


programskom jeziku C postoje tri osnovne selekcije:
 if,
 if-else, i
 switch

Selekcija if
Opšti oblik selekcije if je:

if(uslov) naredba;

Ukoliko logički izraz uslov ima vrednost logičke istine izvršiće se naredba, a u suprotnom
se naredba neće izvršiti.
Ako je potrebno da se izvrši više naredbi ako je logički uslov zadovoljen tada treba
koristiti sekvencu.

if(uslov)
{
naredba_1;
naredba_2;
.
.
.
naredba_N;
}

U napisanoj upravljačkoj strukturi samo ako je uslov zadovoljen izvršavala bi se


sekvenca.
Mora se voditi računa da tačka zarez predstavlja praznu naredbu, te ako bi se tačka zarez
stavila posle zatvorene male zagrade od uslova, dobili bi smo da se sekvenca uvek izvršava bez
obzira kakav je uslov, tj ako je uslov zadovoljen izvršila bi se prazna naredba.

Selekcija if-else
Opšti oblik selekcije if-else je:

if(uslov) naredba_1;
else naredba_2;

Ukoliko logički izraz uslov ima vrednost logičke istine izvršiće se naredba_1, a u
suprotnom se izvršava naredba_2.

Primeri 1:
Napisati deo C programa koji izračunava zbir pozitivnih celobrojnih podataka među
promenljivama a,b,c,d, e i f.

Rešenje

s=0;
if(a>0) s+=a;
if(b>0) s+=b;
if(c>0) s+=c;
if(d>0) s+=d;
if(e>0) s+=e;
if(f>0) s+=f;

Zadatak. Napiši program kojim se određuje veći od dva uneta broja.

//komentar

#include <stdio.h>

main(){

int a,b,veci; //

printf("\n\tVECi: ");

printf("\n\tUnesi dva broja: ");

scanf("%d%d", &a,&b);

if(a>b) veci=a;

else veci=b;

printf("Veci broj je: %d",veci);

Pri izvršavanju ovog programa prikazuje se:

Unesi dva broja: 120 350

Veci broj je: 350

 Treći način korišćenja if

if operator se koristi i u sledećim oblicima:

x=3; y=1;

if (x>0)

if (y>0) x++;

else y++; /* ugnježdeni (nested) if */

else { x--;

y--;
} /* x=4, y=1 */
U C jeziku else odgovara prvom slobodnom if koje prethodi a ne sadrži else.

Ako želimo da promenimo to pravilo pridruživanja moramo koristiti velike zagrade Npr

x=3; y=1;

if (x>0){

if (y<0) x++;

else y++; /* x=3, y=1 */

Napisati deo C programa koji utvrđuje najveću vrednost između tri uneta broja x, y i z i
rezultat upisuje u promenljivu max.

Rešenje

prvi način:

if(x>y)
{
if(x>z) max=x;
else max = z;
}else{
if(y>z) max = y;
else max = z;
}

drugi način:

if(x>y&&x>z) max = x;
else {
if(y>z) max = y;
else max = z;
}

treći način:

max = x;
if(y>max) max = y;
if(z>max) max = z;

Domaći:
Napisati deo C programa koji na osnovu vrednosti celobrojne promenljive ugao (koji
može biti negativan, veći od 360 ili manji od -360), utvrđuje i ispisuje kvadrant u kome se ugao
nalazi. Ugao od 0 stepeni pripada prvom kvadrantu, ugao od 90 drugom, ugao od 180 stepeni
trećem, a ugao od 270 stepeni pripada četvrtom kvadrantu.
Koristiti isključivo naredbu if-else.

NAREDBA VIŠESTRUKOG GRANANJA


SWITCH

Naredba višestrukog grananja switch ima sleći opšti oblik:

switch(izraz)
{
case k_1: niz_ naredbi_1;
case k_2: niz_ naredbi_2;
.
.
.
case k_N: niz_naredbi_N;
default: niz_naredbi_0;
}

Konstante k_1, k_2,...,k_N su celobrojne konstante i međusobno su različite.


Izračunava se vrednost celobrojnog izraza izraz (sve promenljive u izrazu moraju biti
celobrojnog tipa) i poredi redom sa konstantama k_1, k_2, ...,k_N koje se nalaze posle
rezervisane reči case. Ako vrednost izraza nije jednaka ni sa jednom konstantom izvršavaće se
naredba_0. Ukoliko je vrednost izraza jednaka sa nekom konstantom k_i, i [1..N], program
će se izvršavati počev od niza_naredbi_i pa do kraja naredbe switch.
U naredbi switch ne mora se koristiti mogućnost default ako to za rešavanje problema nije
potrebno.
Najčešće se naredba switch koristi u kombinaciji sa naredbom break tako da ukoliko je
vrednost izraza jednaka sa nekom konstantom k_i izvršavaće se samo niz_naredbi_i i posle toga
će se iskočiti iz switcha (na prvu naredbu koja se nalazi posle naredbe switch). Sada se naredba
switch može predstaviti u sledećem obliku:

switch(izraz)
{
case k_1: niz_ naredbi_1;
break;
case k_2: niz_ naredbi_2;
break;
.
.
.
case k_N: niz_naredbi_N;
break;
default: niz_naredbi_0;
}

Zadatak 1

Napisati C program koji na osnovu unete godine i rednog broja meseca u godini ispisuje koliko taj mesec u toj
godini ima dana.

Rešenje:

/***************************************************************************
Opis: Demonstrira primenu naredbe visestrukog grananja switch.
Koristi module: -
Autori: Branko Markoski, Dejan Lacmanovic, Predrag Pecev
Datum poslednje promene:
***************************************************************************/

#include <stdio.h>

int main(void)
{
/* Definicija promenljivih. */
unsigned god,mesec;

/* Unos podataka. */
printf("\n UNESITE REDNI BROJ MESECA: ");
scanf("%d",&mesec);
printf(" UNESITE TEKUCU GODINU: ");
scanf("%d",&god);
printf("\n\n\n UNETI MESEC IMA ");

/* Kada se donosi odluka (bira se jedna od više mogućnosti) na osnovu promenljive


koja moze imati vise vrednosti, koristi se naredba za visestruko grananje switch. */

switch(mesec)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12: printf(" 31 DAN.");
break;
case 4: case 6: case 9: case 11: printf(" 30 DANA.");
break;
case 2: if(god%4==0) printf(" 29 DANA.");
else printf(" 28 DANA.");
}
return 0;

}
NAREDBE CIKLUSA
CIKLUSI (PETLJE)
WHILE NAREDBA

CIKLUSI (PETLJE)

Ciklusi su upravljačke strukture koje omogućavaju ponovljeno izvršavanje neke naredbe.


Po načinu zadavanja uslova koji treba da se ponavlja mogu da postoje:
 ciklusi koji traju dok je uslov ispunjen,
 ciklusi koji traju dok uslov nije ispunjen, i
 brojački ciklusi.
U programskom jeziku C postoje tri upravljačke strukture za realizaciju ciklusa: while,
do-while i for. Sve tri upravljačke strukture spadaju u cikluse koji traju dok je uslov ispunjen.
To je na neki način loša strana C jezika.

WHILE NAREDBA

Opšti oblik while ciklusa je: while(uslov) naredba;


Osobine while ciklusa:
 While ciklus se izvršava sve dok je uslov logička istina (različit od nule),
 Koristi se kada se nezna kojiko će se ciklus izvršavati,
 Uvek se prvo proverava da li je uslov logička istina, te ako jeste naredba se izvršava, i
 Može se desiti da se uslov ne izvrši nijednom (na početku uslov nije zadovoljen).

Primer 1:
Napisati C program koji omogućava unos šest celih brojeva i izračunava zbir pozitivnih
među njima. Zadatak rešiti bez korišćenja ciklusa.

Rešenje:

#include <stdio.h>

void main(void)
{
int a, b, c, d, e, f, s;

printf("\nUnesite 6 brojeva:\n\ta = ");


scanf("%d",&a);
printf("\tb = ");
scanf("%d",&b);
printf("\tc = ");
scanf("%d",&c);
printf("\td = ");
scanf("%d",&d);
printf("\te = ");
scanf("%d",&e);
printf("\tf = ");
scanf("%d",&f);

s=0;
if(a>0) s+=a;
if(b>0) s+=b;
if(c>0) s+=c;
if(d>0) s+=d;
if(e>0) s+=e;
if(f>0) s+=f;

if(s>0) printf("\n\nZbir pozitibnih brojeva je %d.",s);


else printf("\n\nNema pozitivnih brojeva!!");

Rešenje pokazuje da se vrši unos brojeva istoga tipa podatka, kao i da su selekcije iste
strukture. Sličan deo programskog koda (imaju istu strukturu) u programu se ponavlja šest puta.
Korišćenjem ciklusa program postaje manji i pregledniji, a eliminiše se ponavljanje istih
struktura.

Zadatak 2

Napisati C program koji utvrđuje koliko je brojeva sa intervala [1..n] (n N) deljivo sa brojem sedam.

Rešenje:

/***************************************************************************
Opis: Demonstrira primenu while ciklusa u C programu.
Koristi module: -
Autori: Branko Markoski, Dejan Lacmanovic, Predrag Pecev
Datum poslednje promene:
***************************************************************************/

#include <stdio.h>

int main(void)
{
/* Definicija promenljivih. */
unsigned n;
int br,i;
printf("\n\n\n\n\n\tUnesite gornju granicu intervala:\n\t\tN = ");
scanf("%d",&n);

/* Pomocu promenljive 'i' se prolazi kroz sve prirodne brojeve sa datog


intervala. Ovde smo mogli koristiti i for ciklus, ali tada se mora
utvrditi koliko ce se puta for ciklus izvrsavati. Koriscenje while ciklusa
je u slucajevima kada se ne zna koliko ce se puta ciklus izvrsiti i kada se
naredbe iz ciklusa ne moraju niti jednom izvrsiti.
Kada se vrsi brojanje, pre ciklusa se brojac obavezno postavlja na
nulu, a kada se pojava koja se prati i broji izvrsi vrednost brojaca
se poveca za jedan. */
br=0;
i=7;
while(i<=n)
{
br++;
i+=7;
}
if(br!=0)
printf("\n\n\tNa intervalu [1..%d] ukupno je %d broja deljivo sa sedam.",n,br);
else printf("\n\n\tNa intervalu [1..%d] nema brojeva koji su deljivi sa sedam.",n);
return 0;
}

DO-WHILE NAREDBA

Opšti oblik do-while naredbe je:

do{

naredba;

}while(uslov);

Osobine do-while naredbe:


 Koristi se kada se ne zna koliko će se puta ciklus ponavljati,
 Prvo se izvršava naredba koja čini sadržaj ciklusa, a posle toga se izračunava
vrednost logičkog izraza uslov, i ako se dobija logička istina naredba se ponovno izvršava.
 Ciklus se završava kada uslov dobija vrednost logičke neistine, i
 Ciklus se izvršava barem jednom.
Ciklus do-while se može posmatrati kao specijalni oblik while ciklusa.

do{ naredba;
naredba; = while(uslov) naredba;
}while(uslov);

Zadatak 3

Napisati C program koji računa i štampa najmanji zajednički sadržalac NZS(n,m) i najveći zajednički delilac
NZD(n,m), za brojeve n i m, pri čemu n N i m  N.

Rešenje:

/***************************************************************************
Opis: Demonstrira primenu while ciklusa u C programu.
Koristi module: -
Autori: Branko Markoski, Dejan Lacmanovic, Predrag Pecev
Datum poslednje promene:
***************************************************************************/
#include <stdio.h>
int main(void)
{
/* Definicija promenljivih. */
int n,m,nzs,nzd,i,j,k;
do{
printf("\n\tULAZNI PODACI:\n\t n = ");
scanf("%d",&n);
printf("\t m = ");
scanf("%d",&m);
}while(n<1||m<1);

/* Mora se utvrditi koji je od podataka manji, 'm' ili 'n'. Promenljiva 'i' dobija
vrednost veceg broja, a promenljiva 'j' dobija vrednost manjeg broja. */

if(m>=n)
{
i=m;
j=n;
}else{
i=n;
j=m;
}

while(j!=0)
{
k=i%j;
i=j;
j=k;
}
nzd=i;
nzs=(m*n)/nzd;

/* Stampanje rezultata rada programa. */


printf("\n\n\tIZLAZNI PODACI:\n\t NZS = %d\n\t NZD = %d",nzs,nzd);
return 0;
}

FOR NAREDBA

Opšti oblik for ciklusa je:


for(izraz1;uslov;izraz2) naredba;

izraz1 - Predstavlja pripremu za ulazak u ciklus. Zahvaljujući operatoru zarez


ta priprema može da obuhvati i više radnji
uslov - Logički izraz koji predstavlja uslov za nastavljanje ciklusa.
izraz2 - Obuhvata završne radnje na kraju svakog prolaska kroz ciklus, ili
pripremne radnje za prolazak kroz naredni ciklus.

For ciklus obuhvata sledeće radnje:


 Postavlja početne vrednosti promenljivih pre ulaska u ciklus,
 Proverava da li treba ulaziti u ciklus pre svakog prolaska kroz ciklus. Ako
uslov na samom početku (nakon postavljanja početnih vrednosti promenljivih sa izraz1) nije
zadovoljen ciklus se neće izvršiti, i
 Prilikom prolaska kroz ciklus vrši se menjanje jedne ili više
promenljivih.
For ciklus je specijalni oblik while ciklusa.

izraz1;
while(uslov)
{
for(izraz1;uslov;izraz2) naredba; = naredba;
izraz2;
}

Primer 1:
Napisati deo C program koji na osnovu unetog prirodnog broja n izračunava zbir prvih n
prirodnih brojeva.

Rešenje

Prvi način zapisa:

s=0;
i=1;
for( ;i<=n; )
{
s+=i;
i++;
}

Drugi način zapisa:

for(s=0,i=1;i<=n;s+=i,i++);

Treći način zapisa:

for(s=0,i=1;i<=n;i++) s+=i;

Obratiti pažnju na sva 3 načina

Najveća primena for ciklusa je u formiranju brojačkih ciklusa. Brojački cikllusi se


koriste kada je poznato koliko puta će se ciklus izvršiti. Kod brojačkih ciklusa postoji uvek
jedna kontrolna promenljiva čija se vrednost menja od neke početne pa do neke krajnje
vrednosti. Na kraju svakog prolaska kroz ciklus vrednost kontrolne promenljive se promeni za
neku stalnu vrednost, sve dok se ne stigne do krajnje vrednosti.

for(kontprom=pocvrednost;kontprom<=kranjavrednost;kontprom+=korak) naredba;

Najčešće se kontrolna promenljiva na početku postavlja na jedan, a korak za koji se


kontrolna promenljiva povećava jednaka je jedan.
Najčešći oblik for cilkusa kao brojačkog ciklusa je:

for(kontprom=1;kontprom<=krajnjavrednost;kontprom++) naredba;
Vrednost promenljive krajnjavrednost pokazuje nam koliko će se puta for ciklus
izvršiti. Ako je vrednost promenljive krajnjavrednost manja od 1 for ciklus se neće nijednom
izvršiti.

Primer 2: Za domaći
Napisati C program koji na osnovu unetog broja zvezdca n na ekranu štampa sliku
sledećeg izgleda:

*********
*********
*********
********* U ovom primeru je n=9, a n predstavlja broj redova
********* i broj zvezdica u jednom redu.
*********
*********
*********
*********

You might also like