You are on page 1of 13

Vrste upravljakih struktura

U teoriji programiranja definisana su tri osnovna tipa programskih struktura:

sekvenca,

selekcija (ili grananje),

iteracija (ili petlja).

Bilo koji algoritamski reiv problem mogue je predstaviti korienjem osnovnih


programskih struktura!!!

Sekvenca
Sekvenca je upravljaka struktura kod koje se linije koda koje je ine izvravaju
redom jedna za drugom po redosledu u kome se nalaze u bloku.U programskom
jeziku C# sekvenca se implementira korienjem bloka u kome se nalazi jedna ili
vie linija koda.
Primer: Upravljaka struktura Sekvenca
{

linija_koda_1

linija_koda_2

...

linija_koda_n

Na poetku bloka mogu da budu navedeni opisi promenljivih i konstanti koje su


lokalne za blok.

double x, y, z;

int i;

x=x+1;

y=4+x;

z=y-x;
i = 5;

Selekcija
U praksi je mnogo ei sluaj da se obrada ulaznih podataka znaajno razlikuje
zavisno od njihovih vrednosti. Selekcija ili grananje je upravljaka struktura koja
prua mogunost izbora zavisno od nekog uslova. U sluaju da je uslov zadovoljen
izvrava se jedan skup linija koda tj jedan blok odnosno ako uslov nije zadovoljen
onda se izvrava drugi skup linija koda tj drugi blok.

Selekcija ili grananje se u C# realizuju naredbama:

if

switch

Ekvivalentan kod u C#-u je:

if (izraz)

Naredba1

else

Naredba2

Primer: if naredba - osnovni oblik

Deo koda kojim se odredjuje vei od dva broja predstavljena promenljivama


x i y i dodeljuje trecoj promenljivi veciBroj je:

if ( x > y )

veciBroj = x;

else

vecibroj = y;

Primer: if naredba - "skraeni oblik"

Deo koda kojim se odredjuje apsolutna vrednost promenljive x i dodeljuje


promenljivoj absx je:
absx = x;
if ( x < 0 )

absx = -x;

Isti efekat bi postigli i korienjem if naredbe sa else granom :

if ( x < 0 )

absx = -x;

else

absx = x;

Primer: viestruka if naredba

Kod kojim se odredjuje najvei od 3 broja predstavljena promenljivama x, y i z i


upisuje u promenljivu najveciBroj je:

if ( x > y)

if ( x > z )

najveciBroj = x;

else

najveciBroj = z;

else

if ( y > z )

najveciBroj = y;

else

najveciBroj = z;
}

Postoje situacije gde su viestruka grananja takva da se izbor jedne od vie moguih
alternativa vri na osnovu neke vrednosti (vrednost neke promenjive ili pak izraza).

switch ( izraz )

case vrednost1: B1; break;

case vrednost2: B2; break;

...

case vrednostN: BN; break;

default: B; break;

B1, B2, ..., BN i B su ili jednostavne naredbe ili neke upravljake strukture ili blokovi.

U nekim sluajevima ako izraz ne uzima ni jednu vrednost iz skupa vrednosti


vrednost1, vrednost2, ..., vrednostN onda nije potrebno izvriti nikakvu naredbu u
tom sluaju e se koristiti switch naredba bez default case sluaja tj imae oblik

switch ( izraz )

case vrednost1: B1; break;

case vrednost2: B2; break;

...

case vrednostN: BN; break;

}
Primer: switch sa break

switch( tekuci )
{
case 1: Text+=januar\n; break;
case 2: Text+=februar\n; break;
case 3: Text+=mart\n; break;
case 4: Text+=april\n; break;
case 5: Text+=maj\n; break;
case 6: Text+=jun\n; break;
case 7: Text+=jul\n; break;
case 8: Text+=avgust\n; break;
case 9: Text+=septembar\n; break;
case 10: Text+=oktobar\n; break;
case 11: Text+=novembar\n; break;
case 12: Text+=decembar;
}

Iz prethodnih primera se moe videti kako se viestruko grananje moe realizovati


pomou switch naredbe. Medjutim moe se uoiti da broj case linija moe biti
veoma velik. U nekim sluajevima viestrukog grananja istu obradu treba izvriti za
vie razliitih vrednosti selektorskog izraza .

Primer: switch - vie istih case

Kod koji u promenljivu brojDana upisuje broj dana tekueg meseca odnosno 0 ako
tekui mesec nije korektno unet je:

