Jump to content

Пока цикл

(Перенаправлено с while-loop )
Схема цикла цикла while

В большинстве языков программирования цикл while — это потока управления оператор , который позволяет многократно выполнять код на основе заданного логического условия. Цикл while можно рассматривать как повторяющийся оператор if .

Конструкция while состоит из блока кода и условия/выражения. [1] Условие/выражение оценивается, и если условие/выражение истинно , [1] выполняется код внутри всех последующих блоков в блоке. Это повторяется до тех пор, пока условие/выражение не станет ложным . Поскольку цикл 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.

Возможно, а в некоторых случаях желательно, чтобы условие всегда принимало значение true, создавая бесконечный цикл . Когда такой цикл создается намеренно, обычно существует другая управляющая структура (например, оператор прерывания ), которая управляет завершением цикла. Например:

while (true) {
    // do complicated stuff
    if (someCondition)
        break;
    // more stuff
}

Демонстрация while циклов

[ редактировать ]

Эти циклы while вычисляют факториал числа 5:

Экшнскрипт 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;
counter  5
factorial  1

:While counter > 0
    factorial × counter
    counter - 1
:EndWhile

  factorial

или просто

!5

Автогорячая клавиша

[ редактировать ]
counter := 5
factorial := 1

While counter > 0
    factorial *= counter--

MsgBox % factorial

Маленький базовый

[ редактировать ]
counter = 5    ' Counter = 5
factorial = 1  ' initial value of variable "factorial"

While counter > 0
    factorial = factorial * counter
    counter = counter - 1
    TextWindow.WriteLine(counter)
EndWhile

Визуальный Бейсик

[ редактировать ]
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

Оболочка Борна (Unix)

[ редактировать ]
counter=5
factorial=1
while [ $counter -gt 0 ]; do
    factorial=$((factorial * counter))
    counter=$((counter - 1))
done

echo $factorial
int main() {
    int count = 5;
    int factorial = 1;

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

    printf("%d", factorial);
}

Язык разметки ColdFusion (CFML)

[ редактировать ]

Синтаксис скрипта

[ редактировать ]
counter = 5;
factorial = 1;

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

writeOutput(factorial);

Синтаксис тегов

[ редактировать ]
<cfset counter = 5>
<cfset factorial = 1>
<cfloop condition="counter GT 1">
    <cfset factorial *= counter-->
</cfloop>
<cfoutput>#factorial#</cfoutput>
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

В Go нет оператора while , но он выполняет функцию оператора for при пропуске некоторых элементов оператора for .

counter, factorial := 5, 1

for counter > 1 {
	counter, factorial = counter-1, factorial*counter
}

Ява, С#, Д

[ редактировать ]

Код цикла одинаков для Java, C# и D:

int counter = 5;
int factorial = 1;

while (counter > 1)
    factorial *= counter--;
let counter = 5;
let factorial = 1;

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

console.log(factorial);
counter = 5
factorial = 1

while counter > 0 do
  factorial = factorial * counter
  counter = counter - 1
end

print(factorial)

МАТЛАБ, Октава

[ редактировать ]
counter = 5;
factorial = 1;

while (counter > 0)
    factorial = factorial * counter;      %Multiply
    counter = counter - 1;                %Decrement
end

factorial

Математика

[ редактировать ]
Block[{counter=5,factorial=1},  (*localize counter and factorial*)
    While[counter>0,            (*While loop*)
        factorial*=counter;     (*Multiply*)
        counter--;              (*Decrement*)
    ];

    factorial
]

Оберон, Оберон-2, Оберон-07, Компонентный Паскаль

[ редактировать ]
MODULE Factorial;
IMPORT Out;
VAR
    Counter, Factorial: INTEGER;
BEGIN
    Counter := 5;
    Factorial := 1;

    WHILE Counter > 0 DO
        Factorial := Factorial * Counter;
        DEC(Counter)
    END;

    Out.Int(Factorial,0)
END Factorial.

Встроенный язык Maya

[ редактировать ]
int $counter = 5;
int $factorial = 1;

int $multiplication;

while ($counter > 0) {
    $multiplication = $factorial * $counter;

    $counter -= 1;

    print("Counter is: " + $counter + ", multiplication is: " + $multiplication + "\n");
}
var
  counter = 5            # Set counter value to 5
  factorial = 1          # Set factorial value to 1

while counter > 0:       # While counter is greater than 0
    factorial *= counter # Set new value of factorial to counter.
    dec counter          # Set the counter to counter - 1.

echo factorial

Незавершающийся цикл while:

