*      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