switch( tekuci )
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
brojDana = 31; break;
case 2:
brojDana = 28; break;
case 4: case 6: case 9: case 11:
brojDana = 30; break;
default:
brojDana = 0; break;
}
Iteracija
Veoma esto se ukazuje potreba za ponavljanjem nekih naredbi vie puta tj. za
ponavljanjem nekog postupka u vie iteracija. Iteracije se realizuju upotrebom
upravljakih struktura koje se nazivaju petlje. Postoji vie vrsta petlji i one se mogu
klasifikovati po vie kriterijuma. Ako je kriterijum broj izvravanja tela petlje onda
postoje dve vrste petlji:
a) petlje sa konstantnim brojem prolaza (brojaka petlja),
b) petlje sa promenljivim brojem prolaza.
U programskom jeziku C# postoje dve vrste programskih petlji:

petlje sa konstantnim brojem prolaza (unapred se zna koliko puta e se


izvriti telo petlje)

1. for - petlja,

2. foreach - petlja.

petlje sa promenljivim brojem prolaza (broj izvrenja tela petlje se odredjuje u


fazi izvrenja programa i zavisi od vrednosti za petlju relevantnih elemenata
kao to su promenljive, elementi polja itd. )

1. while - petlja,

2. do-while - petlja.

for - petlja
for - petlja je petlja sa konstantnim brojem prolaza i naziva se jo i brojaka petlja.
Opti oblik for petlje u programskom jeziku C# je:
for (<izraz1>; <izraz2>; <izraz3>)
<telo petlje>
gde:
<izraz1> - vri inicijalizaciju promenljivih koje se koriste u petlji
<izraz2> - predstavlja uslov na osnovu koga se odluuje da li e se telo petlje jo
izvravati ili se izvravanje petlje prekida
<izraz3> definie promenu vrednosti promenljivih koje se koriste u petlji.
Navedena promena se vri nakon svake iteracije
<telo petlje> telo petlje predstavlja jedna naredba, struktura ili blok.

foreach - petlja
Opti oblik foreach petlje je:

foreach (tip promenljiva in izraz)

telo petlje

Primer
Neka je zadat celobrojni niz nekiNiz definisan kao:

int [ ] nekiNiz = {1, 5, 2, 7, 3};

Sledeom foreach petljom se prolazi kroz sve elemente niza nekiNiz i oni se
prikazuju na standardnom izlazu

foreach (int indeks in nekiNiz)


{

System.Console.WriteLine( element niza je = + indeks);


}

Rezultat rada ove petlje je prikaz elemenata niza nekiNiz tj

element niza je = 1

element niza je = 5

element niza je = 2

element niza je = 7

element niza je = 3

while - petlja
while petlja ima opti oblik

while (<uslov>)

<telo petlje>

<uslov> - predstavlja logiki izraz koji moe biti taan ili netaan. Ako je uslov
zadovoljen onda se izvrava telo petlje. Nakon izvrenja poslednje naredbe u telu
petlje opet se proverava uslov. while petlja se zavrava onog trenutka kada uslov
vie nije zadovoljen. To znai da uslov tj logiki izraz sadri elemente koji se menjaju
u telu petlje. Na ovaj nain se obezbedjuje da ne dodejmo u situaciju da je petlje
beskonana tj da se nikad ne izlazi iz petlje.

Primer

Sabiranje celih brojeva u intervalu od N do M mogue je obaviti i while petljom

int i = N;
int suma = N;
while ( i <= M)
{
suma = suma + i;
i++;
}

do while - petlja
do while petlja ima opti oblik

do

<telo petlje>

while (<uslov>)

<uslov> - predstavlja logiki izraz koji moe biti taan ili netaan. Ova petlja
funkcionie tako to se izvrava telo petlje a zatim se proverava uslov. Ako je uslov
ispunjen onda se opet izvrava telo petlje. U suprotnom se zavrava petlja.

Primer

Sabiranje celh brojeva u intervalu od N do M mogue je obaviti i petljom tipa do


while na sledei nain:

int i = N;
int suma = 0;
do
{
suma = suma + i;
i++;

}
while (i <= M)

Naredbe skoka
Podrazumeva se da e se tela petlji izvravati kompletno onoliko puta koliko je to
zadato poetnim uslovima i ostalim karakteristikama petlje. Medjutim, u nekim
situacijama e se eleti da se delovi tela petlje preskoe tj. da se ne izvravaju i
da se nastavi sa sledeom iteracijom. Da bi se izmenio normalan tok izvravanja
neke upravljake strukturei mogu se koristiti sledee naredbe:

goto

break

continue

goto naredba
goto naredba se jo zove i naredbom bezuslovnog skoka. Ona omoguuje bezuslovni
skok na neku labelu koja je definisana u programu. Labela se u programu dobija
tako to se iza nekog identifikatora stavlja dvotaka npr. ovoJeLabela:

Naredba goto se koristi na sledei nain

goto labela;

tj u naem primeru

goto ovoJeLabela;

