Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску
Блок-схема цикла Do While

В большинстве языков программирования , цикл do while - это оператор потока управления, который выполняет блок кода хотя бы один раз, а затем либо повторно выполняет блок, либо прекращает его выполнение, в зависимости от заданного логического условия в конце блока. .

Конструкция do while состоит из символа процесса и условия. Сначала выполняется код внутри блока, а затем оценивается условие. Если условие истинно, код в блоке выполняется снова. Это повторяется до тех пор, пока условие не станет ложным . Поскольку циклы do while проверяют условие после выполнения блока, структура управления часто также известна как цикл пост-тестирования . Контраст с циклом while, который проверяет условие перед выполнением кода в блоке, цикл do-while является циклом условия выхода. Это означает, что код всегда должен выполняться первым, а затем оценивается выражение или условие проверки. Если это правда, код снова выполняет тело цикла. Этот процесс повторяется до тех пор, пока выражение истинно. Если выражение ложно, цикл завершается, и управление передается оператору, следующему за циклом do-while. Другими словами, в то время как цикл while устанавливает истинность оператора в качестве прецедента условия для выполнения кода, цикл do-while обеспечивает продолжающееся выполнение действия, которое может быть отменено ложностью условия, которая является ложностью ( т. Е. Истинностью условия). отрицание условия) задается каксостояние последующее .

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

Некоторые языки могут использовать другое соглашение об именах для этого типа цикла. Например, в языке Паскаль есть цикл « повторять до », который продолжается до тех пор, пока управляющее выражение не станет истинным (а затем завершится), тогда как цикл «пока» выполняется, пока управляющее выражение истинно (и завершается, когда выражение становится истинным). ложный).

Эквивалентные конструкции [ править ]

делать  {  do_work ();  }  while  ( условие );

эквивалентно

do_work ();while  ( условие )  {  do_work (); }

Таким образом, цикл do ... while сохраняет начальную "загрузку цикла" do_work();в строке перед whileциклом.

Пока оператор continue не используется, приведенное выше технически эквивалентно следующему (хотя эти примеры не являются типичным или современным стилем, используемым в повседневных компьютерах):

в то время как  ( правда )  {  do_work ();  если  ( ! условие )  перерыв ; }

или же

LOOPSTART :  do_work ();  if  ( условие )  goto  LOOPSTART ;

Демонстрация цикла do while [ править ]

Эти примеры программ вычисляют факториал 5, используя синтаксис соответствующих языков для цикла do-while.

ActionScript 3 [ править ]

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

Ада [ править ]

с  Ada.Integer_Text_IO ; Факториал  процедуры -  Counter  :  Integer  : =  5 ;  Факториал  :  Целое число  : =  1 ; начало  цикла  Факториал  : =  Факториал  *  Счетчик ;  Счетчик  : =  Счетчик  -  1 ;  выйти,  когда  Counter  =  0 ;  конец  петли ; Ада . Целочисленный_текст_IO . Положите  ( Факториал ); конец  Факториал ;

ОСНОВНОЙ [ править ]

Ранние BASIC (такие как GW-BASIC ) использовали синтаксис WHILE / WEND. Современные BASIC, такие как PowerBASIC, предоставляют структуры WHILE / WEND и DO / LOOP с синтаксисом, таким как DO WHILE / LOOP, DO UNTIL / LOOP, DO / LOOP WHILE, DO / LOOP UNTIL и DO / LOOP (без внешнего тестирования, но с условным EXIT LOOP где-нибудь внутри цикла). Типичный исходный код BASIC:

Dim  factorial  как  целое число Dim  counter  as  Integerфакториал  =  1 счетчик  =  5Do  factorial  =  factorial  *  counter  counter  =  counter  -  1 Loop  While  counter  >  0Напечатать  факториал

C # [ править ]

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

C [ править ]

int  counter  =  5 ; int  factorial  =  1 ;сделать  {  факториал  * =  счетчик - ;  / * Умножение, затем уменьшение. * / }  while  ( counter  >  0 );printf ( "факториал 5 равен% d \ n " ,  факториал );

Операторы Do-while (0) также часто используются в макросах C как способ обернуть несколько операторов в обычный (в отличие от составного) оператор. Это делает точку с запятой необходимой после макроса, обеспечивая более функциональный вид для простых синтаксических анализаторов и программистов, а также избегая проблемы с областью видимости if. Это рекомендовано правилом PRE10-C стандарта CERT C Coding Standard . [1]

C ++ [ править ]

int  counter  =  5 ; int  factorial  =  1 ;сделать  {  факториал  * =  счетчик - ; }  while  ( counter  >  0 );std :: cout  <<  "факториал 5 равен" <<  факториал  <<  std :: endl ;

CFScript [ править ]

факториал  =  1 ; count  =  10 ;делать  {  факториал  * =  счетчик - ; }  while  ( count  >  1 );writeOutput ( факториал );

D [ править ]

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

Фортран [ править ]

В устаревшем FORTRAN 77 нет конструкции DO-WHILE, но того же эффекта можно добиться с помощью GOTO:

 INTEGER CNT , FACT  CNT = 5  FACT = 1  1  ПРОДОЛЖИТЬ FACT = FACT * CNT CNT = CNT - 1 IF ( CNT . GT . 0 ) GOTO 1 PRINT * , FACT END       

В Fortran 90 и более поздних версиях также нет конструкции do-while, но есть конструкция цикла while, которая использует ключевые слова do while и, таким образом, фактически такая же, как цикл for . [2]

