Сделать цикл 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 [ править ]
этого раздела Фактическая точность оспаривается . ( Ноябрь 2020 г. ) |
Эти примеры программ вычисляют факториал 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:
Dim Factorial As Integer
Dim counter As Integer
Factorial = 1
counter = 5
Do
Factorial = Factorial * Counter
Counter = Counter - 1
Цикл While counter > 0
Вывести факториал
C, C++, D [ править ]
интервал счетчика = 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
do while ( счетчик > 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 ] покаTrue:
[ факториал := факториал * счетчик .
счетчик := счетчик - 1 ] .
Расшифровка показа: факториал printString
См. также [ править ]
Ссылки [ править ]
- ^ «Многострочный макрос C: do/ while(0) против блока области действия» . Переполнение стека .
- ^ «Майкрософт визуал бейсик» . msdn.microsoft.com . Проверено 21 января 2016 г.