while true:
  echo "Help! I'm stuck in a loop!"

В Паскале есть две формы цикла while: while и повтор . While повторяет один оператор (если он не заключен в блок начала-конца), пока условие истинно. Оператор повторения повторно выполняет блок из одного или нескольких операторов через оператор до и продолжает повторяться, если условие не является ложным. Основное различие между ними заключается в том, что цикл while может выполняться ноль раз, если условие изначально ложно, а цикл повторения-до всегда выполняется хотя бы один раз.

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.
my $counter   = 5;
my $factorial = 1;

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

print $factorial;

Хотя циклы часто используются для чтения данных построчно (как определено в $/ разделитель строк) из открытых дескрипторов файлов:

open IN, "<test.txt";

while (<IN>) {
    print;
}

close IN;
$counter = 5;
$factorial = 1;

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

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

do while(counter > 0)
    factorial = factorial * counter;
    counter = counter - 1;
end;
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!")

В Racket, как и в других Scheme реализациях , именованный элемент является популярным способом реализации циклов:

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

Используя систему макросов, реализация цикла while является тривиальным упражнением (обычно используемым для введения макросов):

#lang racket
(define-syntax-rule (while test body ...) ; implements a while loop
    (let loop () (when test body ... (loop))))
(define counter 5)
(define factorial 1)
(while (> counter 0)
    (set! factorial (* factorial counter))
    (set! counter (sub1 counter)))
(displayln factorial)

Однако в Scheme и Racket императивный стиль программирования часто не рекомендуется.

# Calculate the factorial of 5
i = 1
factorial = 1

while i <= 5
  factorial *= i
  i += 1
end

puts factorial

Ржавчина

[ редактировать ]
fn main() {
    let mut counter = 5;
    let mut factorial = 1;

    while counter > 1 {
        factorial *= counter;
        counter -= 1;
    }

    println!("{}", factorial);
}

В отличие от других языков, в Smalltalk цикл while не является языковой конструкцией , а определен в классе. BlockClosure как метод с одним параметром, тело как замыкание , используя self в качестве условия.

В Smalltalk также есть соответствующий метод whileFalse:.

| count factorial |
count := 5.
factorial := 1.
[count > 0] whileTrue:
    [factorial := factorial * count.
    count := count - 1].
Transcript show: factorial
var counter = 5                 // Set the initial counter value to 5
var factorial = 1               // Set the initial factorial value to 1

while counter > 0 {             // While counter(5) is greater than 0
    factorial *= counter        // Set new value of factorial to factorial x counter.
    counter -= 1                // Set the new value of counter to  counter - 1.
}

print(factorial)                // Print the value of factorial.
set counter 5
set factorial 1

while {$counter > 0} {
    set factorial [expr $factorial * $counter]
    incr counter -1
}

puts $factorial
int counter = 5;
int factorial = 1;

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

printf("%d", factorial);
$counter = 5
$factorial = 1

while ($counter) {
    $factorial *= $counter--
}

$factorial

Пока (язык)

[ редактировать ]

Пока [3] императивного языка программирования — это простой язык программирования, построенный на основе присваиваний, последовательной композиции, условных операторов и операторов while, используемый в теоретическом анализе семантики . [4] [5]

C := 5;
F := 1;

while (C > 1) do
    F := F * C;
    C := C - 1;

См. также

[ редактировать ]
  1. ^ Перейти обратно: а б «Операторы while и do- while (Учебные пособия по Java > Изучение языка Java > Основы языка)» . Dosc.oracle.com . Проверено 21 октября 2016 г.
  2. ^ "пока (ссылка на C#)" . Msdn.microsoft.com . Проверено 21 октября 2016 г.
  3. ^ «Глава 3: Язык программирования While» (PDF) . Profs.sci.univr.it . Проверено 21 октября 2016 г.
  4. ^ Флемминг Нильсон; Ханне Р. Нильсон; Крис Хэнкин (1999). Принципы анализа программ . Спрингер. ISBN  978-3-540-65410-0 . Проверено 29 мая 2013 г.
  5. ^ Иллингворт, Валери (11 декабря 1997 г.). Словарь вычислительной техники . Оксфордский справочник в мягкой обложке (4-е изд.). Издательство Оксфордского университета. ISBN  9780192800466 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 6ac9e451fd1276d3a11f12682978608d__1721779320
URL1:https://arc.ask3.ru/arc/aa/6a/8d/6ac9e451fd1276d3a11f12682978608d.html
Заголовок, (Title) документа по адресу, URL1:
While loop - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)