Prijeđi na sadržaj

While petlja

Izvor: Wikipedija

U većini računalnih programskih jezika, while petlja je naredba upravljanja tokom koja dopušta opetovano izvršenje koda u ovisnosti o danom bulovskom uvjetu. While petlja se može shvatiti kao ponavljajuća if naredba.

While konstrukt se sastoji od bloka koda i uvjeta. Uvjet je prvo evaluiran - ako je uvjet logička istina, kod se unutar bloka izvršuje. Ovo se ponavlja sve dok uvjet ne postane lažan. S obzirom na to da while petlja provjeruje uvjet prije izvršenja bloka koda, upravljačka je struktura često poznata kao pred-test petlja. Valja je usporediti s do while petljom koja ispituje uvjet nakon izvršenja petlje.

Primjerice, u C-u (kao i u Javi i C++u, koji koriste istu sintaksu u ovom slučaju), odsječak koda

 x = 0;
 while (x < 3)
 {
    x++;
 }

prvo provjeruje je li x veći od 3, a s obzirom na to da nije, inkrementira ga za 1. Potom opet provjeruje dani uvjet, opet izvršuje, ponavljajući ovaj postupak sve dok varijabla x ne dosegne vrijednost 3.

Valja uočiti da je moguće, u nekim slučajevima čak i poželjno, da se uvjet uvijek evaluira u logičku istinu, stvarajući beskonačnu petlju. Kad se takva petlja hotimice stvori, obično postoji neka druga upravljačka struktura (poznata kao break naredba) koja upravlja terminacijom petlje.

Demonstracija while petlji

[uredi | uredi kôd]

Ove će petlje izračunati faktorijelu broja 5:

  'Inicijaliziraj varijable
  Dim brojac as Integer : brojac = 5
  Dim faktorijela as Long : faktorijela = 1
  Do While brojac > 0
    faktorijela = faktorijela * brojac     'Množi
    brojac = brojac - 1                    'Dekrementiraj
  Loop
  Print faktorijela                        'Ispiši rezultat.
  Dim brojac as Integer = 5
  Dim faktorijela as Integer = 1
  While brojac > 0
    faktorijela = faktorijela * brojac     // Množi
    brojac = brojac - 1                    // Dekrementiraj
  Wend
  MsgBox Str( faktorijela )                // Ispiši rezultat.
  unsigned int brojac = 5;
  unsigned long faktorijela = 1;
  while (brojac > 0)
  {
    faktorijela *= brojac--;               /* Množi pa dekrementiraj. */
  } 
  printf("%i", faktorijela);
  my $brojac = 5;
  my $faktorijela = 1;
  while ( $brojac > 0 ) 
  {
      $faktorijela *= $brojac--;           # Množi pa dekrementiraj
  }
  print $faktorijela;

Vrlo slično C i C++ rješenju, s tim da se while petlja mogla također napisati jednom linijom koda:

  $faktorijela *= $brojac-- while $brojac > 0;

While petlje se često koriste za čitanje podataka liniju po liniju (kao što je definirano linijskim separatorom $/) iz otvorenih datotečnih ručica:

  open ULAZ, "<test.txt";
  while ( <ULAZ> )
  {
    print;
  }
  close ULAZ;
 $brojac = 5;
 $faktorijela = 1;
 while($brojac > 0) {
   $faktorijela *= $brojac--; 	          // Množi pa dekrementiraj.
 }
 echo $faktorijela;

Tcl (Tool command language)

[uredi | uredi kôd]
  set brojac 5
  set faktorijela 1
  while {$brojac > 0} {
    set faktorijela [expr $faktorijela * $brojac] 
    incr brojac -1 
  }
  puts $faktorijela

Kod za petlju je isti kao i za Javu i C#:

  int brojac = 5;
  long faktorijela = 1;
  while (brojac > 0)
     faktorijela *= brojac--; 		 // Množi pa dekrementiraj.

Za Javu se rezultat ispisuje na sljedeći način:

  System.out.println(faktorijela);

Isto to u C#:

  System.Console.WriteLine(faktorijela);
var brojac = 5;
var faktorijela = 1;
while (brojac)
{
  faktorijela *= brojac--; 		// Množi pa dekrementiraj.
}
document.body.appendChild(document.createTextNode(faktorijela));
  program Faktorijela;
  var
    Brojac, Faktorijela: integer;
  begin
    Brojac := 5;
    Faktorijela := 1;
    while Brojac > 0 do begin
      Faktorijela := Faktorijela * Brojac;
      Brojac := Brojac - 1;
    end;
    Write(Faktorijela);
  end.

Suprotno drugim jezicima, u Smalltalku while petlja nije jezični konstrukt već je definirana u klasi BlockClosure kao jednoparametarska metoda, tijelom kao zatvorenošću, rabeći samu sebe kao uvjet.

 | brojac faktorijela |
 brojac := 5.
 faktorijela := 1.
 [ brojac > 0 ] whileTrue: 
     [ faktorijela := faktorijela * (brojac := brojac - 1) ]
  brojac = 5
  faktorijela = 1
  while(brojac>0):
        faktorijela *= brojac
        brojac -= 1
  print(faktorijela)
  Dim $brojac = 5, $faktorijela = 1
  While $brojac > 0
     $faktorijela *= $brojac
     $brojac -= 1
  WEnd
  MsgBox(0,"Faktorijela", $faktorijela)

Vidjeti također

[uredi | uredi kôd]