Mẫu: Các cấu trúc lặp
Trong nhiều ngôn ngữ lập trình, vòng lặp do while (hay còn gọi là do while loop) là một câu lệnh điều khiển thực thi một khối lệnh ít nhất một lần, sau đó sẽ tiếp tục thực thi khối lệnh đó, hoặc dừng lại tùy thuộc vào điều kiện boolean được kiểm tra ở cuối khối.
Định dạng tương tự
do { thực_hiện_công_việc(); } while (điều_kiện);
tương đương với (==/===)
thực_hiện_công_việc(); while (điều_kiện) { thực_hiện_công_việc(); }
hoặc
while (true) { thực_hiện_công_việc(); if (!điều_kiện) break; }
hoặc
LOOPSTART: thực_hiện_công_việc(); if (điều_kiện) goto LOOPSTART;
Vòng lặp do-while trong các ngôn ngữ lập trình
Ví dụ dưới đây tính giai thừa của số 5 bằng cách sử dụng cú pháp vòng lặp do-while trong ngôn ngữ lập trình tương ứng.
ActionScript 3
var dem:int = 5; var giaiThua:int = 1; do { giaiThua *= dem--; /* Nhân rồi giảm. */ } while (dem > 0); trace(giaiThua);
Ada
with Ada.Integer_Text_IO; procedure GiaiThua is Dem : Integer:= 5; GiaiThua: Integer:= 1; begin loop GiaiThua:= GiaiThua * Dem; Dem := Dem - 1; exit when Dem = 0; end loop; Ada.Integer_Text_IO.Put (GiaiThua); end GiaiThua;
BASIC
Trước đây, BASIC (như GW-BASIC) sử dụng cú pháp WHILE/WEND. Các phiên bản BASIC mới hơn như PowerBASIC hỗ trợ cả cấu trúc WHILE/WEND và DO/LOOP, với các cú pháp như DO WHILE/LOOP, DO UNTIL/LOOP, DO/LOOP WHILE, DO/LOOP UNTIL, và DO/LOOP. Đây là ví dụ mã nguồn BASIC tiêu biểu:
Khai báo factorial Như Số nguyên Khai báo counter Như Số nguyên factorial = 1 counter = 5 Thực hiện factorial = factorial * counter counter = counter - 1 Lặp Khi counter > 0 In factorial
C#
int counter = 5; int factorial = 1; do { factorial *= counter--; /* Nhân, sau đó giảm. */ } khi (counter > 0); System.Console.WriteLine(factorial);
C
int counter = 5; int factorial = 1; do { factorial *= counter--; /* Nhân, sau đó giảm. */ } khi(counter > 0); printf('giai thừa của 5 là %d\n', factorial);
C++
int counter = 5; int factorial = 1; do { factorial *= counter--; } khi (counter > 0); std::cout<<'giai thừa của 5 là '<<factorial<<std::endl;
CFScript
factorial = 1; count = 10; do { factorial *= count--; } khi (count > 1); writeOutput(factorial);
D
int counter = 5; int factorial = 1; do { factorial *= counter--; // Nhân và giảm } khi (counter > 0); writeln('giai thừa của 5 là ', factorial);
Fortran
Với FORTRAN 77 không có cấu trúc DO-WHILE, nhưng bạn có thể đạt được hiệu quả tương tự bằng cách sử dụng 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
Với Fortran 90 và các phiên bản sau, vòng lặp do-while thực ra tương đương với vòng lặp for.
chương trình FactorialProg nguyên:: đếm = 5 nguyên:: giai thừa = 1 giai thừa = giai thừa * đếm đếm = đếm - 1 lặp khi (đếm > 0) giai thừa = giai thừa * đếm đếm = đếm - 1 kết thúc lặp in ra *, giai thừa kết thúc chương trình FactorialProg
Java
int đếm = 5; int giai thừa = 1; lặp { giai thừa *= đếm--; /* Nhân rồi giảm. */ } trong khi (đếm > 0); System.out.println('Giai thừa của 5 là ' + giai thừa);
JavaScript
var đếm = 5; var giai thừa = 1; lặp { giai thừa *= đếm--; } trong khi (đếm > 0); console.log(giai thừa);
Kotlin
var đếm = 5 var giai thừa = 1 lặp { giai thừa *= đếm-- }trong khi(đếm > 0) println('Giai thừa của 5 là $giai thừa')
PL/I
Câu lệnh DO trong PL/I bao gồm các chức năng của vòng lặp kiểm tra sau (do until), vòng lặp kiểm tra trước (do while), và vòng lặp for. Tất cả các chức năng có thể được gộp trong một câu lệnh duy nhất. Ví dụ chỉ cho thấy cú pháp 'do until'.
khai báo đếm cố định ban đầu(5); khai báo giai thừa cố định ban đầu(1); lặp cho đến khi(đếm<=0); giai thừa = giai thừa * đếm; đếm = đếm - 1; kết thúc; put(giai thừa);
Python
Python không có cấu trúc điều khiển do while cụ thể. Tuy nhiên, bạn có thể tạo ra cấu trúc tương đương từ vòng lặp while với câu lệnh break.
đếm = 5 giai thừa = 1 while True: giai thừa *= đếm đếm -= 1 if đếm == 0: break print(giai thừa)
Racket
Racket, giống như các triển khai khác của Scheme, sử dụng 'named-let' như một cách phổ biến để thực hiện vòng lặp.
#lang racket (định nghĩa đếm 5) (định nghĩa giai thừa 1) (let vòng lặp () (set! giai thừa (* giai thừa đếm)) (set! đếm (sub1 đếm)) (when (> đếm 0) (vòng lặp))) (displayln giai thừa)
So sánh với ví dụ đầu tiên của vòng lặp while trong Racket. Cần lưu ý rằng một named let cũng có thể nhận các đối số.
Racket và Scheme cũng cung cấp vòng lặp do đúng chuẩn.
(định nghĩa (giai thừa n) (do ((đếm n (- đếm 1)) (kết quả 1 (* kết quả đếm))) ((= đếm 0) kết quả); Điều kiện dừng và giá trị trả về. ; Thân của vòng lặp do là rỗng. ))
Ruby
biến đếm = 10 giaiThua = 2 bắt đầu giaiThua *= biến đếm biến đếm -= 2 kết thúc trong khi biến đếm > 1 in ra giaiThua
Smalltalk
| biến đếm giaiThua | biến đếm:= 5. giaiThua:= 1. [biến đếm > 0] trongKhi: [giaiThua:= giaiThua * biến đếm. biến đếm:= biến đếm - 1]. Transcript hiểnThị: giaiThua inRaChuoi
Swift
Swift 2.x:
var counter = 5 var factorial = 1 lặp { factorial *= counter counter -= 1 } trong khi counter > 0 in(factorial)
Swift 1.x:
var counter = 5 var factorial = 1 thực hiện { factorial *= counter counter -= 1 } trong khi counter > 0 in(factorial)
Visual Basic.NET
Dim counter As Integer = 5 Dim factorial As Integer = 1 Thực hiện factorial *= counter counter -= 1 Vòng lặp trong khi counter > 0 Console.WriteLine(factorial)
- Điều khiển luồng
- Vòng lặp For
- Vòng lặp Foreach
- Vòng lặp While
- Vòng lặp Repeat (khác biệt)
Liên kết bên ngoài
- do {...} while (0) trong macro C