Wednesday, December 04, 2019

Iskazi Odlučivanja u C# programskom jeziku


U prethodnom postu smo učili operatore poređenja i zahvaljujući poznavanju istih mi smo danas u mogućnosti da učimo iskaze odlučivanja. Zato je važno da ne preskačete postove već da učite redom jedan za drugim. Postovi na ovom blogu su povezani i omogućavaju vam da učite programiranje korak po korak. Važno je da isprogramirate sve primere. Ukoliko vam nešto nije dovoljno jasno ili ste zaboravite nešto što smo pre učili uvek se možete vratiti na neki od prethodnih postova. Ako imate neka pitanja uvek možete me pitati ovde. Takođe, iza svakog posta možete komentarisati sve što vas interesuje. Programiranje se uči programiranjem. Ali takođe treba da budete vredni i uporni. Profesionalni programeri programiraju skoro svaki dan godinama. Mnogi od njih imaju stotine svojih vlastitih malih programa koji rešavaju neke ključne male probleme i oni tačno znaju gde, kada i šta da koriste od koda i u velikim projektima. Takođe, uvek su zainteresovani za sve što je novo, bolje, praktičnije i jednostavnije. Ono što ih pokreće jeste upornost i što su sami inovativni. Uzmite bilo koji zadatak iz matematike i pokušajte sami da ga rešite na programerski način. Kad to uradite bićete ponosni sami na sebe što ste uspeli i zaista ćete se osećati srećno. Biti programer znači biti sposoban da rešite bilo koji problem na programerski način. Čak i ako ne znate kako da nešto isprogramirate, samo korak po korak i učenjem dolazite do rešenja. Programeri stalno uče i stalno ponavljaju naučeno.


( If ... else... statement ... iskaz odlučivanja )

Iskazi odlučivanja su bazirani na uslovima. Bez obzira koliko uslov bio kompleksan on se na kraju uvek svodi na boolean operator true - tačno ili  false – netačno. U programiranju je sve tačno ili netačno, ne postoji možda. Za iskaze odlučivanja koristimo if … else … iskaze ali i druge. Sintaksa if … else... ove komande je jednostavna:

if (uslov) iskaz;

Ponekad je mnogo bolje da prethodni iskaz pišete na sledeći način.

if (uslov)
{
        iskaz = true;

}

Ovo se uglavnom radi što ponekad postoji mogućnost da ćete imati u budućnosti više iskaza, pa je bolje ostaviti prostor za njih nego prepravljati if iskaz. U nekim kompanijama ovo je takođe obavezno da radite i kad mislite da za to nema potrebe.

if (uslov)
{

        iskaz1 = true;
        iskaz2 = true;
        iskaz3 = true;

}

Ponekad možete imati uslov koji će se izvršiti jedan iskaz ako je uslov tačan dok će izvršiti drugi iskaz ako nije tačan:

if (uslov)
{
        iskaz1;

}
else
{
        iskaz2;

}

Ponekad možete imate više uslova:

if (uslov1)
{
        iskaz1;

}
else if (uslov2)
{
        iskaz2;

}
else
{
        iskaz3;

}

Ponekad ćete hteti da u jednom uslovu, postavite drugi ili više njih i to možete da radite. To se zove grananje. Skoro sva AI - Artificial Intelligence – veštačka inteligencija je bazirana na iskazima odlučivanja i to je mnogo bitna stvar nego što vi sada možete i da pretpostavite. Iskazi odlučivanja se često koriste, skoro u svakom programu i one odlučuju tok celog vašeg programa. Takođe, vi ste jedino odgovorni ukoliko imate neke greške u očekivanim rezultatima tokom grananja if… else... iskaza i niko drugi.

Praktični primer If … else iskaza


Pokrenite Visual Studio Code, kreirajte novi folder if_else_statments, izvršite komandu dotnet new console u Terminal panelu i unesite sledeće linije koda:

using System;

using static System.Console;

