While petlja

Izvor: Hrvatska internetska enciklopedija
Skoči na:orijentacija, traži

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.

Demonstracija while petlji

Ove će petlje izračunati faktorijelu broja 5:

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.

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.

C ili C++

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

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;

PHP

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

Tcl (Tool command language)

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

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

JavaScript

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

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.

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

Python

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

AutoIt

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


Vidjeti također