Da
li ste ikad čuli za interaktivne iskaze? To vam je u suštini zastrašujuća nova terminologija
koja se koristi u najnovijim prevodima informatičke literature koja samo zbunjuje
programere. Reč je naravno o programerskim petljama. U jednom od zadnjih
postova, učili smo if i switch iskaze odlučivanja sa kojima možete da ispitate neki uslov i
onda na primer da prikažete rezultat baziran na ispunjavanju iskaza na ekranu.
Na primer ako osoba ima 18 ili više godina onda je osoba punoletna ali ako osoba
nema 18 ili više godina onda nije. Otkucate uslov u programu i jednostavno
rezultat prikažete na ekranu. Ali šta ako na primer želite da ispišete 1000
puta na ekranu da je osoba punoletna? Znam da nema nikakve logike da to radite,
ali čisto radi primera; kako će te to uraditi? Nećete valjda napisati 1000 if
iskaza? Ili još jednostavniji primer, kako ćete reči računaru da vam ispiše
brojeve od 1 do 1000 na ekranu? Da li će te vi ispisati svaki broj u programu da
se ispiše na ekranu? Da li ćete ispisati u programu 1000 redova linijskog koda
da bi ste uradili tako jednostavnu stvar? Naravno, da nećete; upravo zato imamo
programerske petlje koje bez obzira koliko imate iteracija ili bolje rečeno bez
obzira koliko se petlja puta bude izvršavala, vi je pišete samo jednom u par
linija koda. Programerske petlje jednostavno se izvršavaju koliko god je neophodno puta sve
dok ne izvrše zadati uslov i na taj način izuzetno i precizno rešavaju mnogobrojne zadatke na tako jednostavan način iteracijom.
( Programerske petlje u C# programskom jeziku )
Da
stvari budu još bolje, vi imate čak četiri vrste programskih petlji u C# programskom jeziku koje još više olakšavaju rešavanje bilo kojeg zadatka koji
zahteva iteraciju. Međutim da bi ste to postigli takođe je potrebno da znate i
kada koju od tih četiri programerske petlje da koristite. Prvo da nabrojimo
koje su to četiri petlje. Prva programerska petlja je for petlja. Na primer u Visual Basic .Net programskom jeziku ista petlja se zove i for
next petlja. Druga je foreach programerska petlja, treća while programerska petlja i četvrta je do while programerska petlja. Možete ih zvati i interaktivni iskaz ili na primer for statement. To je
do vas ili do pravila kompanije u kojoj radite. Na primer kad radite u nekoj kompaniji
ne možete da prilikom komentarisanja vašeg koda u komentaru da pišete petlja,
već statement iako je retkost da neka od kompanija dozvoljava da uopšte pišete
komentare na srpskom jeziku. Sve u svemu, želim da razumete da ćete u
programiranju često koristiti programerske petlje, ponekad i programerske petlje u drugim programerskim petljama najčešće u
radu sa nizovima o kojima ćemo pisati u nekim od sledećih postova. Za sada ćemo
se koncentrisati na svaku programersku petlju ponaosob, svaka će pratiti
praktični primer i objašnjenje kad je koju najbolje koristiti. Čak iako ste
upoznati sa programerskim petljama, pročitajte ovaj post do kraja. Koristiće vam
više nego što mislite!
Programerska
petlja for
for ( inicijalizator; uslov;
iterator )
iskaz (i)
iskaz (i)
Inicijalizator
je u suštini brojač, to je jednostavno deklarisana inicijalizovana promenjiva.
Uslov je uslovni iskaz koji samo kada vraća vrednost true tj. ispunjava uslov;
prelazi na sledeću iteraciju, tj. petlja se ponovo izvršava i iterator je iskaz
koji povećava ili umanjuje brojač. Znam, da ovo teoretski sve zvuči
komplikovano ali u kodu to je jednostavna stvar. Programska petlja for se
koristi kada imate potrebu da koristite njen inicijator za razne zadatke ili na
primer da menjate podatke u nizu. Vi možete da izostavite bilo koji parametar
for programske petlje i ona će i dalje raditi ali vam ne preporučujem da to
radite sa uslovom jer ćete onda dobiti beskonačnu petlju tj. petlja koja će se
stalno izvršavati dok ne zaustavite program na silu. Pokrenite vaš Visual
Studio Code, napravite novi program i nazovite ga for_loop. Zatim unesite
sledeći kod:
using System;
using static System.Console;
namespace for_loop
{
class Program
{
static void Main(string[] args)
{
jump:
Write("Enter your full name or 0 for exit: ");
string name = ReadLine();
if(name == "0") return;
Clear();
if (name != String.Empty)
{
WriteLine();
for (int i = 0; i < name.Length; i++)
{
SetCursorPosition(i, i);
WriteLine(name[i]);
}
}
else
{
WriteLine("You didn't enter any character. Try again!");
goto jump;
}
WriteLine();
}
}
}
U
ovom primeru tražimo od korisnika da unese svoje ime i prezime ili da unese 0
kako bi program mogao da napusti improvizovanu petlju. Kad kažem improvizovanu
petlju mislim na upotrebu labele jump i komande goto. Ako pažljivo pogledate
shvatićete da program skače na labelu ukoliko ne unesete neku vrednost i na taj
način se ponaša kao petlja. U ovom slučaju skokovi se ponavljaju sve dok je
uslov za skok ispunjen. Pogledajte zatim programsku petlju for. Ona obavlja više
komplikovanih zadataka odjednom. Programska petlja for se izvršava od 0 ili od
prvog karaktera u stringu sve dok ima karaktera u stringu. Tačnije od vašeg
prvog slova imena do zadnjeg slova prezimena. Možete se pitati zašto broji od 0 a ne od 1. Zato što je string jedan specijalna vrsta niza karaktera, dok
svi nizovi broje svoje pozicije od nule.
Da sad ne komplikujemo, o nizovima ćete učiti u jednom od sledećih postova. Takođe,
obratite pažnju da inicijator u programerskoj petlji for se u ovom primeru
takođe koristi i za pozicioniranje slova ili karaktera i njegov ispis na terminalu.
To možemo da radimo zato što je inicijator u suštini samo broj od 0 do onog
broja koliko ima unos uključujući i razmak između vašeg imena i prezimena. Ako
se pitate kako for programska petlja zna koliko ima karaktera u stringu, pa
jednostavno koristi properti Length koji daje tačan broj elemenata u nizu ili u
ovom slučaju tačan broj u stringu tj. slova i praznog prostora u vašem imenu i
prezimenu. Kad izvršimo program, rezultat će biti sličan u zavisnosti kako se
vi zovete.
Enter
your full name or 0 for exit: Manuel Radovanovic
M
a
n
u
e
l
R
a
d
o
v
a
n
o
v
i
c
Kako
sve ovo izgleda možete pogledati i na sledećem video-u.
( C# & .NET Core - 11. For Loop )
Programerska
petlja foreach
Za
razliku od for programske petlje, programska petlja foreach se koristi za
izvršavanje bloka iskaza na svakoj stavci u sekvenci u nizu. Ali obratite
pažnju da i pored toga što je foreach petlja bolja i brža od programerske
petlje for jer je read-only samo za čitanje, što znači da ne možete da modifikujete sekvencu
u vreme izvršavanja petlje jer ćete dobiti grešku. Da pojednostavimo; ako
hoćete samo da pročitate podatke iz nekog niza ili iz baze podataka onda
koristite foreach programersku petlju jer je bolja i brža, međutim ako tokom iteracije
iste hoćete da menjate elemente iz niza onda foreach programska petlja nije za taj posao i neće moći izvršiti zadatak. Vremenom i praksom ćete i sami na neki način
znati kad tačno da koristite programsku petlju for a kada foreach. Napravite novi sledeći program i nazovite ga foreach_loop i unesite
sledeći kod. Samo ćemo u prethodnom kodu zameniti programske petlje
iako u ovom slučaju je bolje koristiti for programsku petlju jer vidite i sami
da u suprotnom morate dodati promenjivu i.
using static System.Console;
namespace for_each_loop
{
class Program
{
static void Main(string[] args)
{
jump:
Write("Enter your full name or 0 for exit: ");
string name = ReadLine();
if (name == "0") return;
Clear();
if (name != String.Empty)
{
WriteLine();
// for this task is better use for next loop!
int i = 0;
foreach (char character in name)
{
i++;
SetCursorPosition(i, i);
WriteLine(character);
}
}
else
{
WriteLine("You didn't enter any character. Try again!");
goto jump;
}
WriteLine();
}
}
}
Kad
izvršite program dobićete isti rezultat kao u prethodnom programu.
Enter
your full name or 0 for exit: Manuel Radovanovic
M
a
n
u
e
l
R
a
d
o
v
a
n
o
v
i
c
Kako
sve ovo izgleda možete pogledati i na sledećem video-u.
( C# & .NET Core - 12. Foreach Loop )
Programska
petlja while
Jedna
od najboljih stvari kod programerske petlje while jeste upravo mogućnost da se petlja
izvršava sve dok je uslov tačan. Još interesantnija stvar je što se programerska
petlja while neće ni pokrenuti ukoliko uslov nije tačan što je zaista izuzetno.
Mi smo već u mnogo navrata koristili komandu goto i labelu jump da bi smo vratili
i ponovili izvršavanje dela programa kada bi nam korisnik uneo pogrešnu
vrednost. Da li mislite da je vreme da prestanemo to da koristimo? Zahvaljujući
programskoj petlji while, mislim da smo pronašli zamenu iako se nekima ta
zamena neće svideti jer se čovek lako navikne na prve početničke komande koje uči. Na primer prve i
osnove komande programskog jezika Basic koje sam učio polovinom 80-tih nikad
nisam zaboravio. Možda i mi nećemo naredbu goto odbaciti u potpunosti ali
definitivno je nećete videti u mnogim projektima ukoliko nisu stariji jedno 20
godina. Pogledajmo, kako izgleda isti prethodni program kada zamenimo komandu
goto programskom petljom while. Nazovite novi
program while_loop i unesite sledeći kod:
using static System.Console;
namespace while_loop
{
class Program
{
static void Main(string[] args)
{
string name = String.Empty;
while (true)
{
Write("Enter your full name or 0 for exit: ");
name = ReadLine();
if (name == "0") return;
if (name != String.Empty)
{
Clear();
WriteLine();
for (int i = 0; i < name.Length; i++)
{
SetCursorPosition(i, i);
WriteLine(name[i]);
}
break;
}
else
{
WriteLine("You didn't enter any character. Try again!");
}
}
WriteLine();
}
}
}
Kao
što možete videti u kodu nemamo više komandu goto i labelu jump. Interesantno
je da ovde koristimo programsku petlju while na rizičan način. Naš postavljeni uslov
true je mogao da izvršava petlju beskonačno ali zahvaljujući iskazu break imamo
izlaz iz petlje. Nemojte, to mešati sa iskazom return. Iskaz return je izlaz iz
funkcije. U navedenom primeru ukoliko korisnik unese vrednost 0, izvršavanje
programa izlazi iz main funkcije i završava program u terminalu. Kad pokrenemo
program dobićemo iste rezultate kao prethodni programi. Ovo je treći i zadnji
način kako da iskodirate isti program. Tako da uvek imajte u vidu da jednu istu
stvar možete isprogramirati na više načina ali uvek trebate da se držite onog
koda koji je bolji i jednostavniji.
Enter
your full name or 0 for exit: Manuel Radovanovic
M
a
n
u
e
l
R
a
d
o
v
a
n
o
v
i
c
Kako
sve ovo izgleda možete pogledati i na sledećem video-u.
( C# & .NET Core - 13. While Loop )
Programska
petlja do while
I
došli smo do četvrte i zadnje programske petlje do while u C# programskom jeziku.
U nekoj informatičkoj literaturi ovu programsku petlju zovu i skraćeno do programska
petlja. Čim vidite kako se ova programerska petlja zove prvo što vam padne na
pamet jeste pitanje koja je razlika između do while i while programske petlje?
Razlika je u tome što do while programska petlja se proverava na kraju bloka
iste. To takođe znači da se ova petlja izvršava najmanje jedanput i ako uslov
nije tačan. Ponekad ćete imati potrebu u programiranju da vam se programerska
petlja izvrši makar jedanput. U tom slučaju ova programerska petlja je najbolji
izbor. Za razliku od prethodnih primera, u sledećem primeru ćemo pretvarati
sekunde u sate, minute i sekunde. Ovaj zadatak je bio jedan od mojih prvih i
najdraži zadataka još dok sam učio Basic programski jezik i kupio svoj prvi
računar 1997 godine. Čitajte o tome ovde, a za sada imajte u vidu da sam taj
zadatak ja rešio sam iz svoje glave i nisam znao kako to drugi rešavaju.
Jednostavno sam zamislio 3 bureta, pa kad istresete 60 litara vode u bure za
sekunde onda to bure ispraznite dok u bure za litre sipate 1 litar vode. Kad
napunite bure za minute, onda isto tako uradite sa buretom za sate. Onda sam
svoju burad zamenio programskom petljom do while. Napravite novi program i
nazovite ga do_while_loop, zatim unesite sledeći kod:
using static System.Console;
namespace do_while_loop
{
class Program
{
static void Main(string[] args)
{
int hours = 0;
int minutes = 0;
int seconds = 0;
Write("Enter the number of seconds: ");
bool enter = Int32.TryParse(ReadLine(), out seconds);
do
{
if (seconds > 59)
{
seconds -= 60;
minutes++;
}
if (minutes > 59)
{
minutes -= 60;
hours++;
}
} while ( seconds > 59 );
WriteLine($"You entered {hours} hours, {minutes} minutes, {seconds} seconds.");
WriteLine();
}
}
}
Znači
od korisnika uzimamo sekunde i ukoliko korisnik pogreši unos, program će se
završiti ali neće pitati korisnika da ponovo unese sekunde, niti će izazvati
grešku. Mogli smo ovde dodati programersku petlju while ali nisam to uradio da bi
ste bili što više koncentrisani na programersku petlju do while. Ova petlja u
programu proverava koliko ima sekundi i ukoliko sekundi ima manje od 59 onda prestaje
da se izvršava. Ukoliko bi ste imali unos od korisnika manji od 59 onda bi se do
while programska petlja izvršila samo jedanput jer se ona uvek izvršava najmanje
jedanput. Dva if iskaza nam omogućavaju da pretvaramo sekunde u minute i minute
u sate. Pokrenite program i ukoliko uneste na primer 75 000 sekundi dobićete sledeći
rezultat:
Enter
the number of seconds: 75000
You
entered 20 hours, 50 minutes, 0 seconds.
Kako
sve ovo izgleda možete pogledati i na sledećem video-u.
( C# & .NET Core - 14. Do While Loop )
Nema komentara:
Objavi komentar