Osnove programiranja. Kontrola toka programa

Величина: px
Почињати приказ од странице:

Download "Osnove programiranja. Kontrola toka programa"

Транскрипт

1 Osnove programiranja Kontrola toka programa

2 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

3 Kontrola toka programa Programi koje smo do sada koristili imali su linijsku strukturu. Nekad je neophodno promeniti tok izvršavanja programa, jer se često dolazi u situaciju da tok programa zavisi od određenog uslova.

4 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.

5 Bulova logika Engleski matematičar Džordž Bul, čiji je rad sredinom devetnaestog veka omogućio osnovu Bulove logike. Tip bool može sadržati samo dve vrednosti: true ili false. Često se koristi da bi se zabeležio rezultat neke operacije, uglavnom za skladištenje rezultata nekog poređenja.

6 Bulova logika Kao primer, razmotrite situaciju u kojoj bismo želeli da izvršimo kôd na osnovu toga da li je promenljiva x manja od 10 (x<10). Da bismo ovo uradili, moramo proveriti da li je iskaz x je manje od 10 istinit ili neistinit. Tačnije, moramo znati logičku vrednost rezultata tog poređenja. Logičko poređenje zahteva upotrebu logičkog operatora poređenja. Poređenje zahteva upotrebu relacionih operatora.

7 Logički operatori za rad sa logičkim vrednostima OPERATOR KATEGORIJA PRIMER IZRAZA REZULTAT! unarni a =!b; & binarni a = b& c; binarni a = b c; a je dodeljena vrednost true ako je b false, ili vrednost false ako je b true (logičko NE). a je dodeljena vrednost true ako b i c imaju vrednost true u suprotnom false (logičko I). a je dodeljena vrednost true ako b ima vrednost true ili c ima vrednost true ili obe promenljive imaju vrednost true, u suprotnom dobija vrednost false (logičko ILI). ^ binarni a = b^ c; a je dodeljena vrednost true ako b ima vrednost 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

8 Primeri int x = 10, y=15; bool z=(x * y!= 0) & (y > x); Console.WriteLine(z); TRUE 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 FALSE FALSE

9 Logički operatori za rad sa logičkim vrednostima OPERATOR KATEGORIJA PRIMER IZRAZA REZULTAT && binarni a = b&&c; binarni a = b c; a je dodeljena vrednost true ako b i c imaju vrednost true u suprotnom false (logičko I). a je dodeljena vrednost true ako b ima vrednost true ili c ima vrednost true ili obe promenljive imaju vrednost 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. Ako je vrednost prvog operanda operatora && false, onda nema potrebe ispitivati vrednost drugog, 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.

10 Iskaz goto goto <imeoznake>; Oznake se definišu na sledeći način: <imeoznake>:

11 Š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;

12 Uslovi (grananje) u programu Grananje je kontrolisanje reda koda koji treba da se 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.

13 Tehnike grananja Tri tehnike grananja koje su dozvoljene u jeziku C#: iskaz if iskaz switch ternarni operator ( inline if )

14 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.

15 Izvođenje jednosmernog testiranja Sintaksa naredbe if izgleda ovako: if (uslov) { naredba }

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

17 Izvođenje dvosmernog testiranja Sintaksa naredbe if izgleda ovako: if (uslov) *{ naredbe2 } else { naredbe1 }

18 Primer Napisati program koji za uneti broj ispituje da li je on negativan ili pozitivan i ispisuje odgovarajuću poruku.

19 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"); else Console.WriteLine("Uneli ste neparan broj");

20 Višestruko grananje Sintaksa naredbe if izgleda ovako: if (uslov1) { naredbe1 } else if (uslov2) { naredbe2 }... else { naredbe3 }

21 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.

22 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>=5 if (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();

23 Zadatak 2 Nacrtaj algoritam kojim se izračunava vrednost funkcije: y= x 2, 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();

24 Iskaz switch Iskaz switch je vrlo sličan iskazu if po načinu uslovnog izvršavanja koda na osnovu neke vrednosti dobijene iz testa. Međutim, switch nam dozvoljava da ispitamo više različitih vrednosti test promenljive odjednom, umesto samo jednog uslova. Ovaj test je ograničen na diskretne vrednosti, pa je i njegova upotreba malo drugačija.

25 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; }

26 Objašnjenje Vrednost u promenljivoj <testprom> poredi se sa svakom 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 blok postoji. Na kraju koda svake sekcije postoji dodatna komanda break. Nelegalno je za tok izvršenja programa da pređe u sledeći case iskaz, ako se obradio case blok pre njega.

27 Upoređenje

28 Zadatak Ispisati uneti broj slovima. broj!"); 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 break; }

29 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();