У більшості мов комп'ютерного програмування цикл while є оператором потоку керування, який дозволяє багаторазово виконувати код на основі заданої булевої умови. Цикл while можна розглядати як повторюваний умовний перехід (оператор if).
Огляд Конструкція while складається з блоку коду та умови/виразу.
Умова/вираз оцінюється, і якщо умова/вираз істинне, виконується код у межах усіх наступних у блоці. Це повторюється, доки умова/вираз не стане false. Оскільки цикл while перевіряє умову/вираз перед виконанням блоку, структуру керування часто також називають циклом з передумовою . Порівняйте це з циклом do while, який перевіряє умову/вираз після виконання циклу.
Наприклад, у мовах C, Java, C#, Objective-C і C++ (які в цьому випадку використовують однаковий синтаксис), фрагмент коду int x = 0;
while (x < 5) { printf ("x = %d\n", x); x++; } спочатку перевіряє, чи x менший за 5, а це так, а потім вводиться {тіло циклу}, де виконується функція printf і x збільшується на 1. Після виконання всіх операторів у тілі циклу умова (x < 5) перевіряється знову, і цикл виконується знову, цей процес повторюється, доки змінна x не матиме значення 5.
Можливо, а в деяких випадках і бажано, щоб умова завжди оцінювалася як істинна, створюючи нескінченний цикл. Коли такий цикл створюється навмисно, зазвичай існує інша керуюча структура (наприклад, оператор break), яка керує завершенням циклу. Наприклад: while (true) { // do complicated stuff if (someCondition) break; // more stuff }
Демонстрація циклів while Наведені приклади різними мовами програмування демонструють розрахунок факторіалу числа 5 із використанням циклу while.
ActionScript 3
var counter: int = 5; var factorial: int = 1;
while (counter > 1) { factorial *= counter; counter--; }
Printf("Factorial = %d", factorial);
Ada
with Ada.Integer_Text_IO;
procedure Factorial is Counter : Integer := 5; Factorial : Integer := 1; begin while Counter > 0 loop Factorial := Factorial * Counter; Counter := Counter - 1; end loop;
Ada.Integer_Text_IO.Put (Factorial); end Factorial;
Small Basic counter = 5 ' Counter = 5 factorial = 1 ' initial value of variable "factorial"
While counter > 0 factorial = factorial * counter counter = counter - 1 TextWindow.WriteLine(counter) EndWhile
Visual Basic Dim counter As Integer = 5 ' init variable and set value Dim factorial As Integer = 1 ' initialize factorial variable
Do While counter > 0 factorial = factorial * counter counter = counter - 1 Loop ' program goes here, until counter = 0
'Debug.Print factorial ' Console.WriteLine(factorial) in Visual Basic .NET C, C++
int main() { int count = 5; int factorial = 1;
while (count > 1) factorial *= count--;
printf("%d", factorial); }
Fortran
program FactorialProg integer :: counter = 5 integer :: factorial = 1
do while (counter > 0) factorial = factorial * counter counter = counter - 1 end do
print *, factorial end program FactorialProg
Java, C#, D
Код для циклу while є однаковим у Java, C# та D:
int counter = 5; int factorial = 1;
while (counter > 1) factorial *= counter--;
JavaScript
let counter = 5; let factorial = 1;
while (counter > 1) factorial *= counter--;
console.log(factorial);
Pascal
Pascal має дві форми циклу while: while і repeat. While повторює один оператор (якщо він не укладений у блок begin-end), доки умова є істинною. Інструкція repeat повторно виконує блок з одного або кількох операторів через оператор until і продовжує повторюватися, якщо умова не є помилковою. Основна відмінність між ними полягає в тому, що цикл while може виконуватися нуль разів, якщо умова початково хибна, цикл repeat-until завжди виконується принаймні один раз.
program Factorial1; var Fv: integer;
procedure fact(counter:integer); var Factorial: integer;
begin Factorial := 1;
while Counter > 0 do begin Factorial := Factorial * Counter; Counter := Counter - 1 end;
WriteLn(Factorial) end;
begin Write('Enter a number to return its factorial: '); readln(fv); repeat fact(fv); Write('Enter another number to return its factorial (or 0 to quit): '); until fv=0; end.
Цикли While часто використовуються для читання даних рядок за рядком (як визначено роздільником рядків $/) із відкритих дескрипторів файлів: open IN, "<test.txt";
while (<IN>) { print; }
close IN;
PHP
$counter = 5; $factorial = 1;
while ($counter > 0) { $factorial *= $counter--; // Multiply, then decrement. }
echo $factorial;
Python
counter = 5 # Set the value to 5 factorial = 1 # Set the value to 1
while counter > 0: # While counter(5) is greater than 0 factorial *= counter # Set new value of factorial to counter. counter -= 1 # Set the counter to counter - 1.
print(factorial) # Print the value of factorial.
Нескінченний цикл while:
while True: print("Help! I'm stuck in a loop!")
Див. також
Цикл do while Цикл for Цикл Foreach Примітивно-рекурсивна функція Загальна рекурсивна функція LOOP (мова програмування) — мова програмування з властивістю, що функції, які вона може обчислювати, є саме примітивними рекурсивними функціями
Примітки