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.
{
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.
{
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:
{
iskaz1;
}
else
{
iskaz2;
}
Ponekad
možete imate više uslova:
{
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 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.
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 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.
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 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 (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 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:
No comments:
Post a Comment