программа FactorialProg  integer  ::  counter  =  5  integer  ::  factorial  =  1  факториал  =  факториал  *  счетчик  счетчик  =  счетчик  -  1  делать пока  ( счетчик  >  0 )  ! Значение истинности проверяется до цикла  factorial  =  factorial  *  counter  counter  =  counter  -  1  end do  print * , факториал конечной программы FactorialProg   

Java [ править ]

int  counter  =  5 ; int  factorial  =  1 ;сделать  {  факториал  * =  счетчик - ;  / * Умножение, затем уменьшение. * / }  while  ( counter  >  0 );Система . из . println ( "Факториал 5 равен"  +  факториал );// ============================================ // // Следующая функция делает то же, что и выше. // // ============================================ //int  counter  =  5 ; int  factorial  =  1 ;в то время как  ( счетчик  >  0 ) {  факториал  * =  счетчик - ;  / * Умножение, затем уменьшение. * / }Система . из . println ( "Факториал 5 равен"  +  факториал );

JavaScript [ править ]

пусть  counter  =  5 ;  // Объявление двух переменных, счетчика и факториала let  factorial  =  1 ; сделать  {  факториал  * =  счетчик - ;  // Что будет зацикливаться }  while  ( counter  >  0 );  // Условия циклаконсоль . журнал ( факториал );  // Отображение результата

[3]

Котлин [ править ]

var  counter  =  5 var  factorial  =  1 // Эта строка кода почти такая же, как и приведенные выше коды JavaScript, с той лишь разницей, что ключевое слово показывает результаты do  {  factorial  * =  counter - }  while  ( counter  >  0 )println ( "Факториал 5 равен $ факториалу " )

[4]

Паскаль [ править ]

У Паскаля нет do / while; вместо этого он имеет повторение / до. Как упоминалось во введении, можно считать, что повторение / до эквивалентно конструкции «код, а не выражение».

факториал  : =  1 ; счетчик  : =  5 ; повторять  факториал  : =  факториал  *  счетчик ;  counter  : =  counter  -  1 ;  // В Object Pascal можно использовать dec (counter); пока  counter  =  0 ;

PHP [ править ]

$ counter  =  5 ; $ факториал  =  1 ;сделать  {  $ factorial  * =  $ counter - ; }  while  ( $ counter  >  0 );echo  $ factorial ;

PL / I [ править ]

Оператор PL / I DO включает в себя функции цикла после тестирования ( do until ), цикла перед тестом ( do while ) и цикла for . Все функции могут быть включены в один оператор. В примере показан только синтаксис «делать до».

объявить счетчик фиксированным начальным (5);объявить факториал фиксированным начальным (1);делать до (counter <= 0); факториал = факториал * счетчик; counter = counter - 1;конец;положить (факториал);

Python [ править ]

В Python отсутствует конкретная конструкция управления потоком выполнения. Однако эквивалент может быть построен из цикла while с разрывом.

счетчик  =  5 факториал  =  1while  True :  факториал  * =  счетчик  счетчика  - =  1  если  counter  ==  0 :  перерыв печать ( факториал )

Ракетка [ править ]

В Racket, как и в других реализациях Scheme , популярным способом реализации циклов является «named-let»:

#lang racket ( определите  счетчик  5 ) ( определите  факториал  1 ) ( let  loop  ()  ( set!  factorial  ( *  factorial  counter ))  ( set!  counter  ( sub1  counter ))  ( when  ( >  counter  0 )  ( loop ))) ( displayln  факториал )

Сравните это с первым примером примера цикла while для Racket. Имейте в виду, что именованный let также может принимать аргументы.

Racket и Scheme также обеспечивают правильный цикл выполнения.

( define ( factorial  n )  ( do (( counter  n  ( - counter  1 ))  ( result  1  ( * result  counter )))  (( = counter  0 )  result )  ; Stop condition и return value  .; Тело do- шлейф пуст.  ))

Руби [ править ]

счетчик  =  10 факториал  =  2начало  факториала  * =  счетчик  счетчика  - =  2 конец  пока  счетчик  >  1ставит  факториал

Smalltalk [ править ]

| счетчик факториал | счетчик  : =  5 . факториал  : =  1 .[ counter  >  0 ] whileTrue: [ factorial  : =  factorial  *  counter .  counter  : =  counter  -  1 ] .Расшифровка  шоу:  factorial  printString

Swift [ править ]

Swift 2.x и новее: [5]

var  counter  =  5 var  factorial  =  1повторите  {  factorial  * =  counter  counter  - =  1 }  пока  counter  >  0печать ( факториал )

Swift 1.x:

var  counter  =  5 var  factorial  =  1do  {  factorial  * =  counter  counter  - =  1 }  while  counter  >  0println ( факториал )

Visual Basic .NET [ править ]

Тусклый  счетчик  как  целое число  =  5 Тусклый  факториал  как  целое число  =  1У  факторного  * =  счетчик  счетчик  - =  1  Loop  Пока  счетчик  >  0Консоль . WriteLine ( факториал )

См. Также [ править ]

  • Поток управления
  • Для цикла
  • Для каждого
  • Повторить цикл (значения)
  • Пока цикл

Ссылки [ править ]

  1. ^ "Многострочный макрос C: do / while (0) vs scope block" . Переполнение стека .
  2. ^ "Microsoft Visual Basic" . msdn.microsoft.com . Проверено 21 января +2016 .
  3. ^ "делать ... пока" . Веб-документы MDN .
  4. ^ «Поток управления: если, когда, для, пока - язык программирования Kotlin» . Котлин .
  5. ^ «Поток управления - язык программирования Swift (Swift 5.3)» . docs.swift.org .

Внешние ссылки [ править ]

  • do {...} while (0) в макросах C