U sledeem primeru e biti ilustrovano korienje naredbe goto.

Primer
public static void Main()
{
int ukupno = 0;
int indeks = 0;

ovoJeLabela:
indeks ++;
ukupno += indeks;
System.Console.WriteLine("indeks = " + indeks);
if (indeks < 5)
{
System.Console.WriteLine("goto ovoJeLabela");
goto ovoJeLabela;
}

System.Console.WriteLine("ukupno = " + ukupno);


}
Napomena

Naredba goto se koristi samo u retkim situacijama i po pravilu je odraz loe


projektovanog softvera te je kao takvu treba izbegavati jer veoma esto dovodi do
takozvanih nestrukturnih programa koji se u savremenom programiranju ne koriste.

break naredba
U nekim situacijama e biti potrebno prekinuti petlju tj njeno izvravanje i prelazak
na sledeu naredbu koja sledi iza petlje. Korienjem naredbe break moe se
prekinuti bilo koja vrsta petlje. U sledeem primeru e biti ilustrovano korienje
naredbe break za prekid for petlje.
Primer

public static void Main()


{
int ukupno = 0;

for (int indeks = 1; indeks <= 10; indeks++)


{
System.Console.WriteLine("indeks = " + indeks);
ukupno += indeks;

if (indeks==5)
{
System.Console.WriteLine("prekid forpetlje");
break;
}
}
System.Console.WriteLine("ukupno=" +ukupno);
}

Izvrenjem ovog programa dobie se sledei ispis:

indeks = 1
indeks = 2
indeks = 3
indeks = 4
indeks = 5
prekid for petlje
ukupno = 15

continue naredba
Naredbom continue se ne prekida izvravanje petlje ve se samo prekida tekua
iteracija i nastavlja se sa sledeom iteracijom. Znai sve naredbe u telu petlje koje
dolaze posle naredbe continue se preskau i prelazi se na zaglavlje petlje tj
proveraavaju se uslovi za petak nove iteracije i ako su oni zadovoljeni ponovo se
izvrava telo petlje odpoetka tj poinje nova iteracija. Korienje naredbe continue
bie ilustrovano sledeim primerom.

Primer

public static void Main()


{
int ukupno = 0;

for (int indeks=1;indeks<=10;indeks++)


{
if (indeks==6)
{
System.Console.WriteLine("continue naredba");
continue;
}
System.Console.WriteLine("indeks = " +indeks);
ukupno+=indeks;
}
System.Console.WriteLine("ukupno =" +ukupno);
}
Rezultat izvrenja ovog programa je

indeks = 1
indeks = 2
indeks = 3
indeks = 4
indeks = 5
continue naredba
indeks = 7
indeks = 8
indeks = 9
indeks = 10
ukupno = 49
Zadatak 1:
Kreirati klasu Datum koja ima sledee lanove:

privatne atribute

dan

mesec

podrazumevani konstruktor

javnu metodu za postavljanje atributa dan

javnu metodu za postavljanje atributa mesec

privatnu metodu za izraunavanje rednog broja datuma u godini

javnu metodu za ispis rednog broja datuma na konzolu

Zadatak 2
Napisati konzolnu aplikaciju koja omoguuje korisniku da unese neki datum u obliku
punog naziva dana i meseca (na primer: osmi mart) i da mu program kao povratnu
informaciju na ekranu ispie koji je to dan u tekuoj godini (na primer za ulaz drugi
februar program treba da ispie 33 (31 dan u januaru i jo dva u februaru). Ne
razmatrati problem prestupne godine. Program treba da omogui korisniku da
navedeni postupak ponovi proizvoljan broj puta sve dok ne unese kao datum string
"KRAJ". U tom sluaju se program zavrava i daje izvetaj o broju korektnih datuma
za koje je program korisniku odredio dan u godini. U sluaju da korisnik unese
datum koji je pogrean (osim datuma "KRAJ") program treba da vrati poruku o
greci.

Napomena: Za ispis neke poruke koristiti: System.Console.WriteLine("neki tekst");

Za ispis neke numerike vrednosti


koristiti: System.Console.WriteLine(ime_promenljive);

Moguca je i kombinacija: System.Console.WriteLine("neki tekst" + ime_promenljive


+ "drugi_tekst" + ime_druge_promenljive);

Za unos niza znakova sa tastature koristiti: string nekiString =


System.Console.ReadLine();
Za poredjenje promenljive tipa string sa nekom string konstantom koristiti operator
poredjenja == tj.

stringPromenljiva == "neka string konstanta"

Problem opisan u zadatku 2 reiti korienjem prethodno kreirane klase Datum.

Napomena: Kvalifikator pristupa za privatne lanove klase je private dok je


kvalifikator pristupa za javne lanove klase public.

You might also like