namespace if_else_statments

{

class Program

{

static void Main(string[] args)

{

Clear();

jump:

Write("Enter an integer from 1 to 7: ");

bool num = Byte.TryParse(ReadLine(), out byte number);

if (num == false)

{

goto jump;


}


if (number < 1)

{

goto jump;


}

else if (number > 7)

{

goto jump;


}

else

{

WriteLine();

WriteLine("The test succeeded!");

WriteLine();

}

}

}

}

U prvom postu našeg bloga ste učili kako da ispišete tekst na Terminal panelu, u drugom postu ste učili kako da preuzmete vrednost od korisnika i dodelite je promenjivoj i u prethodnom postu ste učili kako da preuzmete vrednost od korisnika i da izbegnete grešku ukoliko korisnik nije uneo ispravnu vrednost. Sad ćete naučiti kako da uzmete vrednost od korisnika i ako korisnik ne unese pravilno vrednost onda da tražimo od njega da ponovo unese vrednost. S obzirom da početnici u programiranju nisu još učili programerske petlje, koristićemo komandu goto koja je zastarela i koja se više ne koristi u programiranju. Umesto komande goto uvek se koriste programerske petlje. Programerske petlje ćemo učiti u sledećem postu. Do tada ćemo koristiti komandu goto jer je rešenje našeg problema i bez upotrebe petlji. Kada korisnik pogreši vrednost koju tražimo od njega biće mu omogućeno da ponovo unese vrednost i to će se ponavljati dok god korisnik ne unese tačnu vrednost.

jump:

goto jump;

Pre upotrebe komande goto napravi se labela, gde želite da izvršavanje programa skoči. Labela se pravi tako što joj se da jedinstveno ime i iza naziva labele se stavi dvotačka : . Kad izvršavanje programa dođe do komande goto, izvršavanje programa skače na labelu. To u našem slučaju znači kada korisnik unese pogrešnu vrednost, program neće prijaviti grešku, nego će ponovo pitati korisnika da unese vrednost od 1 do 7. Obratite pažnju da smo promenjivu number deklarisali kao tip promenjive byte zbog malog opsega potrebnog broja. Kad pokrenete ovaj kod dobićete slične rezultate u zavisnosti od vašeg unosa vrednosti.

Enter an integer from 1 to 7: jkjhkh
Enter an integer from 1 to 7:
Enter an integer from 1 to 7: -5
Enter an integer from 1 to 7: 100
Enter an integer from 1 to 7: 10000000000000
Enter an integer from 1 to 7: 11
Enter an integer from 1 to 7: 5

The test succeeded!

Sad umesto ispisa na Terminal panelu da je test uspeo, ubacićemo u else statement deo iskaza još jednu if … else... strukturu i to je praktičan primer za grananje. Ovo se može uraditi i na drugačije načine ali poenta je da naučite i razumete šta je grananje.

...

else

{

WriteLine();


// WriteLine("The test succeeded!");


if(number == 1)

{

WriteLine($"{number} day in a week is Monday");


}

else if (number == 2)

{

WriteLine($"{number} day in a week is Tuesday");

}

else if (number == 3)

{

WriteLine($"{number} day in a week is Wednesday");

}

else if (number == 4)

{

WriteLine($"{number} day in a week is Thursday");

}

else if (number == 5)

{

WriteLine($"{number} day in a week is Friday");

}

else if (number == 6)

{

WriteLine($"{number} day in a week is Saturday");

}

else

{

WriteLine($"{number} day in a week is Sunday");


}

}

WriteLine();



Kad pokrenete navedeni kod dobićete sličan rezultat u zavisnosti od vašeg unosa vrednosti:

Enter an integer from 1 to 7: 5

5 day in a week is Friday

Kako izgleda prethodni program možete videti i na video-u:


