While петља

(преусмерено са While loop)

Код већине програмских језика, while петља је наредба контроле тока која омогућава коду да се извршава више пута на основу враћеног логичког типа. While петља се може посматрати и као понављајућа if наредба.

дијаграм протока while петље

ПрегледУреди

While конструкција се састоји од блока наредби и услова.[1][2] Услов се прво процењује – ако је услов тачан, наредбе унутар блока се извршавају. Ово се понавља све док услов не постане нетачан. Због тога што while петља проверава услов пре него што изврши блок наредби, управљачка структура је често позната и као пред-тест петља. Пореди се са do while петљом, која проверава услов након што је петља извршена.

На пример, у C програмском језику (као и у Javi, C#,[3] Objective-C и C++у, који користе исту синтаксу у овом случају), одсечак кода је:

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

прво проверава да ли је х мањи од 5, и зато што јесте, функција printf је покренута и након тога х се повећава за 1. Затим се опет проверава да ли је услов задовољен и петља се извршава све док је услов задовољен односно док променљива х не добије вредност 5.

Уочите да је могуће, у неким случајевима чак и пожељно, да за задате услове логички одговор увек буде тачан, и да се тако ствара бесконачна петља. Када се таква петља намерно направи, обично постоји друга контролна структура (као што је break наредба) која управља завршетком петље. На пример:

while (true) 
{
    //ради компликоване ствари
    if (Услов) break;
    //више ствари
}

Еквивалентне структуреУреди

У С програмском језику,

while (Услов) 
{
   Изјаве;
}

је еквивалентно са

if (Услов) 
{
   do 
   {
      Изјаве;
   } while (Услов);
}

или

while (true) 
{
   if (!Услов) break;
   Изјаве;
}

или

   goto TEST;
PETLJA:
   Изјаве;
TEST:
   if (Услов) goto PETLJA;

или

TEST:
   if (!Услов) goto KRAJPETLJE;
   Изјаве
   goto TEST;
KRAJPETLJE:

Последње две нису препоручљиве зато што коришћење „goto“ изјава отежава програмеру да разуме ток контроле, и генерално се користе као последње средство.

Такође у С-у и његовим потомцима, while петља је for петља без иницијализације или бројања израза тј.

for ( ; Услов; )
{
   Изјаве;
}

Демонстрирање while петљиУреди

Ове while петље ће рачунати факторијел броја 5:

ActionScript 3Уреди

var broj:int = 5;
var faktorijel:int = 1;

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

AdaУреди

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 или Visual BasicУреди

Dim broj As Integer = 10 ' даје вредност променљивој

Do While broj > 0
    broj = broj - 1
Loop ' програм иде овде, све док број не буде 0

Bourne (Unix) shellУреди

broj=5
faktorijel=1
while [ $broj -gt 0 ]; do
    faktorijel=$((faktorijel * broj))
    broj=$((broj - 1))
done

echo $faktorijel

C или C++Уреди

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

Скрипт синтаксаУреди

broj = 5;
faktorijel = 1;
 
while ( broj > 1 ){
    faktorijel *= broj--;
}
writeOutput(faktorijel);

Таг синтаксаУреди

<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Уреди

Код while петље је исти за програме Java, C# и D:

int broj = 5;
long faktorijel = 1;

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

За програм Java резултат се штампа као следеће:

System.out.println(faktorijel);

Иста ствар у С#:

System.Console.WriteLine(faktorijel);

И коначно у D:

writefln(faktorijel);

ЈаваскриптУреди

var broj = 5;
var faktorijel = 1;

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

document.write(faktorijel);

LuaУреди

broj = 5
faktorijel = 1

while broj > 0 do
  faktorijel = faktorijel * broj
  broj = broj - 1
end

print(faktorijel)

MATLABУреди

broj = 5;
faktorijel = 1;

while (broj > 0)
  faktorijel = faktorijel * broj;      %Увећава се вишеструко
  broj = broj - 1;                %Опада
end

faktorijel

MathematicaУреди

 Block[{broj=5,faktorijel=1},          (*Локализује број и факторијел*)
         While[broj>0,                (*While петља*)
                faktorijel*=broj;      (*Увећава се вишеструко*)
                broj--;               (*Опада*)
              ];
      faktorijel
     ]

Oberon, Oberon-2, Oberon-07, или 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.

MayaУреди

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.

ПерлУреди

my $broj = 5;
my $faktorijel = 1;

while ( $broj > 0 ) {
    $faktorijel *= $broj--; # Увећава се вишеструко, након тога опада
}

print $faktorijel;

While петље се често користе за читање података линију по линију (као што је дефинисано са $/ сепаратором) из отвореног фајла:

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

PHPУреди

$broj = 5;
$faktorijel = 1;
while($broj > 0) {
  $faktorijel *= $broj; // Прво се увећава вишеструко.
  $broj--; // Након тога опада.
}
echo $faktorijel;

PL/IУреди

declare broj fixed initial(5);
declare faktorijel fixed initial(1);

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

PythonУреди

broj = 5 # Вредност променљиве је 5 
faktorijel = 1 # Вредност променљиве је 1

while broj > 0: # Док је број(5) већи од 0 
    faktorijel *= broj              # Промени вредност факторијела у 
                                      # факторијел х број.
    
    broj -= 1                      # Промени вредност броја у
                                      # број - 1.

print(faktorijel) # Штампа вредност факторијела.

While петља која се не завршава:

while True:
    print("Упомоћ! Заглављен сам у петљи!")

RacketУреди

У Racket, као и у осталим Scheme имплементацијама, let је популаран начин да се имплементира петља:

#lang racket
(define broj 5)
(define faktorijel 1)
(let loop ()
  (when (> broj 0)
    (set! faktorijel (* faktorijel broj))
    (set! broj (sub1 broj))
    (loop)))
(displayln faktorijel)

Користећи макро систем, имплементација while петље је тривиална вежба:

#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Уреди

# Израчунава факторијел од 5
i = 1
faktorijel = 1
while i < 5
  faktorijel *= i
  i += 1
end
puts faktorijel

SmalltalkУреди

За разлику од осталих језика, у Smalltalk-у while петља није језичка конструкција већ је дефинисана у класи BlockClosure као метод са једним параметром, телом као затварањем, користећи себе као услов.

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

Smalltalk такође има одговарајући whileFalse: метод.

Tcl (Tool command language)Уреди

set broj 5
set faktorijel 1

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

puts $faktorijel

Windows PowerShellУреди

$broj = 5
$faktorijel = 1
while ($broj) {
    $faktorijel *= $broj--
}
$faktorijel

While језикУреди

While програмски језик[4] је прост програмски језик направљен од задатака, услова и while изјава, коришћених у теоретској анализи императивне семантике програмског језика. [5][6]

C := 5;
F := 1;
while (C > 1) do
    F := F * C;
    C := C - 1;

Види јошУреди

РеференцеУреди

  1. ^ The while and do-while Statements (The Java™ Tutorials > Learning the Java Language > Language Basics)
  2. ^ C++ While Loop
  3. ^ „while (C# reference)”. 
  4. ^ http://profs.sci.univr.it/~merro/files/WhileExtra_l.pdf
  5. ^ Nielson, Flemming; Nielson, Hanne R.; Hankin, Chris (1999). Principles of Program Analysis. Springer. ISBN 978-3-540-65410-0. Приступљено 29. 5. 2013. 
  6. ^ Illingworth, Valerie (1997). Dictionary of Computing. Oxford Paperback Reference (4th изд.). Oxford University Press. ISBN 9780192800466. 

ЛитератураУреди