PROGRAMSKE
STRUKTURE
Podrazumevano je da se program
izvšavae liniju po liniju u redosledu u kome je on napisan u fajlu sa kodom odnosno od njegovg vrha pa do dna. Često
se javlja potreba da se linije koda izvršavaju u drugačijem redosledu ili pak da se neke linije koda izvršavaju više puta. Ovaj način izvršavanja se ostvaraju pomoću
odgovarajućih upravljačkih struktura. U
savremenim programskim jezicima se, po mogućnostima koje nude, skupovi
upravljačkih funkcija veoma malo međusobom razlikuju. Često
su čak i sintakse slične ili se pak
poklapaju. Poznavanje sintakse upravljačkih struktura
predstavlja osnovu u proučavanju jednog programskog jezika. Na početku da vidimo šta znači:
·
blok naredbi
·
simbol za završetak linije koda
Blok naredbi
Blok
naredbi se u C# definiše kao niz linija koda obuhvaćenih parom velikih
zagrada tj.
{
linija koda 1
...
linija koda n
}
Završetak linije koda
Simbol kojim se završava linija koda
u C# je tačka zarez tj ;
Vrste upravljačkih struktura
U teoriji programiranja definisana su tri osnovna tipa
programskih struktura:
·
sekvenca,
·
selekcija
(ili grananje),
·
iteracija (ili petlja).
Uppotrebom
osnovnih programskih struktura moguće je rešiti bilo koji zadatak.
Sekvenca
Sekvenca je upravljačka
struktura kod koje se linije koda izvršavaju redom jedna za drugom po redosledu
u kome se nalaze u bloku. U
programskom jeziku C# sekvenca se implementira korišćenjem bloka u kome se
nalazi jedna ili više linija koda.
Primer: Upravljačka struktura
Sekvenca
{
linija_koda_1
linija_koda_2
...
linija_koda_n
}
Redosled izvršavanja je:
linija_koda_1 zatim linija_koda_2, ..., i kao
poslednja linija_koda_n.
Konkretno:
{
x = x+7;
y=x-7;
z=y*x;
}
Najčešće se na početku bloka nalaze opisi promenljivih i konstanti
koje su lokalne za blok.
Primer: Lokalne promenljive za blok
{
float x, y, z;
int i;
x=x+2;
y=x-2;
z=y+x;
i =
51;
}
Selekcija
Primenom sekvence moguće je
rešiti jedan vrlo mali broj problema. Najčešći
je slučaj da se obrada ulaznih podataka razlikuje zavisno od njihovih vrednosti. Selekcija ili
grananje je upravljačka struktura koja pruža mogućnost izbora zavisno
od nekog uslova. U slučaju da je uslov zadovoljen
izvršava se jedan skup linija koda tj. jedan
blok odnosno ako uslov nije zadovoljen onda se izvršava drugi skup linija koda
tj. drugi blok.
Selekcija ili
grananje se u C# realizuju naredbama:
·
if
·
switch
-
if-naredba
if-naredbom se realizuje
osnovi tip selekcije (grananja) kojom se vrši uslovno izvršenje jedne od dve
moguće alternative. Standardni dijagram toka strukture grananja prikazan
je na sledećoj slici
Treba
uočiti da je jedna alternativa Naredba1 koja se izvršava kada logički
izraz ima vrednost tačno (true) a druga alternativa je Naredba2 koja se
izvršava kada izraz ima vrednost netačno (false).
Naredba1 i Naredba2 mogu biti bilo koja izvršna naredba ili
neka upravljačka struktura (sekvenca, selekcija ili iteracija).
Ekvivalentan kod u C#-u je:
if (izraz)
Naredba1
else
Naredba2
Kada je vrednost izraza tačna(true) izvršava se naredba Naredba1, u
suprotnom, izvršava se naredba Naredba.
Primer: if naredba - osnovni oblik
Deo koda kojim
se odredjuje veći od unesena dva broja x i y i dodeljuje trecoj promenljivi veci_Broj je:
if ( x
> y )
veci_Broj = x;
else
veci_Broj = y;
Često se javlja potreba da se
neki deo koda izvrši ako je zadovoljen neki uslov,
a u slučaju da nije zadovoljen uslov nije
potrebno izvršiti ni jednu liniju koda. U ovim
slučajevima nije potrebno pisati else granu tj.
imamo takozvani "skraćeni oblik " if naredbe.
if (
izraz )
Naredba1
switch - naredba
Višestruko grananje je vrsta
grananja kod koga postoji više alternativa koje mogu biti izvršene zavisno od toga koji uslovi su zadovoljeni. Broj uslova je dva ili više. Višestruko grananje se može rešiti i višestrukom
primenom if naredbi, ali je puno lakše primenom
naredbe switch. Postoje situacije
gde su višestruka grananja takva da se izbor jedne od
više mogućih alternativa vrši na osnovu neke vrednosti (vrednost neke
promenjive ili izraza). Posmatrajmo kod koji treba za zadatu vrednost iz opsega
(1 do 7) da prikazuje imena dana u sedmici(npr. ako je
vrednost 1 program treba da ispiše ponedeljak, utorak…). Switch naredba ima
sledeći oblik:
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 upravljačke strukture ili
blokovi.
Ovo se može grafički
predstaviti na sledeći način:
Lako je uočiti da će se ovisno od vrednosti
izraza izvršiti samo B ili neki od Bi gde važi da i uzima jednu od vrednosti 1,
2, ..., N. Ako izraz ne uzima ni jednu od vrednosti vrednost1, vrednost2,
..., vrednostN onda će se izvršiti samo B. Postoje slučajevi kada treba izbrati
samo jednu od vrednosti vrednosti vrednost1, vrednost2, ..., vrednostN,
a ne i default vrednost pa tada ova naredba ima skraćeni oblik
switch ( izraz )
{
case vrednost1: B1; break;
case vrednost2: B2; break;
...
case vrednostN: BN; break;
}
Sledeći primer ilustruje
primenu switch naredbe.
Ako se želi ispis samo imena
tekućeg dana u sedmici onda switch naredba ima sledeći oblik:
int tekuci = 4;
string text ="";
switch( tekuci )
{
case 1: text+="ponedeljak\n"; break;
case 2: text+="utorak\n"; break;
case 3: text+="sreda\n"; break;
case 4: text+="cetvrtak\n"; break;
case 5: text+="petak\n"; break;
case 6: text+="subota"; break;
case 7: text+="nedelja\n"; break;
}
System.Console.WriteLine("Tekuci dan je = " + text);
Na ekranu biće ispisano:
Tekuci dan je = cetvrtak
Iteracija
Veoma
često se ukazuje potreba za ponavljanjem nekih naredbi više puta tj. za ponavljanjem nekog postupka u više iteracija. Iteracije se realizuju upotrebom upravljačkih struktura koje
se nazivaju ciklusi. Postoji više vrsta ciklusa
i one se mogu klasifikovati po više kriterijuma. Ako je kriterijum
broj izvršavanja tela ciklusa onda postoje dve vrste ciklusa:
a) ciklus sa
konstantnim brojem prolaza (brojački ciklus),
b) ciklus
sa promenljivim brojem prolaza.
U programskom jeziku C# postoje dve
vrste programskih ciklusa:
ciklusi sa
konstantnim brojem prolaza (unapred se zna koliko puta će se izvršiti telo
ciklusa)
for
- ciklus,
foreach - ciklus
ciklusi sa
promenljivim brojem prolaza (broj izvršenja tela ciklusa se odredjuje u fazi
izvršenja programa i zavisi od vrednosti za ciklus relevantnih elemenata kao
što su promenljive, elementi polja itd. )
while
- ciklus,
do-while - ciklus.
for - ciklus
for – ciklus
je ciklus sa konstantnim brojem prolaza i naziva se još i brojački ciklus.
Opšti oblik for ciklusa u programskom jeziku C# je:
for (<izraz1>; <izraz2>;
<izraz3>)
<telo ciklusa>
Gde je:
<izraz1> -
vrši inicijalizaciju promenljive koja se koristi u ciklusu (što može da bude
postavljanje početne vrednosti brojača ciklusa),
<izraz2> -
predstavlja uslov na osnovu koga se odlučuje da
li će se telo ciklusa još izvršavati ili se izvršavanje ciklusa prekida - ciklus
se izvršava dok je vrednost ovog izraza tačna.
<izraz3> –
definiše promenu vrednosti promenljivih koje se koriste u ciklusu.
Navedena promena se vrši nakon svake iteracije ( tu se
može definisati kako se menja vrednost brojača ciklusa nakon svake
iteracije).
<telo ciklusa> –
telo ciklusa predstavlja jednu naredbu, struktura ili blok.
Bilo koji od
ovih izraza može se izostaviti, ali se znak ‘;’ mora pisati.
Primer: Sabrati
sve brojeve iz interevala od 1 do 100:
int suma = 0;
for (int i = 1; i <= 100; i++)
{
suma +=
i;
}
System.Console.WriteLine("Zbir je = " + suma);
foreach - ciklus
Ova
vrsta ciklusa koristi kada se koristi skupa elemenata. Skup
elementa može biti neki niz ili kolekcija.
Opšti oblik
foreach ciklusa je:
foreach(tip promenljiva in izraz)
<telo ciklusa>
promenljiva je
promenljiva koja se koristi u ciklusu za pristup svim elementima u datom u
izrazu. Pogledajmo sledeći primer.
Primer
Neka je zadat celobrojni niz naziva niz definisan kao:
int [ ] niz = {1, 3, 5, 7, 7};
Sledećim foreach ciklusom se
prolazi kroz sve elemente niza i oni se ispisuju na standardnom izlazu.
int[] niz = { 1, 3, 5, 7, 9};
foreach (int indeks in niz)
{
System.Console.WriteLine("element
niza je = " + indeks);
}
Kao rezultat dobili bi ekran:
while - ciklus
while ciklus ima oblik
While(<uslov>)
<telo ciklusa>
<uslov>
- predstavlja je logički izraz koji može biti tačan ili netačan.
Ako je uslov tačan onda se izvršava telo ciklusa.
Nakon izvršenja poslednje naredbe u telu ciklusa opet se proverava uslov i while
ciklus se završava kada uslov više nije zadovoljen. To
znači da uslov sadrži elemente koji se menjaju u telu ciklusa. Na ovaj način se obezbeđujemo da ne dođejmo u
situaciju da je petlje beskonačna tj. da se nikad
ne izlazi iz petlje.
Primer
Sabrati sve parne brojeva u
intervalu od 2 do 100:
int i = 2;
int zbir = 0;
while (i <=
100)
{
zbir
+=i;
i++;
i++;
}
System.Console.WriteLine("Zbir
parnih brojeva je = " + zbir);
do while - ciklus
do
while ciklus ima opšti oblik
do
<telo ciklusa>
while(<uslov>)
<uslov> - predstavlja logički izraz koji
može biti tačan ili netačan. Ova petlja funkcioniše
tako što se izvršava telo ciklusa a zatim se proverava uslov. Ako je uslov ispunjen onda se ponovo izvršava telo ciklusa. U suprotnom se završava.
Primer
Sabrati sve neparne brojeve u
intervalu od 1 do 100:
int i = 1;
int zbir = 0;
do
{
zbir +=
i;
i++;
i++;
}
while (i <=
100);
System.Console.WriteLine("Zbir neparnih brojeva je =
" + zbir);
Naredbe skoka
Podrazumevano je da će se telo ciklusa izvršavati onoliko puta koliko je to zadato početnim
uslovima i ostalim karakteristikama ciklusa. Međutim nekada
je potrebno da se delovi ciklusa „preskoče“
tj. da se ne izvršavaju i da se nastavi sa
sledećom iteracijom. Da bi se izmenio normalan tok izvršavanja neke
upravljačke strukture mogu se koristiti sledeće naredbe:
§
goto
§
break
§
continue
goto - naredba
goto
naredba se još zove i naredbom bezuslovnog skoka. Ona omogućuje bezuslovni
skok na neku labelu koja je definisana u programu.
Labela se u programu dobija tako što se iza nekog identifikatora postavlja
dvotačka npr.
ovoJeLabela:
Naredba goto se koristi na sledeći način
goto ovoJeLabela;
U sledećem primeru će biti ilustrovano korišćenje naredbe goto.
Primer
Sabrati sve brojeve iz intervala 1
do 100 primenom goto naredbe I bez primena naredbi ciklusa:
int i = 1;
int zbir = 0;
poCetak:
if (i >
100) goto ovoJeLabela;
zbir +=
i;
i++;
goto poCetak;
ovoJeLabela:
System.Console.WriteLine("Zbir brojeva je = " + zbir);
break - naredba
U
nekim slučajevima potrebno je prekinuti ciklus tj. njegovo izvršavanje i prelazak na sledeću naredbu koja
sledi iza ciklusa. Korišćenjem naredbe break može se prekinuti bilo koja
vrsta ciklusa. U sledećem primeru će biti
ilustrovano korišćenje naredbe break za prekid for ciklusa.
Primer
int suma = 0;
for (int i = 1; i
<= 10; i++)
{
System.Console.WriteLine("i =
" + i);
suma +=
i;
if (i == 5)
{
System.Console.WriteLine("prekid for ciklusa");
break;
}
}
System.Console.WriteLine("Zbir je = " + suma);
Izvršenjem ovog programa dobićemo:
continue - naredba
Ovom naredbom se ne prekida
izvršavanje ciklusa već se samo prekida tekuća iteracija i nastavlja
se sa sledećom iteracijom. Znači sve naredbe
u telu ciklusa koje dolaze posle naredbe continue se preskaču i prelazi se
na zaglavlje ciklusa tj. proveravaju
se uslovi za početak nove iteracije i ako su oni zadovoljeni ponovo se
izvršava telo ciklusae od početka odnosno počinje nova iteracija.
Korišćenje naredbe continue biće ilustrovano sledećim primerom.
Primer
int suma = 0;
for (int i = 1; i
<= 10; i++)
{
if (i == 6)
{
System.Console.WriteLine("continue naredba");
continue;
}
System.Console.WriteLine("i =
" + i);
suma +=
i;
}
System.Console.WriteLine("Zbir je = " + suma);
Rezultat izvršenja ovog programa je:
http://vojo.milanovic.org
© Copyright, 2012 Milanović Vojo
All right reserved