stringtranslate.com

Сделать цикл while

Блок-схема цикла Do While

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

Конструкция do while состоит из символа процесса и условия. Сначала выполняется код внутри блока. Затем оценивается состояние. Если условие истинно , код внутри блока выполняется снова. Это повторяется до тех пор, пока условие не станет ложным .

Циклы while проверяют условие после выполнения блока кода. Эту структуру управления можно назвать циклом после тестирования . Это означает, что цикл do- while является циклом условия выхода. Однако цикл while проверит условие перед выполнением кода внутри блока.

Это означает, что сначала всегда выполняется код, а затем оценивается выражение или условие теста. Этот процесс повторяется до тех пор, пока выражение принимает значение true. Если выражение ложно, цикл завершается. Цикл while устанавливает истинность утверждения как необходимое условие выполнения кода. Цикл do- while обеспечивает непрерывное выполнение действия до тех пор, пока условие не перестанет быть истинным.

Возможно, а иногда и желательно, чтобы условие всегда считалось истинным. Это создает бесконечный цикл . Когда бесконечный цикл создается намеренно, обычно существует другая структура управления, которая позволяет завершить цикл. Например, оператор Break позволит завершить бесконечный цикл.

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

Эквивалентные конструкции

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

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

Выполнять работу ();while ( условие ) { do_work (); }   

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

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

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

или

LOOPSTART : do_work (); если ( условие ) перейти к LOOPSTART ;     

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

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

Ада

с  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:

Тусклый факториал как целое число. Тусклый счетчик как целое число.      факториал = 1 счетчик = 5    Do факториал = факториал * счетчик счетчик = счетчик - 1 Цикл Пока счетчик > 0              Распечатать факториал 

С, С++, Д

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

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

Фортран

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

 INTEGER CNT , FACT CNT = 5 FACT = 1 1 ПРОДОЛЖИТЬ FACT = FACT * CNT CNT = CNT - 1 ЕСЛИ ( CNT . GT . 0 ) ПЕРЕЙТИ К 1 ПЕЧАТЬ * , FACT END            

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

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

Джава

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

Паскаль

Паскаль использует синтаксис повторения/пока вместо выполнения while.

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

ПЛ/Я

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

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

Ракетка

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

#lang Racket ( определить счетчик 5 ) ( определить факториал 1 ) ( let цикл () ( set! факториал ( * факториал счетчик )) ( установить! счетчик ( счетчик sub1 )) ( когда ( > счетчик 0 ) ( цикл ))) ( displayln факториал )                     

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

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

( define ( факториал n ) ( do (( счетчик n ( - счетчик 1 )) ( результат 1 ( * счетчик результата ))) (( = счетчик 0 ) результат ) ; Условие остановки и возвращаемое значение. ; Тело do- цикл пуст. ))                    

Болтовня

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

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

Рекомендации

  1. ^ «Многострочный макрос C: do/ while(0) против блока области» . Переполнение стека .
  2. ^ «Microsoft Visual Basic» . msdn.microsoft.com . Проверено 21 января 2016 г.

Внешние ссылки