( C# & .NET Core - 7. If ... Else Statements )

Logički operatori

U prethodnom postu „Operatori u C# programskom jeziku“ smo rekli da ćemo objasniti i druge operatore koje nismo učili u prethodnim postovima. S obzirom da se sa iskazima odlučivanja mogu koristiti i logički operatori, u ovom postu ćemo objasniti i logičke operatore. Za razliku od operatora poređenja, logički operatori se svode na samo tri logičke operacije:

·         && - Logical AND operator – logično I
·         ||   - Logical OR operator – logično ILI
·         !      - Logical NOT operator – logična NEGACIJA

Logički operatori imaju osobinu koja je nazvana kraće izvršenje. To znači da ponekad nije ni potrebno znati vrednost obadva operanda. Na primer kada koristite logični AND operator (&&); ako je u nekom uslovu levi operand jednako false, onda nema potrebe da se provera desni operand jer je celi uslov onda false. To takođe znači da vaš program neće proveravati desni operand. I to takođe znači da će vaš program raditi brže i koristiti manje memorije. Logički operatori takođe imaju svoje prioritete. Logički operator AND ima veći prioritet nego logički operator OR. Zatvorite folder u vašem Visual Studio Code prethodnog programa. Zatim kreirajte novi folder logic_operators i otvorite ga. Otkucajte komandu dotnet new console i sačekajte da IDE okruženje kreira dodatne fajlove. Kliknite na fajl Program.cs i ukucajte sledeći kod:

using System;

using static System.Console;

namespace logic_operators

{

class Program

{

static void Main(string[] args)

{

Clear();

jump1:

Write("Enter first integer number from 1 to 100: ");

bool num1 = Byte.TryParse(ReadLine(), out byte a);

if (!num1) goto jump1;

if ( a < 1 || a > 100) goto jump1;

jump2:

Write("Enter second integer number from 1 to 100: ");

bool num2 = Byte.TryParse(ReadLine(), out byte b);

if (!num2) goto jump2;

if ( b < 1 || b > 100) goto jump2;

WriteLine();

WriteLine($"Logic operator AND - && : {(a <= b) && (b > 50)}");

WriteLine($"Logic operator OR - || : {(a <= b) || (b < 50)}");

WriteLine($"Logic operator NOT - ! : {!(a <= b)}");


WriteLine();

}

}

}

Zahvaljujući logičkim operatorima već smo skratili kod za proveru ispravnog unosa vrednosti od korisnika, ukoliko poredimo to sa prethodnim programom. Međutim, u ovom programu tražimo od korisnika da unese dve vrednosti. Zato moramo da koristimo dve goto labele za svaki unos vrednosti od korisnika. Kada imamo dve vrednosti a i b onda proveravamo prvu logičku vrednost AND:

(a <= b) && (b > 50)

Zatim proveravamo logičku vrednost OR:

(a <= b)||(b > 50)

I na kraju proveravamo logičku vrednost NOT

!(a <= b)

Pokrenite program komandom dotnet run i testirajte program:

Enter first integer number from 1 to 100:
Enter first integer number from 1 to 100: kjhkjh
Enter first integer number from 1 to 100: -5
Enter first integer number from 1 to 100: 105
Enter first integer number from 1 to 100: 27
Enter second integer number from 1 to 100: hkhkhk
Enter second integer number from 1 to 100: 105
Enter second integer number from 1 to 100: 75

Logic operator AND - && : True
Logic operator OR - || : True
Logic operator NOT - ! : False

Ovaj program možete pogledati i na video-u:


( C# & .NET Core - 8. Logic Operators )

Šta je ternarni ?: operator?

Ternarni operator, kondicionalni ili uslovni operator je poput jednostavnog  if… else... iskaza ali se razlikuje. Koristite ga u situacijama kad imate jednostavan if… else... iskaz koji želite da vam vrati jednu ili drugu vrednost i dodeli nekoj promenjivoj. Sintaksa je jednostavna:

variable = condition? first expression : second expression

To znači da uslov ne može stajati sam od sebe kao
if… else... iskaz već mora biti dodeljen nekoj promenjivoj pa makar indirektno. Imate uslov koji mora biti dodeljen nekoj promenjivoj; jednostavno iza uslova stavite upitnik ? i iza upitnika; dodelite vrednost kad je uslov ispunjen, dok iza dvotačke : navedite vrednost koju dodeljujete kad uslov nije izvršen. Ternarni operator se najviše koristi kod Linq upita. Napravite sledeći program. Nazovite ga ternary_operator.

using System;

using static System.Console;

namespace ternary_operator

{

class Program

{

static void Main(string[] args)

{

Clear();

jump:

Write("Enter an integer from 1 to 100: ");

bool num = Byte.TryParse(ReadLine(), out byte number);

if(!num) goto jump;

num = (number < 1 || number > 100) ? false : true;

if (!num) goto jump;

WriteLine( Environment.NewLine + "Your entered value is passed test!" + Environment.NewLine);

}

}

}

Kad pokrenete program dobićete sličan rezultat u zavisnosti od unosa vrednosti korisnika.

Enter an integer from 1 to 100: sgsggg
Enter an integer from 1 to 100:
Enter an integer from 1 to 100: -9
Enter an integer from 1 to 100: 119
Enter an integer from 1 to 100: 50

Your entered value is passed test!

Ovaj program možete pogledati i na video-u:


( C# & .NET Core - 9. Ternary Operator )

Korišćenje iskaza switch… case...

U prvom programu if_else_statements videli ste šta je grananje uslova, kada smo koristili else if iskaz u strukturi if… else... isakaza, da bi smo odredili koji broj predstavlja dan u nedelji. Ponekad možete doći u situaciju da imate mnogo više else if uslova i tada je mnogo bolje da koristite switch case iskaz, jer je bolji i efikasniji. Sintaksa Switch... case... iskaza je:

switch (expression)

         case constant-expression : 
                 statement; 
                 break; 

         case constant-expression :       
                 statement; 
                 break;
         . . .

default :  

               statement;
               break;

}



( Switch ... case ... statement ... iskaz odlučivanja )

Iskaz 
switch... case... se ne može koristiti kod svh tipova podataka. Za neke tipove će te morati koristiti if… else...  iskaz. Takođe obratite pažnju da case konstante ili case labele su konstante i ne mogu se koristiti za izračunavanja. Takođe, case labele ne mogu imati istu vrednost. Napravite sledeći program i nazovite ga switch_case_statement.

using System;

using static System.Console;

namespace switch_case_statment

{

class Program

{

static void Main(string[] args)

{

Clear();

jump:

Write("Enter an integer from 1 to 12: ");

bool num = Byte.TryParse(ReadLine(), out byte number);

if(!num) goto jump;

string month = String.Empty;

switch (number)

{

case 1:

month = "January";

break;

case 2:

month = "February";

break;

case 3:

month = "March";

break;

case 4:

month = "April";

break;

case 5:

month = "May";

break;

case 6:

month = "June";

break;

case 7:

month = "July";

break;

case 8:

month = "August";

break;

case 9:

month = "September";

break;

case 10:

month = "October";

break;

case 11:

month = "November";

break;

case 12:

month = "December";

break;

default:

goto jump;

}

WriteLine();

WriteLine($"{number} month in a year is {month}");

WriteLine();

}

}

}


Kad pokrenete program dobićete sličan rezultat u zavisnosti od unosa vrednosti korisnika.

Enter an integer from 1 to 12: gadga
Enter an integer from 1 to 12:
Enter an integer from 1 to 12: -8
Enter an integer from 1 to 12: 40
Enter an integer from 1 to 12: 5000
Enter an integer from 1 to 12: 0
Enter an integer from 1 to 12: 12

12 month in a year is December  

Ovaj program možete pogledati i na video-u:


 ( C# & .NET Core - 10. Switch Case Statement )






No comments:

Post a Comment