Do while loop - Wikiwand
This section's factual accuracy is disputed. (November 2020) |
These example programs calculate the factorial of 5 using their respective languages' syntax for a do-while loop.
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;
BASIC
Further information: BASIC
Early BASICs (such as GW-BASIC) used the syntax WHILE/WEND. Modern BASICs such as PowerBASIC provide both WHILE/WEND and DO/LOOP structures, with syntax such as DO WHILE/LOOP, DO UNTIL/LOOP, DO/LOOP WHILE, DO/LOOP UNTIL, and DO/LOOP (without outer testing, but with a conditional EXIT LOOP somewhere inside the loop). Typical BASIC source code:
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, C++, D
int counter = 5; int factorial = 1; do { factorial *= counter--; // Multiply, then decrement. } while (counter > 0); std::println("factorial of 5 is {}", factorial);
Do-while(0) statements are also commonly used in C macros as a way to wrap multiple statements into a regular (as opposed to compound) statement. It makes a semicolon needed after the macro, providing a more function-like appearance for simple parsers and programmers as well as avoiding the scoping problem with if
. It is recommended in CERT C Coding Standard rule PRE10-C.[1]
Fortran
With legacy Fortran 77 there is no DO-WHILE construct but the same effect can be achieved with 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 and later supports a DO-While construct:
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
Java
int counter = 5; int factorial = 1; do { factorial *= counter--; // Multiply, then decrement. } while (counter > 0); System.out.println("The factorial of 5 is " + factorial);
Pascal
Pascal uses repeat/until syntax instead of do while.
factorial := 1; counter := 5; repeat factorial := factorial * counter; counter := counter - 1; // In Object Pascal one may use dec (counter); until counter = 0;
PL/I
Further information: PL/I
The PL/I DO statement subsumes the functions of the post-test loop (do until), the pre-test loop (do while), and the for loop. All functions can be included in a single statement. The example shows only the "do until" syntax.
declare counter fixed initial(5); declare factorial fixed initial(1); do until(counter <= 0); factorial = factorial * counter; counter = counter - 1; end; put(factorial);
Python
Python does not have a DO-WHILE loop, but its effect can be achieved by an infinite loop with a breaking condition at the end.
factorial = 1 counter = 5 while True: factorial *= counter counter -= 1 if counter < 1: break print(factorial)
Racket
In Racket, as in other Scheme implementations, a "named-let" is a popular way to implement loops:
#lang racket (define counter 5) (define factorial 1) (let loop () (set! factorial (* factorial counter)) (set! counter (sub1 counter)) (when (> counter 0) (loop))) (displayln factorial)
Compare this with the first example of the while loop example for Racket. Be aware that a named let can also take arguments.
Racket and Scheme also provide a proper do loop.
(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. ))
Smalltalk
| counter factorial | counter := 5. factorial := 1. [counter > 0] whileTrue: [factorial := factorial * counter. counter := counter - 1]. Transcript show: factorial printString