Upload
others
View
10
Download
0
Embed Size (px)
Citation preview
Osnove programiranja
Kontrola toka programa
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
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.
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.
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.
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.
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
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
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.
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.
Iskaz gotogoto <imeOznake>;Oznake se definišu na sledeći način:<imeOznake>:
Š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;
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.
Tehnike grananja
Tri tehnike grananja koje su dozvoljene u jezikuC#: iskaz if
iskaz switch
ternarni operator („inline if“)
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.
Izvođenje jednosmernog testiranja
Sintaksa naredbe if izgleda ovako:
if (uslov){
naredba}
Primer
Napisati program koji za uneti broj ispituje da li je on negativan i ispisuje poruku ako jeste.
Izvođenje dvosmernog testiranja
Sintaksa naredbe if izgleda ovako:if (uslov)*{
naredbe2} else{
naredbe1}
Primer
Napisati program koji za uneti broj ispituje da li je on negativan ili pozitivan i ispisujeodgovarajuću poruku.
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");
Višestruko grananje
Sintaksa naredbe if izgleda ovako:if (uslov1){
naredbe1} else if (uslov2){
naredbe2} ..........else {
naredbe3}
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.
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();
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();
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.
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;}
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.
Upoređenje
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;
}
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();