Пока цикл - While loop
Конструкции петель |
---|
В большинстве языков компьютерного программирования цикл while - это оператор потока управления, который позволяет многократно выполнять код на основе заданного логического условия. В то время как цикл можно рассматривать как повторение , если заявление .
Обзор
Конструкция 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
Эти циклы 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;
AutoHotkey
counter := 5
factorial := 1
While counter > 0
factorial *= counter--
MsgBox % factorial
Microsoft 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
Оболочка Bourne (Unix)
counter=5
factorial=1
while [ $counter -gt 0 ]; do
factorial=$((factorial * counter))
counter=$((counter - 1))
done
echo $factorial
C или C ++
int main() {
int counter = 5;
int factorial = 1;
while (counter > 1)
factorial *= counter--;
printf("%d", factorial);
}
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 нет оператора whiile, но он выполняет функцию оператора 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);
Lua
counter = 5
factorial = 1
while counter > 0 do
factorial = factorial * counter
counter = counter - 1
end
print(factorial)
MATLAB и GNU Octave
counter = 5;
factorial = 1;
while (counter > 0)
factorial = factorial * counter; %Multiply
counter = counter - 1; %Decrement
end
factorial
Mathematica
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 и repeat . Пока повторяет одну инструкцию (если она не заключена в блок begin-end), пока выполняется условие. Оператор repeat многократно выполняет блок из одного или нескольких операторов через оператор until и продолжает повторяться, если условие не ложно. Основное различие между ними заключается в том, что цикл 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.
Perl
my $counter = 5;
my $factorial = 1;
while ($counter > 0) {
$factorial *= $counter--; # Multiply, then decrement
}
print $factorial;
Циклы 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;
PL / I
declare counter fixed initial(5);
declare factorial fixed initial(1);
do while(counter > 0)
factorial = factorial * counter;
counter = counter - 1;
end;
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!")
Ракетка
В Racket, как и в других реализациях Scheme , популярным способом реализации циклов является named-let :
#lang racket
(define counter 5)
(define factorial 1)
(let loop ()
(when (> counter 0)
(set! factorial (* factorial counter))
(set! counter (sub1 counter))
(loop)))
(displayln factorial)
Использование макро - системы, реализует то время как цикл является тривиальным упражнения (обычно используется для введения макросов):
#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)
Но обратите внимание, что императивный стиль программирования часто не приветствуется в Racket (как и в Scheme).
Рубин
# 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 во время цикла не является языковой конструкцией , но определенный в классе BlockClosure
как метод с одним параметром, тело как закрытие , используя себя в качестве условия.
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.
Tcl
set counter 5
set factorial 1
while {$counter > 0} {
set factorial [expr $factorial * $counter]
incr counter -1
}
puts $factorial
VEX
int counter = 5;
int factorial = 1;
while (counter > 1)
factorial *= counter--;
printf("%d", factorial);
PowerShell
$counter = 5
$factorial = 1
while ($counter) {
$factorial *= $counter--
}
$factorial
Пока язык программирования
Язык программирования While - это простой язык программирования, построенный из присваиваний, последовательной композиции, условных выражений и операторов while, используемый в теоретическом анализе семантики императивного языка программирования .
C := 5;
F := 1;
while (C > 1) do
F := F * C;
C := C - 1;
Смотрите также
- Сделать цикл while
- Для цикла
- Для каждого
- LOOP (язык программирования) - язык программирования со свойством, что функции, которые он может вычислять, в точности являются примитивными рекурсивными функциями.