While petlja
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.
Ove će petlje izračunati faktorijelu broja 5:
QBasic ili Visual Basic
[uredi | uredi kôd] '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;
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)
|