Пока цикл
Эта статья нуждается в дополнительных цитатах для проверки . ( октябрь 2016 г. ) |
Конструкции цикла |
---|
В большинстве языков программирования цикл 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--;
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)
МАТЛАБ, Октава
[ редактировать ]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
[ редактировать ]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;
См. также
[ редактировать ]- Сделать цикл while
- Для цикла
- Фореас
- Примитивная рекурсивная функция
- Общая рекурсивная функция
- LOOP (язык программирования) – язык программирования, обладающий тем свойством, что функции, которые он может вычислять, являются в точности примитивно-рекурсивными функциями.
Ссылки
[ редактировать ]- ^ Перейти обратно: а б «Операторы while и do- while (Учебные пособия по Java > Изучение языка Java > Основы языка)» . Dosc.oracle.com . Проверено 21 октября 2016 г.
- ^ "пока (ссылка на C#)" . Msdn.microsoft.com . Проверено 21 октября 2016 г.
- ^ «Глава 3: Язык программирования While» (PDF) . Profs.sci.univr.it . Проверено 21 октября 2016 г.
- ^ Флемминг Нильсон; Ханне Р. Нильсон; Крис Хэнкин (1999). Принципы анализа программ . Спрингер. ISBN 978-3-540-65410-0 . Проверено 29 мая 2013 г.
- ^ Иллингворт, Валери (11 декабря 1997 г.). Словарь вычислительной техники . Оксфордский справочник в мягкой обложке (4-е изд.). Издательство Оксфордского университета. ISBN 9780192800466 .