петак, 27. новембар 2015.

Programerske petlje u C# programskom jeziku


Tokom programiranja često će te imati potrebu za iteracijom; da izvršavate isti blok koda više puta zaredom. Programski jezik C# za tu svrhu ima 4 različite programske petlje kojima se postiže iteracija koda sve do ispunjavanja određenog uslova. Programske petlje u C# programskom jeziku su nasleđene i identične su programskim petljama iz C++ programskog jezika. O programskim petljama u C++ programskom jeziku možete pogledati ovde, jer sve što važi za programske petlje u C++ programskom jeziku, važi i u C# programskom jeziku. Četiri programske petlje su:
  • for
  • foreach
  • while
  • do… while
Programske petlje for i foreach se u osnovi upotrebljavaju kada unapred znate koliko puta hoćete da se izvrši iteracija dok programske petlje while i do while se više koriste kada broj iteracija zavisi od vrednosti relevantnih elemenata u fazi izvršavanja programa.



( Proces rada for petlje u C# programskom jeziku )

Programska petlja for

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

for ( inicijalizator; uslov; iterator )
        iskaz (i)


Inicijalizator je u suštini brojač, deklarisana inicijalizovana promenjiva; uslov je izraz koji samo kad vraća true prelazi na sledeću iteraciju i iterator je izraz koji povećava ili umanjuje brojač. Ali najbolje da pogledate sledeći kod programa da bi ste razumeli kako se koristi for petlja u kodu.



using System;
using static System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ForLoop
{
    class Program
    {
        static void Main(string[] args)
        {

jump:
            Write("Enter a web address or 0 for exit: ");
            string webAddress = ReadLine();

            if (webAddress == "0") return;

            Console.Clear();

            if (webAddress != String.Empty)
            {          
                for (int i = 0; i < webAddress.Length; i++)
                { 
                        Console.SetCursorPosition(i, i);
                        WriteLine(webAddress[i]);
                              
                }
            }
            else
            {
                WriteLine("You didn't enter any character. Try again!");
                goto jump;

            }
                       
            ReadLine();

        }
    }
}

Kao što možete pretpostaviti, u ovom programu metoda Console.Clear(); vam omogućava da obrišete Command Prompt, dok metoda Console.SetCursorPosition(); vam određuje gde da pozicionirate kursor, pre ispisa teksta ili u ovom slučaju ispisa samo jednog karaktera. Ukoliko korisnik ne unese ništa tražiće mu se da ponovo unese ime domena. Ukoliko korisnik hoće da izađe iz programa dovoljno je da unese 0. Programerska petlja  for je jednostavna. Inicijalizovali smo joj brojač i podesili ga na 0, za uslov smo postavili da se programska petlja izvrši samo onoliko puta koliko korisnikov unos ima karaktera i za iterator smo podesili da se promenjiva uvećava za 1 tokom svake iteracije. Kad pokrenete navedeni program vaši rezultati će biti slični u zavisnosti koju ste uneli Internet adresu.
 
w
  w
    w
      .
       m
         a
           n
             u
               e
                 l
                   r
                    a
                      d
                        o
                          v
                            a
                              n
                                o
                                  v
                                    i
                                     c
                                       .
                                        c 
                                          o
                                            m


Kako izgleda navedeni program možete pogledati i na video-u:


( C# 6.0 Tutorial - Fundamentals - 12. For Loop )

Postoje specijalni slučajevi kad se petlja for ne koristi sa svim argumentima, možete čak izostaviti sve argumente u for petlji što nije preporučljivo; ali na primer ako vam je potrebna vrednost integer promenjive i van for petlje, tada možete i izostaviti argument.

int i = 0;    
               
for (; i < webAddress.Length; i++)
{ 
      SetCursorPosition(i, i);
      WriteLine(webAddress[i]);
                               
}

Programerska petlja for each

Programerska petlja foreach je zapravo u programski jezik C++ i C# došla iz programskog jezika Visual Basic. Ona se uvek koristi kad vam je potrebna iteracija kroz kolekciju. S obzirom da je string promenjiva u suštini niz tipa char, dok niz jeste kolekcija; zato se petlja foreach može koristi i za čitanje stringa slovo po slovo. Sintaksa foreach petlje je:

foreach (inicijalizator in kolekcija)
              iskaz(i);


Ukoliko pogledate prethodni program, isti takav program se može napisati i sa foreach petljom. Iako je logički u prethodnom programu bolje koristiti petlju for za čitanje karaktera iz stringa zbog kasnije potrebe i pozicioniranja istih. Sledeći kod programa će koristiti foreach petlju samo da bi ste vi imali uvid kako se koristi foreach petlja.

using System;
using static System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ForEachLoop
{
    class Program
    {
        static void Main(string[] args)
        {
jump:
                Write("Enter a web address or 0 for exit: ");
                string webAddress = ReadLine();

                if (webAddress == "0") return;

                Clear();

                if (webAddress != String.Empty)
                {             
                    int i = 0;
                    foreach (char character in webAddress)  // for this task is better use for loop   
                {
                        i++;
                        SetCursorPosition(i, i);
                        WriteLine(character);

                    }
                }
                else
                {
                    WriteLine("You didn't enter any character. Try again!");
                    goto jump;

                }

                ReadLine();
           
        }
    }
}

Kad pokrenete navedeni program, rezultat će biti isti kao i u prethodnom programu ukoliko ste uneli isti unos kao u prethodnom programu.

w
  w
    w
      .
       m
         a
           n
             u
               e
                 l
                   r
                    a
                      d
                        o
                          v
                            a
                              n
                                o
                                  v
                                    i
                                     c
                                       .
                                        c 
                                          o
                                            m

Kako izgleda navedeni program možete pogledati i na video-u:


( C# 6.0 Tutorial - Fundamentals - 13. Foreach Loop )

Petlja while

Petlja while se za razliku od for petlje koristi za ponavljanje iskaza ili bloka iskaza gde broj iteracija nije unapred poznat. Petlja while se može koristiti i bez vitičastih zagrada { } kad koristite samo jedan iskaz, ali programerska praksa ili više navika je da se vitičaste zagrade u petljama koriste. Sintaksa za while petlju je:

while (uslov)
           iskaz(i);


Da bi lakše shvatili petlju while, opet ćemo prepraviti prethodni programski kod za primer for petlje. Zahvaljujući petlji while mi ne moramo da koristimo naredbu goto i labele, nego vršimo iteraciju dok se ne ispuni uslov ili jednostavno izađemo iz while petlje naredbom braek. Pogledajte kako izgleda prepravljen programski kod for petlje koji koristi petlju while i za koji nemamo potrebe da tražimo od korisnika da unese 0 za izlaženje iz programa. Program će tražiti unos od korisnika sve dok ne unese bilo koji unos osim praznog stringa i prikazati ga ispisanog vertikalno. Ako korisnik unese 0, ona će biti prikazana kao i svaki drugi unos. Posle svakog izvršavanja while petlje, bar jednom; korisnik izlazi iz programa.

using System;
using static System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WhileLoop
{
    class Program
    {
        static void Main(string[] args)
        {
            string webAddress = String.Empty;

            while (true)
            {

                Write("Enter a web address or 0 for exit: ");
                webAddress = ReadLine();

                if (webAddress != String.Empty)
                {
                    Clear();

                    for (int i = 0; i < webAddress.Length; i++)
                    {
                        SetCursorPosition(i, i);
                        WriteLine(webAddress[i]);

                    }

                    break;
                }
                else
                {
                    WriteLine("You didn't enter any character. Try again!");

                }
            }

            ReadLine();

        }
    }
}

Kad pokrene program on vas neće prestati pitati za unos sve dok ne unesete bar jedan karakter.

Enter a web address or 0 for exit:
You didn't enter any character. Try again!
Enter a web address or 0 for exit:
You didn't enter any character. Try again!
Enter a web address or 0 for exit:
You didn't enter any character. Try again!

. . .
Enter a web address or 0 for exit: www.manuelradovanovic.com

Kad imate neki unos i pritisnete Enter onda će te dobiti rezultat:

w
  w
    w
      .
       m
         a
           n
             u
               e
                 l
                   r
                    a
                      d
                        o
                          v
                            a
                              n
                                o
                                  v
                                    i
                                     c
                                       .
                                        c 
                                          o
                                            m

Kako izgleda navedeni program možete pogledati i na video-u:

 
( C# 6.0 Tutorial - Fundamentals - 14. While Loop )

Izlazak iz navedene petlje je ovde definisan naredbom break. Inače bez ove naredbe koja omogućava izlazak iz petlje bi ste dobili beskonačnu petlju.

  while (true)
  {
     WriteLine("Beskonacna Petlja");

  }

Beskonačna petlja je programerska petlja koja vrši interacije beskonačno sve dok ne prekinete rad programa gašenjem Command Prompt-a ili prekidom izvršavanja programa u Visual Studio-u.


( Beskonačna petlja izazvana u C# programskom jeziku )

Petlja do… while

Za razliku od petlje while, petlja do… while vrši barem jednom iskaz i pre nego što se petlja počne proveravati uslov. Zato je nekad zovu i petlja sa naknadnom proverom. Inače petlja do… while je identična programskoj petlji Loop… While u Visual Basic programskom jeziku. Sintaksa do… while petlje je:

do
     iskaz(i); while (uslov);

Za razliku od prethodnih programerski petlji primera, zamislite da vam treba program koji pretvara  sekunde u sate, minute i sekunde. Naredba do… while je idealno rešenje. Pogledajte kod sledećeg programa.

using System;
using static System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DoWhileLoop
{
    class Program
    {
        static void Main(string[] args)
        {
            short hours = 0;
            short minutes = 0;
            short seconds = 0;
                               
            Write("Enter the number of seconds: ");
            bool enter = Int16.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.");

            ReadLine();
           
        }
    }
}

Kad pokrenete navedeni program, ukoliko unesete 5000 sekundi; rezultat će pokazati da su 5000 sekundi tačno 1 sat, 23 minute i 20 sekundi. Sa navedenim kodom možete uvek sekunde pretvoriti u sate, minute i sekunde.

Enter the number of seconds: 5000
You entered 1 hours, 23 minutes, 20 seconds.


Kako izgleda navedeni program možete pogledati i na video-u:

  

( C# 6.0 Tutorial - Fundamentals - 15. Do While )