Do while loop - Do while loop

Image
A Do hurok folyamatábrája

A legtöbb számítógépes programozási nyelvben a do while ciklus egy vezérlési folyamat utasítás , amely legalább egyszer végrehajt egy kódblokkot, majd a blokkot többször végrehajtja, vagy leállítja annak végrehajtását, a blokk végén megadott logikai feltételektől függően. .

A do while konstrukció egy folyamat szimbólumból és egy feltételből áll. Először a blokkon belüli kódot hajtják végre, majd értékelik a feltételt. Ha a feltétel igaz , akkor a blokkon belüli kód ismét végrehajtásra kerül. Ez addig ismétlődik, amíg a feltétel hamis nem lesz . Mivel a do while ciklusok ellenőrzik az állapotot a blokk végrehajtása után, a vezérlő struktúrát gyakran post-test ciklusnak is nevezik . Kontrasztban van a while ciklussal , amely a blokkon belüli kód végrehajtása előtt teszteli a feltételt, a do-while ciklus egy exit-feltétel ciklus. Ez azt jelenti, hogy először mindig a kódot kell végrehajtani, majd kiértékelni a kifejezést vagy a tesztfeltételt. Ha igaz, akkor a kód újra végrehajtja a hurok törzsét. Ezt a folyamatot addig ismételjük, amíg a kifejezés igaznak bizonyul. Ha a kifejezés hamis, akkor a hurok befejeződik, és a vezérlés átkerül a do-while ciklust követő utasításba. Más szavakkal, míg a while ciklus az utasítás igazságát feltételként szabja meg a kód végrehajtásának előfeltételeként , a do-while ciklus a művelet folyamatban lévő végrehajtását írja elő, amelyet a feltétel valótlansága ( azaz a az állapot a tagadás) van beállítva, mint egy feltétel későbbi .

Lehetséges, és bizonyos esetekben kívánatos, hogy az állapot mindig igaz legyen, és végtelen ciklust hozzon létre . Amikor egy ilyen hurok szándékosan jön létre, általában van egy másik vezérlő struktúra (például egy break utasítás ), amely lehetővé teszi a hurok befejezését.

Egyes nyelvek eltérő elnevezési szokásokat használhatnak az ilyen típusú hurkokhoz. Például a Pascal és a Lua nyelvnek van egy " ismételgetés " huroka, amely addig fut, amíg a vezérlő kifejezés igaz (majd leáll) - míg a "míg" hurok fut, míg a vezérlő kifejezés igaz (és akkor fejeződik be, amikor a kifejezés hamissá válik).

Ekvivalens konstrukciók

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

egyenértékű

do_work();

while (condition) {
    do_work();
}

Ily módon a do ... while hurok elmenti a kezdeti "hurok alapozást" do_work();a whileciklus előtti vonalon .

Mindaddig, amíg a folytatás utasítást nem használják, a fentiek technikailag egyenértékűek az alábbiakkal (bár ezek a példák nem tipikusak vagy modern stílusúak a mindennapi számítógépekben):

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

vagy

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

A do while ciklusok bemutatása

Ezek a példa programok kiszámítják az 5 tényezőjét a saját nyelvük szintaxisának felhasználásával a do-while ciklushoz.

ActionScript 3

var counter: int = 5;
var factorial: int = 1;

do {
    factorial *= counter--; /* Multiply, then decrement. */
} while (counter > 0);

trace(factorial);

Ada

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;

ALAPVETŐ

A korai BASIC- ok (például a GW-BASIC ) a WHOT / WEND szintaxist használták. A modern BASIC-ok, mint például a PowerBASIC, mind a WHILE / WEND, mind a DO / LOOP struktúrákat olyan szintaxissal látják el, mint a DO WHILE / LOOP, DO UNIL / LOOP, DO / LOOP WHILE, DO / LOOP UNIL és DO / LOOP (külső tesztelés nélkül, de feltételes EXIT LOOP-val valahol a hurok belsejében). Tipikus BASIC forráskód:

Dim factorial As Integer
Dim counter As Integer

factorial = 1
counter = 5

Do 
    factorial = factorial * counter
    counter = counter - 1
Loop While counter > 0

Print factorial

C #

int counter = 5;
int factorial = 1;

do {
    factorial *= counter--; /* Multiply, then decrement. */
} while (counter > 0);

System.Console.WriteLine(factorial);

C

int counter = 5;
int factorial = 1;

do {
    factorial *= counter--; /* Multiply, then decrement. */
} while (counter > 0);

printf("factorial of 5 is %d\n", factorial);

