While petlja
Konstrukcije petlji |
---|
Do while petlja |
While petlja |
For petlja |
Foreach petlja |
Beskonačna petlja |
Kontrola toka |
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. While petlja se može posmatrati i kao ponavljajuća if naredba.
Pregled
[uredi | uredi izvor]While konstrukcija se sastoji od bloka naredbi i uslova.[1][2] Uslov se prvo procenjuje – ako je uslov tačan, naredbe unutar bloka se izvršavaju. Ovo se ponavlja sve dok uslov ne postane netačan. 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. Poredi se sa do while petljom, koja proverava uslov nakon što je petlja izvršena.
Na primer, u C programskom jeziku (kao i u Javi, C#,[3] Objective-C i C++u, koji koriste istu sintaksu u ovom slučaju), odsečak koda je:
int x = 0;
while (x < 5)
{
printf ("x = %d\n", x);
x++;
}
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.
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. Kada se takva petlja namerno napravi, obično postoji druga kontrolna struktura (kao što je break naredba) koja upravlja završetkom petlje. Na primer:
while (true)
{
//ради компликоване ствари
if (Услов) break;
//више ствари
}
Ekvivalentne strukture
[uredi | uredi izvor]U S programskom jeziku,
while (Услов)
{
Изјаве;
}
je ekvivalentno sa
if (Услов)
{
do
{
Изјаве;
} while (Услов);
}
ili
while (true)
{
if (!Услов) break;
Изјаве;
}
ili
goto TEST;
PETLJA:
Изјаве;
TEST:
if (Услов) goto PETLJA;
ili
TEST:
if (!Услов) goto KRAJPETLJE;
Изјаве
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.
Takođe u S-u i njegovim potomcima, while petlja je for petlja bez inicijalizacije ili brojanja izraza tj.
for ( ; Услов; )
{
Изјаве;
}
Demonstriranje while petlji
[uredi | uredi izvor]Ove while petlje će računati faktorijel broja 5:
var broj:int = 5;
var faktorijel:int = 1;
while ( broj > 1 )
{
faktorijel *= broj;
broj--;
}
trace ("Faktorijel ", faktorijel);
Ada
[uredi | uredi izvor]with Ada.Integer_Text_IO;
procedure Faktorijel is
Broj : Integer := 5;
Faktorijel : Integer := 1;
begin
while Broj > 0 loop
Faktorijel := Faktorijel * Broj;
Broj := Broj - 1;
end loop;
Ada.Integer_Text_IO.Put (Faktorijel);
end Faktorijel;
Basic - QBasic ili Visual Basic
[uredi | uredi izvor]Dim broj As Integer = 10 ' даје вредност променљивој
Do While broj > 0
broj = broj - 1
Loop ' програм иде овде, све док број не буде 0
broj=5
faktorijel=1
while [ $broj -gt 0 ]; do
faktorijel=$((faktorijel * broj))
broj=$((broj - 1))
done
echo $faktorijel
C ili C++
[uredi | uredi izvor]int main (void)
{
int broj = 5;
long faktorijel = 1;
while (broj > 1)
{
faktorijel *= broj--;
}
printf("%d", faktorijel);
return 0;
}
Skript sintaksa
[uredi | uredi izvor]broj = 5;
faktorijel = 1;
while ( broj > 1 ){
faktorijel *= broj--;
}
writeOutput(faktorijel);
Tag sintaksa
[uredi | uredi izvor]<cfset broj = 5>
<cfset faktorijel = 1>
<cfloop uslov="broj GT 1">
<cfset faktorijel *= broj-->
</cfloop>
<cfoutput>#faktorijel#</cfoutput>
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
Java, C#, D
[uredi | uredi izvor]Kod while petlje je isti za programe Java, C# i D:
int broj = 5;
long faktorijel = 1;
while (broj > 1)
{
faktorijel *= broj--;
}
Za program Java rezultat se štampa kao sledeće:
System.out.println(faktorijel);
Ista stvar u S#:
System.Console.WriteLine(faktorijel);
I konačno u D:
writefln(faktorijel);
var broj = 5;
var faktorijel = 1;
while ( broj > 1 )
{
faktorijel *= broj--;
}
document.write(faktorijel);
Lua
[uredi | uredi izvor]broj = 5
faktorijel = 1
while broj > 0 do
faktorijel = faktorijel * broj
broj = broj - 1
end
print(faktorijel)
broj = 5;
faktorijel = 1;
while (broj > 0)
faktorijel = faktorijel * broj; %Увећава се вишеструко
broj = broj - 1; %Опада
end
faktorijel
Block[{broj=5,faktorijel=1}, (*Локализује број и факторијел*)
While[broj>0, (*While петља*)
faktorijel*=broj; (*Увећава се вишеструко*)
broj--; (*Опада*)
];
faktorijel
]
Oberon, Oberon-2, Oberon-07, ili Component Pascal
[uredi | uredi izvor]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.
Maya
[uredi | uredi izvor]int $broj = 5;
int $faktorijel = 1;
int $multiplication;
while ($broj > 0)
{
$multiplication = ($faktorijel * $broj);
$broj -= 1;
print ("Broj is: " + $broj + ", multiplication is: " + $multiplication + "\n");
}
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.
Perl
[uredi | uredi izvor]my $broj = 5;
my $faktorijel = 1;
while ( $broj > 0 ) {
$faktorijel *= $broj--; # Увећава се вишеструко, након тога опада
}
print $faktorijel;
While petlje se često koriste za čitanje podataka liniju po liniju (kao što je definisano sa $/
separatorom) iz otvorenog fajla:
open IN, "<test.txt";
while ( <IN> ) {
print;
}
close IN;
PHP
[uredi | uredi izvor]$broj = 5;
$faktorijel = 1;
while($broj > 0) {
$faktorijel *= $broj; // Прво се увећава вишеструко.
$broj--; // Након тога опада.
}
echo $faktorijel;
PL/I
[uredi | uredi izvor]declare broj fixed initial(5);
declare faktorijel fixed initial(1);
do while(broj > 0)
faktorijel = faktorijel * broj;
broj = broj - 1;
end;
broj = 5 # Вредност променљиве је 5
faktorijel = 1 # Вредност променљиве је 1
while broj > 0: # Док је број(5) већи од 0
faktorijel *= broj # Промени вредност факторијела у
# факторијел х број.
broj -= 1 # Промени вредност броја у
# број - 1.
print(faktorijel) # Штампа вредност факторијела.
While petlja koja se ne završava:
while True:
print("Упомоћ! Заглављен сам у петљи!")
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 ...) ; убацује while петљу
(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)
Ruby
[uredi | uredi izvor]# Израчунава факторијел од 5
i = 1
faktorijel = 1
while i < 5
faktorijel *= i
i += 1
end
puts faktorijel
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.
| count faktorijel |
count := 5.
faktorijel := 1.
[ count > 0 ] whileTrue:
[ faktorijel := faktorijel * count.
count := count - 1 ].
Transcript show: faktorijel
Smalltalk takođe ima odgovarajući whileFalse: metod.
Tcl (Tool command language)
[uredi | uredi izvor]set broj 5
set faktorijel 1
while {$broj > 0} {
set faktorijel [expr $faktorijel * $broj]
incr broj -1
}
puts $faktorijel
$broj = 5
$faktorijel = 1
while ($broj) {
$faktorijel *= $broj--
}
$faktorijel
While jezik
[uredi | uredi izvor]While programski jezik[4] je prost programski jezik napravljen od zadataka, uslova i while izjava, korišćenih u teoretskoj analizi imperativne semantike programskog jezika.[5][6]
C := 5;
F := 1;
while (C > 1) do
F := F * C;
C := C - 1;
Vidi još
[uredi | uredi izvor]Reference
[uredi | uredi izvor]- ^ The while and do-while Statements (The Java™ Tutorials > Learning the Java Language > Language Basics)
- ^ C++ While Loop
- ^ „while (C# reference)”.
- ^ http://profs.sci.univr.it/~merro/files/WhileExtra_l.pdf
- ^ Nielson, Flemming; Nielson, Hanne R.; Hankin, Chris (1999). Principles of Program Analysis. Springer. ISBN 978-3-540-65410-0. Pristupljeno 29. 5. 2013.
- ^ Illingworth, Valerie (1997). Dictionary of Computing. Oxford Paperback Reference (4th izd.). Oxford University Press. ISBN 9780192800466.
Literatura
[uredi | uredi izvor]- Nielson, Flemming; Nielson, Hanne R.; Hankin, Chris (1999). Principles of Program Analysis. Springer. ISBN 978-3-540-65410-0. Pristupljeno 29. 5. 2013.