Jump to content

Пока цикл

Схема цикла цикла 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:

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;

АПЛ [ править ]

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

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

Оболочка Bourne (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 [ править ]

Код цикла одинаков для 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);

Луа [ править ]

counter = 5
factorial = 1

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

print(factorial)

MATLAB, Октава [ править ]

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");
}

Nim [ edit ]

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;

PHP [ править ]

$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);

PowerShell [ править ]

$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. ^ Jump up to: Перейти обратно: а б «Операторы 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
Номер скриншота №: 55185e3ffc295b46a6949d3db704126e__1711962660
URL1:https://arc.ask3.ru/arc/aa/55/6e/55185e3ffc295b46a6949d3db704126e.html
Заголовок, (Title) документа по адресу, URL1:
While loop - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)