A Do-while (0) utasításokat a C makrókban is gyakran használják, hogy több állítást szabályos (szemben az összetett) utasításba csomagolhassanak. Vessünk pontosvesszőt a makró után, amely funkciószerűbb megjelenést biztosít az egyszerű elemzők és programozók számára, valamint elkerüli a hatókör átfogási problémáját if. A CERT C kódolási szabvány PRE10-C szabályában ajánlott.

C ++

int counter = 5;
int factorial = 1;

do {
    factorial *= counter--;
} while (counter > 0);

std::cout << "factorial of 5 is "<< factorial << std::endl;

CFScript

factorial = 1;
count = 10;

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

writeOutput(factorial);

D

int counter = 5;
int factorial = 1;

do {
    factorial *= counter--; // Multiply, then decrement.
} while (counter > 0);

writeln("factorial of 5 is ", factorial);

Fortran

A régi FORTRAN 77 esetében nincs DO-WHILE konstrukció, de ugyanaz a hatás érhető el a GOTO használatával:

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

A Fortran 90-es és későbbi verzióiban sincs do-while konstrukció, de van egy darab loop- konstrukciója, amely a "do while" kulcsszavakat használja, és így valójában megegyezik a for ciklussal .

program FactorialProg
    integer :: counter = 5
    integer :: factorial = 1
    
    factorial = factorial * counter
    counter = counter - 1
    
    do while (counter > 0) ! Truth value is tested before the loop
        factorial = factorial * counter
        counter = counter - 1
    end do
    
    print *, factorial
end program FactorialProg

Jáva

int counter = 5;
int factorial = 1;

do {
    factorial *= counter--; /* Multiply, then decrement. */
} while (counter > 0);

System.out.println("The factorial of 5 is " + factorial);

//============================================//
// The below function does the same as above. //
//============================================//

int counter = 5;
int factorial = 1;

while (counter > 0){
    factorial *= counter--; /* Multiply, then decrement. */
}

System.out.println("The factorial of 5 is " + factorial);

JavaScript

let counter = 5; // Declaring two variables, counter and factorial 
let factorial = 1; 

do {
    factorial *= counter--; //What will be looped
} while (counter > 0); //The looping conditions

console.log(factorial); //Showing the result

Kotlin

var counter = 5
var factorial = 1
//These line of code is almost the same as the above JavaScript codes, the only difference is the keyword that shows the results
do {
    factorial *= counter--
} while (counter > 0)

println("Factorial of 5 is $factorial")

Pascal

Pascalnak nincs tennivalója / ideje; ehelyett van egy ismétlés / ig. Amint a bevezetőben említettük, az ismétlés / ig egyenértékűnek tekinthető a 'do kód, míg nem kifejezés' konstrukcióval.

factorial := 1;
counter := 5;
repeat
   factorial := factorial * counter;
   counter := counter - 1; // In Object Pascal one may use dec (counter);
until counter = 0;

PHP

$counter = 5;
$factorial = 1;

do {
    $factorial *= $counter--;
} while ($counter > 0);

echo $factorial;

PL / I

A PL / I DO utasítás alátámasztja a teszt utáni ciklus ( do amíg ), az előteszt ciklus ( do while ) és a for ciklus funkcióit . Minden függvény egyetlen utasításban szerepelhet. A példa csak a "do till" szintaxist mutatja.

declare counter   fixed initial(5);
declare factorial fixed initial(1);

do until(counter <= 0);
    factorial = factorial * counter;
    counter = counter - 1;
end;

put(factorial);

Piton

A Pythonból hiányzik egy adott művelet, míg az áramlásvezérlő konstrukció. Az egyenérték azonban megépíthető egy darab hurokból, szakítással.

counter = 5
factorial = 1

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

Ütő

Az Racket-ben, akárcsak a többi Scheme- megvalósításban, a "named-let" a hurkok megvalósításának népszerű módja:

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

Hasonlítsa ezt össze a Racket while loop példájával. Ne feledje, hogy egy megnevezett let is érvelhet.

Az ütő és a séma megfelelő do ciklust is biztosít.

(define (factorial n)
    (do ((counter n (- counter 1))
        (result 1 (* result counter)))
    ((= counter 0) result) ; Stop condition and return value.
    ; The body of the do-loop is empty.
    ))

Rubin

counter = 10
factorial = 2

begin
  factorial *= counter
  counter -= 2
end while counter > 1

puts factorial

Csevej

| counter factorial |
counter := 5.
factorial := 1.

[counter > 0] whileTrue: 
    [factorial := factorial * counter.
    counter := counter - 1].

Transcript show: factorial printString

Gyors

Swift 2.x és újabb:

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)

Visual Basic .NET

Dim counter As Integer = 5
Dim factorial As Integer = 1

Do
    factorial *= counter
    counter -= 1 
Loop While counter > 0

Console.WriteLine(factorial)

Lásd még

Hivatkozások

Külső linkek