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 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 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.

Sadržaj

[uredi] Demonstracija while petlji

Ove će petlje izračunati faktorijelu broja 5:

[uredi] QBasic ili Visual Basic

 '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.

[uredi] REALbasic

 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.

[uredi] C ili C++

 unsigned int brojac = 5;
 unsigned long faktorijela = 1;
 while (brojac > 0)
 {
   faktorijela *= brojac--;               /* Množi pa dekrementiraj. */
 } 
 printf("%i", faktorijela);

[uredi] Perl

 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;

[uredi] PHP

$brojac = 5;
$faktorijela = 1;
while($brojac > 0) {
  $faktorijela *= $brojac--;              // Množi pa dekrementiraj.
}
echo $faktorijela;

[uredi] Tcl (Tool command language)

 set brojac 5
 set faktorijela 1
 while {$brojac > 0} {
   set faktorijela [expr $faktorijela * $brojac] 
   incr brojac -1 
 }
 puts $faktorijela

[uredi] Java, C#

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);

[uredi] JavaScript

var brojac = 5;
var faktorijela = 1;
while (brojac)
{
  faktorijela *= brojac--;              // Množi pa dekrementiraj.
}
document.body.appendChild(document.createTextNode(faktorijela));

[uredi] Pascal

 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.

[uredi] Smalltalk

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) ]

[uredi] Python

 brojac = 5
 faktorijela = 1
 while brojac>0:
       faktorijela *= brojac
       brojac -= 1
 print faktorijela

[uredi] AutoIt

 Dim $brojac = 5, $faktorijela = 1
 While $brojac > 0
    $faktorijela *= $brojac
    $brojac -= 1
 WEnd
 MsgBox(0,"Faktorijela", $faktorijela)


[uredi] Vidjeti također