Програми које смо до сада користили имали су линијску структуру. Код таквих програма наредбе се углавном извршавају редом, онако како су написане, једна за другом, од почетка до краја, с тим да се свака наредба изврши једном. Након једне наредбе прелази се на следећу и тако редом до краја програма. Међутим, некад је неопходно променити ток извршавања програма, јер се често долази у ситуацију да ток програма зависи од одређеног услова. Помоћу наредби if и switch можемо управљати током извршавања кода.
У зависности од тога да ли је услов испуњен извршаваће се једна или више наредби. Ако услов није испуњен, тада се те наредбе неће извршавати или се може извршавати други блок наредби (блока наредби ћемо се подсетити касније). Наредба if омогућава испитивање логичког Boolean услова у програму. Ако је тај услов true, тј. тачан, извршава се код који се налази у тој грани. if наредба се може употребити за обављање једносмерног тестирања, двосмерног, вишесмерног, или угњежденог тестирања. |
Извођење једносмерних тестирања
|
Ако је испуњен логички израз Uslov (вредност израза је true) тада се извршава наредба Naredba и прелази се на следећу наредбу, а ако услов није испуњен (резултат израза је false) тада се наредба Naredba прескаче и одмах се прелази на следећу наредбу. | Слика 6.1. Дијаграм једносмерног тестирања |
Пример 1. Написати програм који за унети број испитује да ли је он негативан и исписује поруку ако јесте.
Решење :
Правимо форму облика: |
Преименујемо label-e и button1 |
||
Слика 6.2. Почетни изглед форме |
Слика 6.3. Изглед форме након преименовања компоненти |
private void button1_Click(object sender, EventArgs e)
{
//Promenljiva koju koristimo
double x;
x = double.Parse(textBox1.Text);
//Ispitujemo da li je x manje od 0
if (x < 0)
//Ako jeste, ispisujemo poruku
label3.Text = "Uneti broj je negativan! ";
label4.Text = "Kraj! ";
}
Иза кључне речи if налази се израз слова, између малих заграда (мале заграде су обавезне).
Ако се израчунавањем израза услова добије вредност тачно, извршава се следећа наредба - биће приказана
порука Broj je negativan!. Обратимо пажњу на то да ће се порука Kraj! увек извршавати,
без обзира на исход тестирања, због тога што се она налази изван if-тела.
Напомена: Иза затворене мале заграде у if-тесту не ставља се знак тачка зарез. Једна од најчешћих грешака у програмирању у програмском језику VISUAL C# јесте када се тај знак омашком, ипак стави: |
//Primetite podmetnuti znak tacka zarez
if (x < 0);
//Ovaj iskaz odgovara sledecoj naredbi, koja priznacete, nije bas ono sto smo hteli
if (x < 0)
//Prazno if-telo - ne raditi nista ako je broj < 0
;
private void button1_Click(object sender, EventArgs e)
{
//Promenljivu koju koristimo
double x;
x = double.Parse(textBox1.Text);
//Ispitujemo da li je x manje od 0
if (x < 0)
{
//Ako jeste, ispisujemo poruku
label3.Text = "Uneti broj ";
label4.Text = "je negativan!! ";
}
}
Савет Добра програмерска пракса је да се блокови користе чак и када је у питању само једна наредба. На овај начин, ако желимо да додамо још једну наредбу, већ имамо блок на правом месту. Да нисмо имали блок, могли бисмо да направимо грешку, тако што би додали нову наредбу, а заборавили да додамо заграде за блок. |
Извођење двосмерних тестирања
|
Пример 2. Написати програм који за унета два броја враћа њихову разлику.
Решење :
За почетак, потребно је испитати који је број већи, па затим од вечег одузети мањи број како бисмо добили разлику. Испитивање ћемо обавити помоћу наредбе if. |
Правимо форму облика: | Преименујемо label-e и button1 |
||
Слика 6.6. Почетни изглед форме |
Слика 6.7. Изглед форме након преименовања компоненти |
private void button1_Click(object sender, EventArgs e)
{
//Promenljive koje koristimo
double x, y, razlika;
x = double.Parse(textBox1.Text);
y = double.Parse(textBox2.Text);
//Ispitujemo da li je x manje od y
if (x < y)
{
//Racunamo razliku, ako je vece y
razlika = y - x;
}
//U suprotnom, racunamo razliku ako je vece x
else
{
razlika = x - y;
}
//Ispisujemo rezultat u labelu
label4.Text = "Razlika je " + razlika;
}
Извођење вишесмерних тестирања
|
|
*У случају да се анимација не приказује, притиснути дугме Прикажи слику
Пример 3. Написати програм који за унети број исписује да ли је он већи, мањи или једнак 100.
Решење :
Правимо форму облика: |
Преименујемо label-e и button1 |
||
Слика 6.10. Почетни изглед форме |
Слика 6.11. Изглед форме након преименовања компоненти |
private void button1_Click(object sender, EventArgs e)
{
//Promenljiva koju koristimo
double x;
x = double.Parse(textBox1.Text);
//Ispitujemo da li je x jednako 100
if (x == 100)
{
//Ako jeste, ispisujemo poruku u labeli
label3.Text = "Unet je broj 100 i on je paran. ";
}
//U suprotnom, pitamo da li je manji od 100
else if (x < 100)
label3.Text = "Uneti broj je manji od 100. ";
//I na kraju, ukoliko je veci od 100
else
label3.Text = "Uneti broj je veci od 100. ";
}
Напомена: Између кључних речи else и if постоји размак, зато што су то две засебне кључне речи. |
Извођење угњеждених тестирања
|
Ако је услов uslov1 true, извршава се блок naredba1. Ако је услов uslov2 true, онда се извршава блок naredbe2. Ако су и услов uslov1 и услов uslov2 false, онда се извршава блок naredbe3. |
Пример 4. Написати програм који за унети број исписује да ли је он већи, мањи или једнак 100, као и да ли је паран или непаран.
Решење :
Правимо форму облика: |
Преименујемо label-e и button1 |
||
Слика 6.14. Почетни изглед форме |
Слика 6.15. Изглед форме након преименовања компоненти |
private void button1_Click(object sender, EventArgs e)
{
//Promenljivu koju koristimo
double x;
x = double.Parse(textBox1.Text);
//Ispitujemo da li je x jednako 100
if (x == 100)
{
//Ako jeste, ispisujemo poruku u labeli
label3.Text = "Unet je broj 100 i on je paran. ";
}
//U suprotnom, pitamo da li je manji od 100
else if (x < 100)
{
//Sada da vidimo da li je paran ili neparan
if (x % 2 == 0)
label3.Text = "Uneti broj je manji od 100 i on je paran. ";
else
label3.Text = "Uneti broj je manji od 100 i on je neparan. ";
}
//I na kraju, ukoliko je veci od 100
else
{
if (x % 2 == 0)
label3.Text = "Uneti broj je veci od 100 i on je paran. ";
else
label3.Text = "Uneti broj je veci od 100 i on je neparan. ";
}
}
Покренемо програм и проверимо (за конкретну вредност x) :Коришћење логичких оператора у наредби if
Пример 5. Написати програм који за унети број испитује да ли је позитиван паран број.
Решење :
private void button1_Click(object sender, EventArgs e)
{
//Promenljiva koju koristimo
double x;
x = double.Parse(textBox1.Text);
//Ispitujemo i da li je x pozitivno i da li je parno
if (x >= 0 && x % 2 == 0)
label3.Text = "Uneti broj je pozitivan paran broj.";
//Ano nije
else
label3.Text = "Uneti broj nije ili pozitivan ili paran broj.";
}
Логички израз који се користи у наредби if је x >= 0 && x % 2 == 0. Ово значи да и израз x >= 0 и изразПримери
Пример 6. Написати програм који за унете коефицијенте линеарне једначине враћа њено решење.
Решење :
Посматрајмо линеарну једначину a*x+b=0. Када она има решење?
Ако је a различито од 0, онда једначина има јединствено решење и оно је –b/a.
У супротном ако је a=0, онда посматрамо b.
Ако је b=0 онда једначина има бесконачно много решења.
Ако је b различито од 0 онда једначина нема решење.
Правимо форму облика:Слика 6.17. Почетни изглед форме |
Преименујемо label-e и button1Слика 6.18. Изглед форме након преименовања компоненти |
private void button1_Click(object sender, EventArgs e)
{
//Promenljive koje koristimo
double a, b;
a = double.Parse(textBox1.Text);
b = double.Parse(textBox2.Text);
//Ispitujemo da li je a razlicito od 0
if (a != 0)
{
//Ako jeste resenje je -b/a
double resenje = -b / a;
//Ispisujemo resenje
label4.Text = "Linearna jednacina ima jedinstveno resanje :" + resenje;
}
//U suprotnom ako je a jednako 0
else
{
//Ako je i b jednako 0
if (b == 0)
//Ispisujemo resenje
label4.Text = "Linearna jednacina ima beskonacno mnogo resenja";
//U suprotnom b je razlicito 0
else
//Ispisujemo resenje
label4.Text = "Ne postoji resenje";
}
}
Покренемо програм и проверимо (за конкретне вредности а и b) :
Пример 7. Написати програм који враћа решење система од две линеарне једначине са две непознате.
Решење :
Посматраћемо систем од две линеарне једначине са две непознате у општем облику :
a1*x+b1*y=c1 и a2*x+b2*y=c2.
За налажење решења применићемо методу детерминанти.
Тада је :
Где се D назива детерминанта система.
Ако је детерминанта система D различита од 0 систем има јединствено решење.
Ако је детерминанта система D једнака 0 и бар једна од детерминанти по x
или по y различита од 0 систем је немогућ, у супротном је неодређен.
Правимо форму облика:Слика 6.20. Почетни изглед форме |
Преименујемо label-e и button1Слика 6.21. Изглед форме након преименовања компоненти |
private void button1_Click(object sender, EventArgs e)
{
//Promenljive koje koristimo
double a1, b1, c1, a2, b2, c2;
a1 = double.Parse(textBox1.Text);
b1 = double.Parse(textBox2.Text);
c1 = double.Parse(textBox3.Text);
a2 = double.Parse(textBox4.Text);
b2 = double.Parse(textBox5.Text);
c2 = double.Parse(textBox6.Text);
double D, Dx, Dy;
//D je determinanta sistema
D = a1*b2 - a2*b1;
//Kada prvu kolonu zamenimo slobodnim clanovima dobijamo Dx
Dx = c1 * b2 - c2*b1;
//Kada drugu kolonu zamenimo slobodnim clanovima dobijamo Dy
Dy = c1 * a2 - c2 * a1;
//Ako je D razlicita od 0
if (D != 0)
{
//Racunamo x
double x = Dx / D;
//Racunamo y
double y = Dy / D;
//Ispisujemo resenje
label6.Text = "Sistem ima jedinstveno resenje x = " + x + " i y = " + y;
}
//U suprotnom ako je D jenaka 0
else if (D == 0)
{
//Ako je Dx ili Dy razlicito od 0
if (Dx != 0 || Dy != 0)
//Imamo deljenje 0, ispisujemo resenje
label6.Text = "Sistem je nemoguc";
//U suprotnom ako je Dx ili Dy jedneko nuli
else
//Imamo 0/0, ispisujemo resenje
label6.Text = "Sistem je neodredjen";
}
}
Покренемо програм и проверимо (за конкретне вредности а1,
а2, b1, b2, c1 и c2)
Пример 8.Написати програм који одређује да ли квадратна једначина има реална решења и ако их има да их одреди.
Решење :
Посматрајмо квадратну једначину a*x^2+b*x+c=0.
Погледајмо како се понаша график квадратне функције када мењамо вредности коефицијената a, b и c.
|
*У случају да се анимација не приказује, притиснути дугме Прикажи слику
Правимо форму облика:Слика 6.23. Почетни изглед форме |
Преименујемо label-e и button1Слика 6.24. Изглед форме након преименовања компоненти |
private void button1_Click(object sender, EventArgs e)
{
//Promenljive koje koristimo
double a, b, c, x, x1, x2;
a = double.Parse(textBox1.Text);
b = double.Parse(textBox2.Text);
c = double.Parse(textBox3.Text);
//D je disktiminanta
double D;
D = b * b - 4 * a * c;
//Ako je diskriminanta manja od 0
if (D < 0)
//Ispisujemo resenje
label5.Text = "Kvadratna jednacina nema resenja.";
//U suprotnom ako je diskriminanta jednaka 0
else if (D == 0)
{
//U ovom slucaju kvadratna jednacina ima jedno resenje x
x = (-b) / (2 * a);
//Ispisujemo resenje
label5.Text = "Kvadratna jednacina ima jedno resenje x = " + x;
}
//U suprotnom je diskriminanta veca od 0
else
{
//U ovom slucaju kvadratna jednacina ima dva resenja x1 i x2
//Visual C# ima ugradjenu funkciju za racunanje kvadratnog korena Math.Sqrt()
x1 = (-b + Math.Sqrt(D)) / (2 * a);
x2 = (-b - Math.Sqrt(D)) / (2 * a);
//Ispisujemo resenje
label5.Text = "Kvadratna jednacina ima dva resenja x1 = " + x1 + " i x2 = " + x2;
}
}
Пример 9. Написати програм који за унете коефицијенте враћа међусобни положај две праве у равни, ако су њихове једначине задате у експлицитном облику.
Решење :
Погледајмо у каквом положају могу бити две праве, када им мењамо коефицијенте.
|
*У случају да се анимација не приказује, притиснути дугме Прикажи слику
Правимо форму облика:Слика 6.25. Почетни изглед форме |
Преименујемо label-e и button1Слика 6.26. Изглед форме након преименовања компоненти |
private void button1_Click(object sender, EventArgs e)
{
//Promenljive koje koristimo
double k1, k2, n1, n2;
//Koeficijenti prve prave
k1 = double.Parse(textBox1.Text);
n1 = double.Parse(textBox2.Text);
//Koeficijenti druge prave
k2 = double.Parse(textBox3.Text);
n2 = double.Parse(textBox4.Text);
//Ako su koeficijenti k1 i k2 jednaki
if (k1 == k2)
{
//Ako su i koeficijenti n1 i n2 jednaki
if (n1 == n2)
//Ispisujemo resenje
label6.Text = "Uneli ste koordinate iste prave.";
//U suprotnom n1 i n2 su razliciti
else
//Ispisujemo resenje
label6.Text = "Prave su paralelne.";
}
//U suprotnom su k1 i k2 razliciti
else
{
//Ako za k1 i k2 vazi da је 1+k1*k2 једнако 0
if (1 + k1 * k2 == 0)
//Ispisujemo resenje
label6.Text = "Prave su ortogonalne.";
//U suprotnom k1 i k2 su razliciti,ali ne vazi да је 1+k1*k2 једнако 0
else
//Ispisujemo resenje
label6.Text = "Prave se seku.";
}
}
Покренемо програм и проверимо (нпр. за праве са слике) :
Пример 10. Написати програм који за унете координате тачке враћа у ком квадранту у равни се налази та тачка.
Решење :
Раван је двема ортогоналним правама подељена на четири квадранта. У зависности од знака координата
тачке одредићемо њен положај.
Анимација 6.4. Положај тачке у квадрантима
|
Посебно ако унесемо (0,0) имамо координатни почетак тачка А. Ако нам је координата у=0 а х различито од 0, тачка нам се налази на х оси као тачке В и В1 у зависности да ли је х веће или мање од 0. Или ако нам је координата x=0 а у различито од 0, тачка нам се налази на у оси као тачке С и С1 у зависности да ли је у веће или мање од 0. За х и у веће од 0, тачка се налази у првом квадранту као тачка D. За х мање од 0 и у веће од 0, тачка се налази у другом квадранту као тачка Е. За х и у мање од 0, тачка се налази у трећем квадранту као тачка F. За х веће од 0 и у мање од 0, тачка се налази у четвртом квадранту као тачка G. |
*У случају да се анимација не приказује, притиснути дугме Прикажи слику
Правимо форму облика:Слика 6.28. Почетни изглед форме |
Преименујемо label-e и button1Слика 6.29. Изглед форме након преименовања компоненти |
private void button1_Click(object sender, EventArgs e)
{
//Promenljive koje koristimo
double x, y;
x = double.Parse(textBox1.Text);
y = double.Parse(textBox2.Text);
//Ako je koordinata x jednaka 0
if (x == 0)
{
//Ako je i koordinata y jednaka 0
if (y == 0)
//Ispisujemo resenje
label4.Text = "Uneli ste koordinate koordinatnog pocetka";
//Ako je koordinata y razlicita od 0
else
//Ispisujemo resenje
label4.Text = "Tacka se nalazi na y osi";
}
//Ako je koordinata x razlicita od 0
else
{
//Ako je koordinata y jednaka 0
if (y == 0)
//Ispisujemo resenje
label4.Text = "Tacka se nalazi na x osi";
//Ako je koordinata y razlicita od 0
else
//Ako je koordinata y veca od 0
if (y > 0)
{
//Ako je i koordinata x veca od 0
if (x > 0)
//Ispisujemo resenje
label4.Text = "Tacka se nalazi u prvom kvadrantu";
//U suprotnom koordinata x je manja od 0
else
//Ispisujemo resenje
label4.Text = "Tacka se nalazi u drugom kvadrantu";
}
//U suprotnom koordinata y je manja od 0
else
{
//Ako je koordinata x veca od 0
if (x > 0)
//Ispisujemo resenje
label4.Text = "Tacka se nalazi u cetvrtom kvadrantu";
//U suprotnom je koordinata x manja 0
else
//Ispisujemo resenje
label4.Text = "Tacka se nalazi u trecem kvadrantu";
}
}
}
Покренемо програм и проверимо (нпр.за тачке са слике A, B, B1,
C, C1, D, E, F, G):