Thursday, January 30, 2020

Programerske petlje u C# programskom jeziku


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

Programerska petlja for se sastoji od tri parametra: inicijalizatora, uslova i iteratora. Sintaksa programske petlje je sledeća:

for ( inicijalizator; uslov; iterator )
        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 System;
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 System;
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 whileC# 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 System;
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 )



  




No comments:

Post a Comment