While petlja
<s>Kod većine programskih jezika, while petlja je naredba kontrole toka koja omogućava kodu da se izvršava više puta na osnovu vraćenog logičkog tipa.</s><s>While petlja se može posmatrati i kao ponavljajuća if naredba.</s>

<s>Pregled 
While konstrukcija se sastoji od bloka naredbi i uslova.</s><s>Uslov se prvo procenjuje – ako je uslov tačan, naredbe unutar bloka se izvršavaju.</s><s>Ovo se ponavlja sve dok uslov ne postane netačan.</s><s>Zbog toga što while petlja proverava uslov pre nego što izvrši blok naredbi, upravljačka struktura je često poznata i kao pred-test petlja.</s><s>Poredi se sa do while petljom, koja proverava uslov nakon što je petlja izvršena.</s>

<s>Na primer, u C programskom jeziku (kao i u Javi, C#, Objective-C i C++u, koji koriste istu sintaksu u ovom slučaju), odsečak koda je:</s>

<s>int x = 0;
while (x < 5) 
{
    printf ("x = %d\n", x);
    x++;
}</s>

<s>prvo proverava da li je h manji od 5, i zato što jeste, funkcija printf je pokrenuta i nakon toga h se povećava za 1. Zatim se opet proverava da li je uslov zadovoljen i petlja se izvršava sve dok je uslov zadovoljen odnosno dok promenljiva h ne dobije vrednost 5.</s>

<s>Uočite da je moguće, u nekim slučajevima čak i poželjno, da za zadate uslove logički odgovor uvek bude tačan, i da se tako stvara beskonačna petlja.</s><s>Kada se takva petlja namerno napravi, obično postoji druga kontrolna struktura (kao što je break naredba) koja upravlja završetkom petlje.</s><s>Na primer:</s>

<s>while (true) 
{
    //radi komplikovane stvari
    if (Uslov) break;
    //više stvari
}</s>

<s>Ekvivalentne strukture 
U S programskom jeziku,</s>

<s>while (Uslov) 
{
   Izjave;
}</s>

<s>je ekvivalentno sa</s>

<s>if (Uslov) 
{
   do 
   {
      Izjave;
   } while (Uslov);
}</s>

<s>ili</s>

<s>while (true) 
{
   if (!</s><s>Uslov) break;
   Izjave;
}</s>

<s>ili</s>

<s>goto TEST;
PETLJA:
   Izjave;
TEST:
   if (Uslov) goto PETLJA;</s>

<s>ili</s>

<s>TEST:
   if (!</s><s>Uslov) goto KRAJPETLJE;
   Izjave
   goto TEST;
KRAJPETLJE:
Poslednje dve nisu preporučljive zato što korišćenje „goto“ izjava otežava programeru da razume tok kontrole, i generalno se koriste kao poslednje sredstvo.</s>

<s>Takođe u S-u i njegovim potomcima, while petlja je for petlja bez inicijalizacije ili brojanja izraza tj.</s>

<s>for ( ; Uslov; )
{
   Izjave;
}</s>

<s>Demonstriranje while petlji 
Ove while petlje će računati faktorijel broja 5:</s>

<s>ActionScript 3 
var broj:int = 5;
var faktorijel:int = 1;</s>

<s>while ( broj > 1 )
{
  faktorijel *= broj;
  broj--;
}
trace ("Faktorijel ", faktorijel);</s>

<s>Ada</s>

<s>with Ada.</s><s>Integer_Text_IO;</s>

<s>procedure Faktorijel is
  Broj   : Integer := 5;
  Faktorijel : Integer := 1;
begin
  while Broj > 0 loop
    Faktorijel := Faktorijel * Broj;
    Broj   := Broj - 1;
  end loop;</s>

<s>Ada.</s><s>Integer_Text_IO.</s><s>Put (Faktorijel);
end Faktorijel;</s>

<s>Basic - QBasic ili Visual Basic 
Dim broj As Integer = 10 ' daje vrednost promenljivoj</s>

<s>Do While broj > 0
    broj = broj - 1
Loop ' program ide ovde, sve dok broj ne bude 0</s>

<s>Bourne (Unix) shell 
broj=5
faktorijel=1
while [ $broj -gt 0 ]; do
    faktorijel=$((faktorijel * broj))
    broj=$((broj - 1))
done</s>

<s>echo $faktorijel</s>

<s>C ili C++ 
int main (void)
{
  int broj = 5;
  long faktorijel = 1;
 
  while (broj > 1)
  {
     faktorijel *= broj--;
  }
  printf("%d", faktorijel);
  return 0;
}</s>

<s>Skript sintaksa 
broj = 5;
faktorijel = 1;
 
while ( broj > 1 ){
    faktorijel *= broj--;
}
writeOutput(faktorijel);</s>

<s>Tag sintaksa 
<cfset broj = 5>
<cfset faktorijel = 1>
<cfloop uslov="broj GT 1">
    <cfset faktorijel *= broj-->
</cfloop>
<cfoutput>#faktorijel#</cfoutput></s>

<s>Fortran 
program FaktorijelProg
  integer :: broj = 5
  integer :: faktorijel = 1
  do while (broj > 0)
    faktorijel = faktorijel * broj
    broj = broj - 1
  end do
  print *, faktorijel
end program FaktorijelProg</s>

<s>Java, C#, D 
Kod while petlje je isti za programe Java, C# i D:</s>

<s>int broj = 5;
long faktorijel = 1;</s>

<s>while (broj > 1)
{
   faktorijel *= broj--;
}</s>

<s>Za program Java rezultat se štampa kao sledeće:
  System.out.println(faktorijel);</s>

<s>Ista stvar u S#:
  System.</s><s>Console.</s><s>WriteLine(faktorijel);</s>

<s>I konačno u D:
  writefln(faktorijel);</s>

<s>Javaskript 
var broj = 5;
var faktorijel = 1;</s>

<s>while ( broj > 1 )
{
  faktorijel *= broj--;
}</s>

<s>document.write(faktorijel);</s>

<s>Lua 
broj = 5
faktorijel = 1</s>

<s>while broj > 0 do
  faktorijel = faktorijel * broj
  broj = broj - 1
end</s>

<s>print(faktorijel)</s>

<s>MATLAB 
broj = 5;
faktorijel = 1;</s>

<s>while (broj > 0)
  faktorijel = faktorijel * broj;      %Uvećava se višestruko
  broj = broj - 1;                %Opada
end</s>

<s>faktorijel</s>

<s>Mathematica 
 Block[{broj=5,faktorijel=1},          (*Lokalizuje broj i faktorijel*)
         While[broj>0,                (*While petlja*)
                faktorijel*=broj;      (*Uvećava se višestruko*)
                broj--;               (*Opada*)
              ];
      faktorijel
     ]</s>

<s>Oberon, Oberon-2, Oberon-07, ili Component Pascal 
MODULE Faktorijel;
IMPORT Out;
VAR
  Broj, Faktorijel: INTEGER;
BEGIN
  Broj := 5;
  Faktorijel := 1;
  WHILE Broj > 0 DO
    Faktorijel := Faktorijel * Broj;
    DEC(Broj)
  END;
  Out.Int(Faktorijel,0)
END Faktorijel.</s>

<s>Maya 
int $broj = 5;
int $faktorijel = 1;</s>

<s>int $multiplication;</s>

<s>while ($broj > 0)
{
    $multiplication = ($faktorijel * $broj);
     
    $broj -= 1;
    
    print ("Broj is: " + $broj + ", multiplication is: " + $multiplication + "\n");
}</s>

<s>Paskal 
program Faktorijel1;
var
  Broj, Faktorijel: integer;
begin
  Broj := 5;
  Faktorijel := 1;
  while Broj > 0 do
  begin
    Faktorijel := Faktorijel * Broj;
    Broj := Broj - 1
  end;
  WriteLn(Faktorijel)
end.</s>

<s>Perl 
my $broj = 5;
my $faktorijel = 1;</s>

<s>while ( $broj > 0 ) {
    $faktorijel *= $broj--; # Uvećava se višestruko, nakon toga opada
}</s>

<s>print $faktorijel;</s>

<s>While petlje se često koriste za čitanje podataka liniju po liniju (kao što je definisano sa $/ separatorom) iz otvorenog fajla:</s>

<s>open IN, "<test.txt";
while ( <IN> ) {
  print;
}
close IN;</s>

<s>PHP 
$broj = 5;
$faktorijel = 1;
while($broj > 0) {
  $faktorijel *= $broj; // Prvo se uvećava višestruko.
  $broj--; // Nakon toga opada.
}
echo $faktorijel;</s>

<s>PL/I 
declare broj fixed initial(5);
declare faktorijel fixed initial(1);</s>

<s>do while(broj > 0)
  faktorijel = faktorijel * broj;
  broj = broj - 1;
  end;</s>

<s>Python 
broj = 5 # Vrednost promenljive je 5 
faktorijel = 1 # Vrednost promenljive je 1</s>

<s>while broj > 0: # Dok je broj(5) veći od 0 
    faktorijel *= broj              # Promeni vrednost faktorijela u 
                                      # faktorijel h broj.
    
    broj -= 1                      # Promeni vrednost broja u
                                      # broj - 1.</s>

<s>print(faktorijel) # Štampa vrednost faktorijela.</s>

<s>While petlja koja se ne završava:
while True:
    print("Upomoć!</s><s>Zaglavljen sam u petlji!")</s>

<s>Racket 
U Racket, kao i u ostalim Scheme implementacijama, let je popularan način da se implementira petlja:
#lang racket
(define broj 5)
(define faktorijel 1)
(let loop ()
  (when (> broj 0)
    (set! faktorijel (* faktorijel broj))
    (set! broj (sub1 broj))
    (loop)))
(displayln faktorijel)
Koristeći makro sistem, implementacija while petlje je trivialna vežba:
#lang racket
(define-syntax-rule (while test body ...) ; ubacuje while petlju
  (let loop () (when test body ... (loop))))
(define broj 5)
(define faktorijel 1)
(while (> broj 0)
  (set! faktorijel (* faktorijel broj))
  (set! broj (sub1 broj)))
(displayln faktorijel)</s>

<s>Ruby 
# Izračunava faktorijel od 5
i = 1
faktorijel = 1
while i < 5
  faktorijel *= i
  i += 1
end
puts faktorijel</s>

<s>Smalltalk 
Za razliku od ostalih jezika, u Smalltalk-u while petlja nije jezička konstrukcija već je definisana u klasi BlockClosure kao metod sa jednim parametrom, telom kao zatvaranjem, koristeći sebe kao uslov.</s>

<s>| count faktorijel |
count := 5.
faktorijel := 1.
[ count > 0 ] whileTrue: 
    [ faktorijel := faktorijel * count.
    count := count - 1 ].</s><s>Transcript show: faktorijel</s>

<s>Smalltalk takođe ima odgovarajući whileFalse: metod.</s>

<s>Tcl (Tool command language) 
set broj 5
set faktorijel 1</s>

<s>while {$broj > 0} {
  set faktorijel [expr $faktorijel * $broj] 
  incr broj -1 
}</s>

<s>puts $faktorijel</s>

<s>Windows PowerShell 
$broj = 5
$faktorijel = 1
while ($broj) {
    $faktorijel *= $broj--
}
$faktorijel</s>

<s>While jezik 
While programski jezik je prost programski jezik napravljen od zadataka, uslova i while izjava, korišćenih u teoretskoj analizi imperativne semantike programskog jezika.</s><s>C := 5;
F := 1;
while (C > 1) do
    F := F * C;
    C := C - 1;</s>

<s>Vidi još 
 Do while petlja
 For petlja
 Forič petlja</s>

<s>Reference</s>

<s>Literatura</s>

<s>Kontrola toka
Petlje
Programiranje</s>

