Цикл while

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Діаграма циклу while

У більшості мов комп'ютерного програмування цикл while є оператором потоку керування, який дозволяє багаторазово виконувати код на основі заданої булевої умови. Цикл while можна розглядати як повторюваний умовний перехід (оператор if).

Огляд

[ред. | ред. код]

Конструкція while складається з блоку коду та умови/виразу[1].

Умова/вираз оцінюється, і якщо умова/вираз істинне,[1] виконується код у межах усіх наступних у блоці. Це повторюється, доки умова/вираз не стане false. Оскільки цикл while перевіряє умову/вираз перед виконанням блоку, структуру керування часто також називають циклом з передумовою . Порівняйте це з циклом do while, який перевіряє умову/вираз після виконання циклу.

Наприклад, у мовах C, Java, C#,[2] 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);
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
int main() {
    int count = 5;
    int factorial = 1;

    while (count > 1)
        factorial *= count--;

    printf("%d", factorial);
}
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 має дві форми циклу 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;
$counter = 5;
$factorial = 1;

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

echo $factorial;
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!")

Див. також

[ред. | ред. код]

Примітки

[ред. | ред. код]
  1. а б The while and do-while Statements (The Java Tutorials > Learning the Java Language > Language Basics). Dosc.oracle.com. Процитовано 21 жовтня 2016.
  2. while (C# reference). Msdn.microsoft.com. Процитовано 21 жовтня 2016.