30
Osnove programiranja Kontrola toka programa

Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Osnove programiranja

Kontrola toka programa

Page 2: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Sadržaj Kontrola toka programa Metode kontrole toka programa Bulova logika Operatori dodeljivanja Iskaz goto Tehnike grananja Iskaz if

Jednosmerno, dvosmerno i višestruko grananje Iskaz switch

Page 3: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Kontrola toka programa

Programi koje smo do sada koristili imali su linijsku strukturu.

Kod takvih programa naredbe se uglavnom izvršavaju redom, onako kako su napisane, jedna za drugom, od početka do kraja, s tim da se svaka naredba izvrši jednom.

Nakon jedne naredbe prelazi se na sledeću i tako redom do kraja programa.

Nekad je neophodno promeniti tok izvršavanja programa, jer se često dolazi u situaciju da tok programa zavisi od određenog uslova.

Page 4: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Metode kontrole toka programa

Grananje (selekcija) - gde se kod izvršava uslovno, u zavisnosti od rezultata nekog poređenja, Npr. „Ovaj kod izvrši samo ako je Promenljiva x

manja od 10." Petlje (iteracija) - ponavljanje izvršenja istih

iskaza (određeni broj puta, dok se ne dostigne uslov koji je unapred zadat).

Obe tehnike uključuju korišćenje Bulove logike.

Page 5: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Bulova logika

Engleski matematičar Džordž Bul, čiji je radsredinom devetnaestog veka omogućio osnovuBulove logike.

Tip bool može sadržati samo dve vrednosti: true ili false.

Često se koristi da bi se zabeležio rezultat nekeoperacije, uglavnom za skladištenje rezultata nekog poređenja.

Page 6: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Bulova logika Kao primer, razmotrite situaciju u kojoj bismo želeli da

izvršimo kôd na osnovu toga da li je promenljiva xmanja od 10 (x<10).

Da bismo ovo uradili, moramo proveriti da li je iskaz „xje manje od 10” istinit ili neistinit.

Tačnije, moramo znati logičku vrednost rezultata togpoređenja.

Logičko poređenje zahteva upotrebu logičkog operatora poređenja.

Poređenje zahteva upotrebu relacionih operatora.

Page 7: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Logički operatori za rad sa logičkim vrednostima

OPERATOR KATEGORIJA PRIMER IZRAZA REZULTAT

! unarni a = !b;a je dodeljena vrednost true ako je b false, ili vrednost false ako je b true (logičko NE).

& binarni a = b& c;a je dodeljena vrednost true ako b i c imaju vrednost true u suprotnom false (logičko I).

| binarni a = b|c;

a je dodeljena vrednost true ako b imavrednost true ili c ima vrednost true iliobe promenljive imaju vrednost true, u suprotnom dobija vrednost false(logičko ILI).

^ binarni a = b^ c;

a je dodeljena vrednost true ako b imavrednost true ili c ima vrednost true, ali ne i ako obe promenljive imaju vrednost true (false), u suprotnom false (Logičko ekskluzivno ILI).

a je promenljiva tipa bool, a b i c su promenljive (izrazi) bilo kog tipa

Page 8: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Primeri

int x = 10, y=15;bool z=(x * y != 0) & (y > x);Console.WriteLine(z);

int x = 10, y=15;bool z=(x * y == 0) ^ (y > x);//bool z=(x * y == 0) ^ (y< x);//bool z=(x * y != 0) ^ (y> x);Console.WriteLine(z);

TRUE

TRUEFALSEFALSE

Page 9: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Logički operatori za rad sa logičkim vrednostima

OPERATOR KATEGORIJA PRIMER IZRAZA REZULTAT

&& binarni a = b&&c;a je dodeljena vrednost true ako b ic imaju vrednost true u suprotnomfalse (logičko I).

|| binarni a = b||c;

a je dodeljena vrednost true ako b ima vrednost true ili c ima vrednosttrue ili obe promenljive imajuvrednost true, u suprotnom dobija vrednost false (logičko ILI).

Njihov rezultat je potpuno isti kao & i |, ali postoji bitna razlika u načinu na koji se dobija njihov rezultat, što može dati bolje performanse programa. Oba operatora prvo ispituju vrednost prvog operanda (b u tabeli gore), pa na osnovu njegove vrednosti možda neće biti potrebno da se ispita drugi operand.Ako je vrednost prvog operanda operatora && false, onda nema potrebe ispitivati vrednostdrugog, zato što će rezultat, bez obzira na drugi operand biti false. Slično tome operator || vratiće vrednost true, ako je prvi operand true, bez obzira na vrednost drugog operanda.

Page 10: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Iskaz goto

Iskaz goto se koristi kada je neophodno da se preskoči neki deo koda ili da se vrati na prethodni.

Programska linija se na neki način obeleži (slovima ili brojevima) i navede goto oznaka/broj (labela).

On ima svoje prednosti i nedostatke. Prednost je u jednostavnom prelasku sa jednog dela

koda na drugi Nedostatak što se može dobiti kod koji je teško

razumljiv.

Page 11: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Iskaz gotogoto <imeOznake>;Oznake se definišu na sledeći način:<imeOznake>:

Page 12: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Šta se dešava u ovom kodu?

start:int x= 5;goto dodajVrednost;ispisiRezultat:Console. WriteLine („x= {0}“, x);goto start;dodajVrednost:x+=10;goto ispisiRezultat;

Page 13: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Uslovi (grananje) u programu

Grananje je kontrolisanje reda koda koji treba dase izvrši sledeći.

Red na koji se skače zavisi od neke vrste uslovnog iskaza.

Uslovni iskaz biće zasnovan na poređenju između test vrednosti i jedne ili više mogućih vrednosti sa korišćenjem Bulove logike.

