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

Конструкции цикла |
---|
Во многих программирования языках цикл do while — это потока управления оператор , который выполняет блок кода, а затем либо повторяет блок, либо выходит из цикла в зависимости от заданного логического условия.
Конструкция do while состоит из символа процесса и условия. Сначала выполняется код внутри блока. Затем оценивается состояние. Если условие истинно, код внутри блока выполняется снова. Это повторяется до тех пор, пока условие не станет ложным .
Циклы while проверяют условие после выполнения блока кода. Эту структуру управления можно назвать циклом после тестирования . Это означает, что цикл do- while является циклом условия выхода. Однако цикл while проверит условие перед выполнением кода внутри блока.
Это означает, что сначала всегда выполняется код, а затем оценивается выражение или условие теста. Этот процесс повторяется до тех пор, пока выражение принимает значение true. Если выражение ложно, цикл завершается. Цикл while устанавливает истинность утверждения как необходимое условие выполнения кода. Цикл do- while обеспечивает непрерывное выполнение действия до тех пор, пока условие не перестанет быть истинным.
Возможно, а иногда и желательно, чтобы условие всегда считалось истинным. Это создает бесконечный цикл . Когда бесконечный цикл создается намеренно, обычно существует другая структура управления, которая позволяет завершить цикл. Например, оператор Break позволит завершить бесконечный цикл.
В некоторых языках для этого типа цикла может использоваться другое соглашение об именах. Например, в языках Pascal и Lua есть цикл « повторение до тех пор », который продолжает выполняться до тех пор, пока управляющее выражение не станет истинным, а затем завершается. Напротив, цикл while выполняется , пока управляющее выражение истинно, и завершается, когда выражение становится ложным.
Эквивалентные конструкции [ править ]
do {
do_work();
} while (condition);
эквивалентно
do_work();
while (condition) {
do_work();
}
Таким образом, цикл do... while сохраняет первоначальную «загрузку цикла» с помощью do_work();
на линии перед while
петля.
Пока оператор continue не используется, приведенное выше технически эквивалентно следующему (хотя эти примеры не являются типичными или современными, используемыми в повседневных компьютерах):
while (true) {
do_work();
if (!condition) break;
}
или
LOOPSTART:
do_work();
if (condition) goto LOOPSTART;
Демонстрация циклов do while [ править ]
![]() | этого раздела Фактическая точность оспаривается . ( Ноябрь 2020 г. ) |
Эти примеры программ вычисляют факториал 5, используя синтаксис соответствующего языка для цикла do- while.
Есть [ править ]
with Ada.Integer_Text_IO;
procedure Factorial is
Counter : Integer := 5;
Factorial : Integer := 1;
begin
loop
Factorial := Factorial * Counter;
Counter := Counter - 1;
exit when Counter = 0;
end loop;
Ada.Integer_Text_IO.Put (Factorial);
end Factorial;
БАЗОВЫЙ [ править ]
Ранние 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
Loop While counter > 0
Print factorial
C, C++, D [ править ]
int counter = 5;
int factorial = 1;
do {
factorial *= counter--; /* Multiply, then decrement. */
} while (counter > 0);
printf("factorial of 5 is %d\n", factorial);
Операторы Do- while(0) также часто используются в макросах C как способ объединить несколько операторов в обычный (в отличие от составного) оператор. После макроса ставится точка с запятой, что обеспечивает более функциональный вид для простых парсеров и программистов, а также позволяет избежать проблемы с областью действия с if
. Это рекомендуется стандартом кодирования CERT C по правилу PRE10-C. [1]
Фортран [ править ]
В устаревшем Fortran 77 нет конструкции DO-WHILE, но того же эффекта можно достичь с помощью GOTO:
INTEGER CNT,FACT
CNT=5
FACT=1
1 CONTINUE
FACT=FACT*CNT
CNT=CNT-1
IF (CNT.GT.0) GOTO 1
PRINT*,FACT
END
В Фортране 90 и более поздних версиях также нет конструкции do- while, но есть конструкция цикла while , которая использует ключевые слова «do while» и, таким образом, фактически аналогична циклу for . [2]
program FactorialProg
integer :: counter = 5
integer :: factorial = 1
factorial = factorial * counter
counter = counter - 1
do while (counter > 0) ! Truth value is tested before the loop
factorial = factorial * counter
counter = counter - 1
end do
print *, factorial
end program FactorialProg
Ява [ править ]
int counter = 5;
int factorial = 1;
do {
factorial *= counter--; /* Multiply, then decrement. */
} while (counter > 0);
System.out.println("The factorial of 5 is " + factorial);
Паскаль [ править ]
Паскаль использует синтаксис повторения/пока вместо выполнения while.
factorial := 1;
counter := 5;
repeat
factorial := factorial * counter;
counter := counter - 1; // In Object Pascal one may use dec (counter);
until counter = 0;
ПЛ/И [ править ]
Оператор PL/I DO включает в себя функции цикла после тестирования ( do Until ), цикла перед тестированием ( do while ) и цикла for . Все функции могут быть включены в один оператор. В примере показан только синтаксис «делать до».
declare counter fixed initial(5);
declare factorial fixed initial(1);
do until(counter <= 0);
factorial = factorial * counter;
counter = counter - 1;
end;
put(factorial);
Ракетка [ править ]
В Racket, как и в других реализациях Scheme , «named-let» является популярным способом реализации циклов:
#lang racket
(define counter 5)
(define factorial 1)
(let loop ()
(set! factorial (* factorial counter))
(set! counter (sub1 counter))
(when (> counter 0) (loop)))
(displayln factorial)
Сравните это с первым примером цикла while для Racket. Имейте в виду, что именованный оператор let также может принимать аргументы.
Racket и Scheme также обеспечивают правильный цикл выполнения.
(define (factorial n)
(do ((counter n (- counter 1))
(result 1 (* result counter)))
((= counter 0) result) ; Stop condition and return value.
; The body of the do-loop is empty.
))
Смолток [ править ]
| counter factorial |
counter := 5.
factorial := 1.
[counter > 0] whileTrue:
[factorial := factorial * counter.
counter := counter - 1].
Transcript show: factorial printString
См. также [ править ]
Ссылки [ править ]
- ^ «Многострочный макрос C: do/ while(0) против блока области действия» . Переполнение стека .
- ^ «Майкрософт визуал бейсик» . msdn.microsoft.com . Проверено 21 января 2016 г.
Внешние ссылки [ править ]
