Do while петља

С Википедије, слободне енциклопедије
Do While проток петље дијаграм

Код већине програмских језика,do while петља је наредба контрола протока који извршава блок кода најмање једном, и онда непрестано извршава блок, или не, у зависности од датог логичког стања на крају блока. Имати на уму да за разлику од већине језика, Фортран-ова do петља је у ствари иста као и  for петља.

Do while конструкција се састоји од процеса симбола и услова. Прво, код унутар блока се извршава, и онда се услов процењује. Ако је услов тачан код унутар блока се извршава поново. Ово се понавља све док услов не постане нетачан. Зато што do while  петље проверавају услов након што је блок извршен, контролна структура је такође позната као и пост-тест петље. Супротно од while петље, која тестира услов пре него што се код унутар блока извршио, do-while петља је излазна-услов петља. Ово значи да се код мора увек извршити прво и онда се процењује израз или тест стања. Ако је тачно, код изршава тело петље поново. Овај процес се понавља  све док израз има тачну вредност. Ако је вредност нетачна, петља се зауставља и контролише проток до изјаве пратећи do-while петљу.

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

Неки језици могу користити различиту конвенцију назива за овај тип петље. На пример, језик Паскал има "repeat until" петљу, која се наставља све док контролни израз није тачан (а затим се завршава) — док "while" петља ради све док је контролни израз тачан (и зауставља се чим израз постане нетачан).

Једнаке конструкције[уреди | уреди извор]

do {
   do_work();  
} while (condition);

је једнако 

do_work();
while (condition) {
   do_work();
}

На овај начин, do ... while петља чува основну петљу са  do_work();  у реду преwhileпетље. Све док continue изјава није коришћена, ово горе је технички једнако следећем (иако ови примери нису типични или у модерном стилу):

while (true) {
   do_work();
   if (!condition) break;
}

или

LOOPSTART:
   do_work();
   if (condition) goto LOOPSTART;

Демонстрирање do while петљи[уреди | уреди извор]

Ови примери програма израчунавају факторијел од 5 користећи одговарајући језик синтаксе за do-while петљу.

ActionScript 3[уреди | уреди извор]

var counter:int = 5;
var factorial:int = 1;
do {
  factorial *= counter--; /* Множи, онда опада. */
} while (counter > 0);
trace(factorial);

Ада[уреди | уреди извор]

with Ada.Integer_Text_IO;

procedure Factorial is
  Counter   : Integer := 5;
  Factorial : Integer := 1;
begin
  loop
    Factorial := Factorial * Counter;
    Counter   := Counter - 1;
    exit when Counter = 0;
  end loop;

  Ada.Integer_Text_IO.Put (Factorial);
end Factorial;

Бејсик[уреди | уреди извор]

Ранији Бејсик (као што је GW-BASIC) је користио синтаксу WHILE/WEND. Модерни Бејсик као што је  PowerBASIC обезбеђује  WHILE/WEND и DO/LOOP структуре, са синткаском DO WHILE/LOOP, DO UNTIL/LOOP, DO/LOOP WHILE, DO/LOOP UNTIL, и DO/LOOP (без спољашњег тестирања, али са условном EXIT LOOP негде унутар петље). Типични  Бејсик извор кода :

Dim factorial As Integer
Dim counter As Integer
factorial = 1
counter = 5
Do 
   factorial = factorial * counter
   counter = counter - 1
Loop While counter > 0

C#[уреди | уреди извор]

int counter = 5;
int factorial = 1;
do 
{
  factorial *= counter--; /* Множи, онда опада. */
} while (counter > 0);
System.Console.WriteLine(factorial);

C[уреди | уреди извор]

int counter = 5;
int factorial = 1
do {
  factorial *= counter--; /* Множи, онда опада. */
} while (counter > 0);
printf("factorial of 5 is %d\n", factorial);

C++[уреди | уреди извор]

int counter = 5;
int factorial = 1;
do {
  factorial *= counter--;
} while (counter > 0);
std::cout<<"factorial of 5 is "<<factorial<<std::endl;

[1]

CFScript[уреди | уреди извор]

factorial = 1;
count = 10;
do {
   factorial *= count--;
} while (count > 1);

writeOutput(factorial);

D[уреди | уреди извор]

int counter = 5;
int factorial = 1;

do {
  factorial *= counter--; // Множи, онда опада.
} while (counter > 0);
writeln("factorial of 5 is ", factorial);

Фортран[уреди | уреди извор]

У застарелом FORTRAN 77 не постоји DO-WHILE конструкција али исти ефекат се може постићи са GOTO:

      INTEGER CNT,FACT
      CNT=5
      FACT=1
    1 CONTINUE
      FACT=FACT*CNT
      CNT=CNT-1
      IF (CNT.GT.0) GOTO 1
      PRINT*,FACT
      END

Са Fortran 90 и каснијим, користимо конструкцију једнакости која је поменута горе.

program FactorialProg
  integer :: counter = 5
  integer :: factorial = 1
  factorial = factorial * counter
  counter = counter - 1
  do while (counter > 0)
    factorial = factorial * counter
    counter = counter - 1
  end do
  print *, factorial
end program FactorialProg

Jава[уреди | уреди извор]

int counter = 5;
int factorial = 1;
do {
  factorial *= counter--; /* Множи, онда опада. */
} while (counter > 0);
System.out.println(factorial);

Jаваскрипт[уреди | уреди извор]

var counter = 5;
var factorial = 1;
do {
    factorial *= counter--;
} while (counter > 0);
console.log(factorial);

[2]

PHP[уреди | уреди извор]

<?php
$counter = 5;
$factorial = 1;
do {
    $factorial *= $counter--;
} while ($counter > 0);
echo $factorial;
?>

[3]

PL/I[уреди | уреди извор]

PL/I DO изјава сажима функцију пост-тест петље (do until), the pre-test loop (do while), и for петље. Све функције могу бити укључене у једној изјави. Пример показује само"do until" синтаксу.

declare counter fixed initial(5);
declare factorial fixed initial(1);
do until(counter<=0);
  factorial = factorial * counter;
  counter = counter - 1;
  end;
put(factorial);

Пајтон[уреди | уреди извор]

Пајтону недостаје одређена do while конструкција контроле протока. Међутим, нешто слично може бити изведено уз помоћ while петље са прекидом .

counter = 5
factorial = 1
while True:
    factorial *= counter
    counter -= 1
    if counter == 0:
        break
print(factorial)

Racket[уреди | уреди извор]

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

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

Упоредити ово са првим примером while петље примера за Racket.

Руби[уреди | уреди извор]

counter = 5
factorial = 1
begin
  factorial *= counter
  counter -= 1
end while counter > 0
puts factorial

Smalltalk[уреди | уреди извор]

| counter factorial |
counter := 5.
factorial := 1.
[counter > 0] whileTrue: 
  [factorial := factorial * counter.
  counter := counter - 1].
Transcript show: factorial printString

Свифт[уреди | уреди извор]

Swift 2.x:

var counter = 5
var factorial = 1
repeat {
     factorial *= counter
     counter -= 1
} while counter > 0
print(factorial)

Swift 1.x:

var counter = 5
var factorial = 1
do {
     factorial *= counter
     counter -= 1
} while counter > 0
println(factorial)

Вижуал Бејзицкс .NET[уреди | уреди извор]

Dim counter As Integer = 5
Dim factorial As Integer = 1
Do
   factorial *= counter
   counter -= 1 
Loop While counter > 0
Console.WriteLine(factorial)

Види још[уреди | уреди извор]

Референце[уреди | уреди извор]