Page 14: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Tehnike grananja

Tri tehnike grananja koje su dozvoljene u jezikuC#: iskaz if

iskaz switch

ternarni operator („inline if“)

Page 15: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Iskaz if U zavisnosti od toga da li je uslov ispunjen izvršavaće

se jedna ili više naredbi. Ako je taj uslov true, tj. tačan, izvršava se kôd koji se

nalazi u toj grani. Ako uslov nije ispunjen, tada se te naredbe neće

izvršavati ili će se izvršavati drugi blok naredbi. Naredba if omogućava ispitivanje logičkog Bool uslova

u programu. if naredba se može upotrebiti za obavljanje

jednosmernog, dvosmernog, višesmernog, iliugnježdenog testiranja.

Page 16: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Izvođenje jednosmernog testiranja

Sintaksa naredbe if izgleda ovako:

if (uslov){

naredba}

Page 17: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Primer

Napisati program koji za uneti broj ispituje da li je on negativan i ispisuje poruku ako jeste.

Page 18: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Izvođenje dvosmernog testiranja

Sintaksa naredbe if izgleda ovako:if (uslov)*{

naredbe2} else{

naredbe1}

Page 19: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Primer

Napisati program koji za uneti broj ispituje da li je on negativan ili pozitivan i ispisujeodgovarajuću poruku.

Page 20: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Zadatak

Nacrtaj algoritam i napiši program koji za uneti broj ispituje da li je on paran ili neparan i ispisuje odgovarajuću poruku.

int x ;Console.WriteLine("Unesite vrednost broja x");x = int.Parse(Console.ReadLine());if (x %2 == 0)

Console.WriteLine("Uneli ste paran broj");elseConsole.WriteLine("Uneli ste neparan broj");

Page 21: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Višestruko grananje

Sintaksa naredbe if izgleda ovako:if (uslov1){

naredbe1} else if (uslov2){

naredbe2} ..........else {

naredbe3}

Page 22: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Primer Nacrtaj algoritam i napiši program koji za uneti

broj ispituje da li je on negativan, pozitivan ili nula i ispisuje odgovarajuću poruku.

Page 23: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Zadatak 1

Nacrtaj algoritam i napiši program za izračunavanje uslovnog izraza prema datom obrascu: y=-5 za x<0, y=x+2 za 0<=x<1, y=3x-1 za 1<=x<5, y=2x za x>=5.

int x,y;Console.WriteLine("Unesite broj

x:");x = int.Parse(Console.ReadLine());//y=-5 za x<0, y=x+2 za 0<=x<1,

y=3x-1 za 1<=x<5, y=2x za x>=5if (x < 0)

y = -5;else if (x < 1)

y = x + 2;else if (x < 5)

y = 3 * x - 1;else

y = 2 * x;Console.WriteLine("y={0}",y);Console.ReadKey();

Page 24: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Zadatak 2

Nacrtaj algoritam kojim se izračunava vrednostfunkcije:

y=x2, x<0

x, 0<x<1

√x, x>1

int x, y;Console.WriteLine("Unesite neki

broj:");x = int.Parse(Console.ReadLine());if (x<0)

y=x*x;//Math.Pow(x,2)else if(x<=1)

y=x;else

y=(int)Math.Sqrt(x);Console.WriteLine("Dobijena

vrednost je “+y);Console.ReadKey();

Page 25: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Iskaz switch

Iskaz switch je vrlo sličan iskazu if po načinuuslovnog izvršavanja koda na osnovu nekevrednosti dobijene iz testa.

Međutim, switch nam dozvoljava da ispitamo više različitih vrednosti test promenljiveodjednom, umesto samo jednog uslova.

Ovaj test je ograničen na diskretne vrednosti, pa je i njegova upotreba malo drugačija.

Page 26: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Osnovna struktura switch iskaza

switch (<TestProm>){case operand1:kod za izvrsavanje;break;case operand2:kod za izvrsavanje;break;. . .case operandN:kod za izvrsavanje;break;default:kod za izvrsavanje ako nijedan uslov nije ispunjen;break;}

Page 27: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Objašnjenje

Vrednost u promenljivoj <testProm> poredi se sasvakom od vrednosti <operandx> (navedenim u iskazu case) i ako postoji poklapanje, onda se izvršava kod predviđen za to.

Ukoliko ne postoji poklapanje ni sa jednom vrednošću, onda se izvršava kod u delu default, ako takav blokpostoji.

Na kraju koda svake sekcije postoji dodatna komandabreak.

Nelegalno je za tok izvršenja programa da pređe u sledeći case iskaz, ako se obradio case blok pre njega.

Page 28: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Upoređenje

Page 29: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Zadatak

Ispisati uneti broj slovima.

int a;Console.WriteLine("Unesite neki broj od 1 do 5:");a = int.Parse(Console.ReadLine());switch (a)

{case 1:

Console.WriteLine("Uneli ste broj jedan");break;

case 2:Console.WriteLine("Uneli ste broj dva");break;

case 3:Console.WriteLine("Uneli ste broj tri");break;

case 4:Console.WriteLine("Uneli ste broj cetiri");break;

case 5:Console.WriteLine("Uneli ste broj pet");break;

default:Console.WriteLine("Niste uneli odgovarajuci

broj!");break;

}

Page 30: Kontrola toka programa - bpa.edu.rs Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Kod takvih programa naredbe se uglavnom izvršavaju redom,

Primer 2

int n;Console.WriteLine("Unesite n");n = int.Parse(Console.ReadLine());switch (n){

case 1:case 2:case 3:

Console.WriteLine("Uneli ste broj "+n);break;default:Console.WriteLine("Uneti broj nije iz opsega [1,3]");break;}

Console.ReadKey();