stringtranslate.com

Цикл While

Диаграмма потока цикла While

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

Обзор

Конструкция while состоит из блока кода и условия/выражения. [1] Условие/выражение оценивается, и если условие/выражение истинно , [1] выполняется весь код в блоке. Это повторяется до тех пор, пока условие/выражение не станет ложным . Поскольку цикл while проверяет условие/выражение до выполнения блока, управляющую структуру часто также называют циклом предварительного тестирования . Сравните это с циклом do while , который проверяет условие/выражение после выполнения цикла.

Например, в языках C , Java , C# , [2] Objective-C и C++ (которые в данном случае используют тот же синтаксис ) фрагмент кода

int x = 0 ;   пока ( x < 5 ) { printf ( "x = %d \n " , x ); x ++ ; }        

сначала проверяется, меньше ли x 5 (что так и есть), затем вводится {тело цикла}, где запускается функция printf , а x увеличивается на 1. После завершения всех операторов в теле цикла снова проверяется условие (x < 5), и цикл выполняется снова, этот процесс повторяется до тех пор, пока переменная x не примет значение 5.

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

while ( true ) { // делаем сложные вещи if ( someCondition ) break ; // еще что-нибудь }       

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

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

ActionScript 3

var counter : int = 5 ; var factorial : int = 1 ;        пока ( счетчик > 1 ) { факториал *= счетчик ; счетчик --; }        Printf ( "Факториал = %d" , факториал ); 

Ада

с  Ada.Integer_Text_IO ;процедура  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 ( Факториал ) ; end Факториал ;  

АПЛ

счетчик 5 факториал 1    : Пока счетчик > 0 факториал × счетчик счетчик - 1 : EndWhile         факториал  

или просто

! 5

AutoHotkey

счетчик  :=  5 факториал  :=  1Пока  счетчик  >  0  факториал  *=  счетчик --MsgBox  %  факториал

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

счетчик = 5 ' Счетчик = 5 факториал = 1 ' начальное значение переменной "факториал"      Пока счетчик > 0 факториал = факториал * счетчик счетчик = счетчик - 1 TextWindow.WriteLine ( counter ) EndWhile              

Визуальный базовый

Dim counter As Integer = 5 ' инициализация переменной и установка значения Dim factorial As Integer = 1 ' инициализация переменной factorial            Do While counter > 0 factorial = factorial * counter counter = counter - 1 Loop ' программа выполняется здесь, пока counter = 0               'Debug.Print factorial' Console.WriteLine(factorial) в Visual Basic .NET

Оболочка Bourne (Unix)

счетчик = 5 факториал = 1 пока [ $counter -gt 0 ] ; сделать факториал = $(( факториал * счетчик )) счетчик = $(( счетчик - 1 )) сделано            эхо $факториал 

С, С++

int main () { int count = 5 ; int factorial = 1 ;           пока ( количество > 1 ) факториал *= количество -- ;       printf ( "%d" , факториал ); } 

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

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

счетчик  =  5 ; факториал  =  1 ;пока  ( счетчик  >  1 )  {  факториал  *=  счетчик -- ; }writeOutput ( факториал );

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

<cfset  counter  =  5 > <cfset  factorial  =  1 > <cfloop  condition = "counter GT 1" >  <cfset  factorial  *=  counter -- > </cfloop> <cfoutput> # factorial # </cfoutput>

Фортран

программа FactorialProg целое число :: счетчик = 5 целое число :: факториал = 1           do while ( counter > 0 ) факториал = факториал * counter counter = counter - 1 end do               распечатать * , факториал конец программы FactorialProg  

Идти

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

счетчик , факториал := 5 , 1    для счетчика > 1 { счетчик , факториал = счетчик - 1 , факториал * счетчик }        

Java, C#, D

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

int счетчик = 5 ; int факториал = 1 ;      пока ( счетчик > 1 ) факториал *= счетчик -- ;      

JavaScript

пусть счетчик = 5 ; пусть факториал = 1 ;      пока ( счетчик > 1 ) факториал *= счетчик -- ;      console.log ( факториал ) ;

Луа

счетчик  =  5 факториал  =  1пока  счетчик  >  0  делать  факториал  =  факториал  *  счетчик  счетчик  =  счетчик  -  1 конецпечать ( факториал )

MATLAB, Октава

счетчик = 5 ; факториал = 1 ;    while ( counter > 0 ) factorial = factorial * counter ; %Умножить counter = counter - 1 ; %Уменьшить end               факториал

Математика

Блок [{ counter = 5 , factorial = 1 }, (*локализовать counter и factorial*) While [ counter > 0 , (*цикл While*) factorial *= counter ; (*Умножение*) counter -- ; (*Уменьшение*) ];         факториал ]

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

MODULE Factorial ; IMPORT Out ; VAR Counter , Factorial : INTEGER ; BEGIN Counter := 5 ; Factorial := 1 ;            WHILE Счетчик > 0 DO Факториал := Факториал * Счетчик ; DEC ( Счетчик ) END ;            Out.Int ( Факториал , 0 ) END Факториал . 

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

int $counter = 5 ; int $factorial = 1 ;      int $умножение ; пока ( $counter > 0 ) { $умножение = $факториал * $counter ;          $counter -= 1 ;   print ( "Счетчик равен: " + $counter + ", умножение равно: " + $multiplication + "\n" ); }        

Ним

var counter = 5 # Установить значение счетчика на 5 factorial = 1 # Установить значение факториала на 1        while counter > 0 : # Пока counter больше 0 factorial *= counter # Устанавливаем новое значение factorial для counter. dec counter # Устанавливаем counter равным counter - 1.           эхо- факториал 

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

while true : echo "Помогите! Я застрял в цикле!"   

Паскаль

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

программа Факториал1 ; вар Fv : целое число ;    процедура факт ( счетчик : целое число ) ; var Факториал : целое число ;     начать Факториал := 1 ;    while Counter > 0 do begin Факториал := Факториал * Счетчик ; Счетчик := Счетчик - 1 end ;                 WriteLn ( Факториал ) конец ; begin Write ( 'Введите число, чтобы вернуть его факториал: ' ) ; readln ( fv ) ; repeat fact ( fv ) ; Write ( 'Введите другое число, чтобы вернуть его факториал (или 0 для выхода): ' ) ; until fv = 0 ; end .       

Перл

мой $counter = 5 ; мой $factorial = 1 ;      while ( $counter > 0 ) { $factorial *= $counter -- ; # Умножить, затем уменьшить }        распечатать $факториал ; 

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

открыть IN , "<test.txt" ;  в то время как ( <IN> ) { печать ; }   закрыть В ; 

PHP

$счетчик  =  5 ; $факториал  =  1 ;while  ( $counter  >  0 )  {  $factorial  *=  $counter -- ;  // Умножаем, затем уменьшаем. }echo  $факториал ;

ПЛ/И

объявить  счетчик  фиксированным  начальным ( 5 ) ;
объявить  факториал  фиксированным  начальным ( 1 ) ;do while ( counter > 0 ) факториал = факториал * counter ; counter = counter - 1 ; end ;             

Питон

counter  =  5  # Установите значение 5 factorial  =  1  # Установите значение 1while  counter  >  0 :  # Пока counter(5) больше 0  factorial  *=  counter  # Устанавливаем новое значение factorial для counter.  counter  -=  1  # Устанавливаем counter на counter - 1.print ( factorial )  # Вывести значение факториала.

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

while  True :  print ( "Помогите! Я застрял в цикле!" )

Ракетка

В Racket, как и в других реализациях Scheme , именованный 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 )                     

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

#lang racket ( define-syntax-rule ( while test body ... ) ; реализует цикл while ( 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.

Рубин

# Вычислить факториал числа 5 i = 1 факториал = 1    пока i <= 5 факториал *= i i += 1 конец         ставит факториал 

Ржавчина

fn  main () { пусть счетчик mut = 5 ; пусть факториал mut = 1 ;            пока счетчик > 1 { факториал *= счетчик ; счетчик -= 1 ; }            println! ( "{}" , факториал ); } 

Smalltalk

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

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

| count factorial | count  :=  5 . factorial  :=  1 .
[ count  >  0 ] whileTrue: [ factorial  :=  factorial  *  count .  count  :=  count  -  1 ] . Транскрипт  show:  factorial

Быстрый

var  counter  =  5  // Устанавливаем начальное значение счетчика равным 5 var  factorial  =  1  // Устанавливаем начальное значение факториала равным 1while  counter  >  0  {  // Пока counter(5) больше 0  factorial  *=  counter  // Устанавливаем новое значение factorial равным factorial x counter.  counter  -=  1  // Устанавливаем новое значение counter равным counter - 1. }print ( factorial )  // Вывести значение факториала.

Тсл

установить  счетчик 5 установить факториал 1   в то время как { $counter > 0 } { set factorial [expr $factorial * $counter ] incr counter - 1 }             помещает $факториал 

ВЕКС

int счетчик = 5 ; int факториал = 1 ;      пока ( счетчик > 1 ) факториал *= счетчик -- ;      printf ( "%d" , факториал ); 

PowerShell

$счетчик  =  5 $факториал  =  1пока  ( $counter )  {  $factorial  *=  $counter -- }$факториал

В то время как (язык)

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

С  :=  5 ; Ф  :=  1 ;пока  ( C  >  1 )  делать  F  :=  F  *  C ;  C  :=  C  -  1 ;

Смотрите также

Ссылки

  1. ^ ab "Операторы while и do-while (Учебники Java > Изучение языка Java > Основы языка)". Dosc.oracle.com . Получено 21.10.2016 .
  2. ^ "while (справочник по C#)". Msdn.microsoft.com . Получено 2016-10-21 .
  3. ^ "Глава 3: Язык программирования While" (PDF) . Profs.sci.univr.it . Получено 21.10.2016 .
  4. ^ Флемминг Нильсон; Ханне Р. Нильсон; Крис Хэнкин (1999). Принципы анализа программ. Спрингер. ISBN 978-3-540-65410-0. Получено 29 мая 2013 г.
  5. ^ Иллингворт, Валери (11 декабря 1997 г.). Словарь вычислительной техники . Oxford Paperback Reference (4-е изд.). Oxford University Press. ISBN 9780192800466.