Zanke

Zanke while

 Poskusimo to:

        void main() {
 
               // 1.  napoved in iniciacija spremenljivk
               int stevilo = 1;
 
               // 2.  tu se zacne zanka while
               while(stevilo < 5 )
               {
                    printLine("stevec je enak " + stevilo);
                    // 3.  stevec povecamo za 1
                    stevilo = stevilo + 1 ;
               }
 
               // 4.  zanka se je iztekla,
               // tako se program tu nadaljuje
               printLine("In to je vse");
        }

kakšen izpis dobimo?

stevec je enak 1
stevec je enak  2
stevec je enak  3
stevec je enak  4
In to je vse

Razlaga  zgornjega programa:

  1. Vzpostavimo števec in ga nastavimo na začetno vrednost 1
  2. Zanka while ( stavki v zavitih oklepajih za besedico while) se bo ponavljala tako dolgo, dokler bo držal pogoj, zapisan v okroglih oklepajih za besedico while (dokler bo vrednost tega pogoja "true"). Ko pa ta pogoj ne velja več in je zato vrednost tega izraza "false" ( stevilo = 5 ali večje) , se ponavljanje v zanki zaustavi. Tedaj stavke v zavitih oklepajih enostavno preskočimo.
  3. Število povečamo  za 1. To se dogaja pri vsaki ponovitvi zanke, torej dokler je pogoj  (stevilo<5) enak "false". 
  4. Program se nadaljuje pri naslednji vrstici in zato izpiše  "In to je vse". 

Zanke so ponavljajoče se skupine stavkov. V primeru zanke while velja naslednja splošna formula:

        while(ta stavek je true)
        {
               // izvajaj stavke oziroma vrstice med temi oklepaji
               // (običajno povecaj nek števec)
        }
        // in nadaljuj program z nasledjimi vrsticami

Na primer:

   while(x <5)
   {
      printLine(" x = " + x);
      x = x + 1;
   }

Kakšen bi bil izpis pri izvedbi zgornje kode?


Diagram poteka zanke while

Vaje:

  1. Preskusi zgornji primer tako, da vrstico  x = x + 1 zakriješ v komentar.
 void main() {
    while(x <5)
    {
       printLine(" x = " + x);
       // x = x + 1;
    }
 }
 
  
  1. Poskusi še druge programe, tako da zakomentiraš vrstice, ki naj se tako ne izvedejo. Pogojno spremenljivko lahko v zanki tudi drugače spreminjaš (povečuješ ali zmanjšuješ za več kot 1).
  2. Kaj se zgodi ? Zakaj ?
  3. Odpravi napake v naslednjem programu:
 void main() {
     count = 0;
     while( Count < 8 )
     {
        Printline("Count is equal to " count);
        }
 
        

Zanke do .. while 

Zanke do while so podobne zankam  while. Razlikujejo se v tem, da pogoj preverjamo šele po prehodu čez skupino ponavljanih stavkov. Splošna oblika zank do .. while je naslednja:

               do
               {
                       // izvedi kodo med zavitima oklepajema
               }
               while(velja pogoj(je enak true))

Opazimo, da bo koda zanesljivo vsaj enkrat izvedena, saj pogoj preverjamo šele na koncu zanke. V večini primerov je prejšnja oblika zanke boljša, saj preverja pogoj pred vstopom v ponavljano kodo.  Preskusimo naslednjo kodo:

   int y = 10 ;
   printLine("Stetje navzdol ..");
   do
   {
       printLine(".. " + y);
       y = y - 1;
   }
   while( y >1 )
   printLine("Buuum");

Poskusimo !! Kaj dobimo?

Diagram poteka zanke do..while

Vaje

  1. Katera vrsta zanke izvede najmanj en prehod čez zanko. ?
  2. Kakšen izpis dobimo pri izvedbi naslednje kode:
 

void main() {
           int counter = 10;
   while( counter > 1)
          {
      printLine(" " + counter +
       " green bottles hanging on the wall");
      printLine(" " + counter +
        " green bottles hanging on the wall");
      printLine("And if one green bottle should accidently fall, ");
      printLine("There'd be " + counter-1 +
        " green bottles hanging on the wall");
        counter = counter - 1;
             }
}
  1. Zapoj, kar si pravkar izpisal.
  2. Kdaj preverjamo logični izraz v zanki  do .. while ?
  3. Izpiši skupino sodih števil od 20 do30.
  4. Izpiši števila med 27 in 35.


Zanka for 

 Zanke for so v bistvu zgoščen zapis za:

In to kar v enem stavku!

Preden pa se tega lotimo, moramo spoznati še...:

 ...  operator povečevanja ( ++ )

Zapis
        x++; 

pomeni isko, kot

        x = x + 1; 

x++ poveča vrednost  x za 1 . Poglejmo, kako bi to lahko uporabili v zanki while:

   int x = 0 ;    // napoved in iniciacija stevca x
   while( x < 5)
   {
       printLine(" x = " + x );
       // dodaj 1 vrednosti x
       x++;    // isto kot (x = x + 1)
   }

 

Podobno imamo ...

 ... operator zmanjševanja ( -- )

y-- zmanjša y za 1

 y-- ;  

je isto kot

        y = y - 1 ;

Poskusimo naslednje :

   int y = 10 ;
   while( y > 0)
   {
      printLine(" Sedaj imamo " + y);
      y-- ;
   }

Povrnimo se sedaj k zanki for:.

Zanka for vzpostavi vse pogoje zanke v oklepajih za besedico for.
Primer A.

  for(int x = 0 ; x < 10 ; x++)
  {
     printLine("x = " + x);
  }

Splošna oblika zanke for je naslednja:

 
   for(  INICIACIJA števca  ; logični POGOJ ;  ITERACIJA )
   {
      // ponavljana koda.
   }

Iteracija pomeni ponavljanje. Običajno pomeni to povečevanje ali zmanjševanje nekega števca, torej na primer (x++) ali ( y--).
V primeru A smo kot iniciacijski stavek zapisali  int x = 0;
ta stavek deklarira x kot celoštevilčno spremenljivko in postavi njegovo vrednost na  0, vse to kar istočasno.
Logični pogoj je  x < 10 ; Ta stavek torej preverja x. Če je pogoj izpolnjen, se stavki v zanki lahko izvedejo oziroma ponovijo,Če pa pogoj ni izpolnjen  in je torej false  ( x=10 ali x > 10 ), se ponavljani stavki preskočijo in program se nadakljuje s stavki, ki sledijo  { zavitim oklepajem }.

Primer B. Štejmo navzdol od 10 do 1

   for(int x = 10 ;  x>0 ; x--)
   {
      printLine(x);
   }