Выполнить цикл while - Do while loop

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

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

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

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

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

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

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

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

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

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

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

пока (истинный) {   Выполнять работу();   если (!условие) перемена;}

или же

LOOPSTART:    Выполнять работу();    если (условие) идти к LOOPSTART;

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

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

ActionScript 3

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

Ада

с Ada.Integer_Text_IO;процедура Факториал является    Прилавок   : Целое число := 5;    Факториал : Целое число := 1;начинать    петля        Факториал := Факториал * Прилавок;        Прилавок   := Прилавок - 1;        выход когда Прилавок = 0;    конец петля;    Ада.Integer_Text_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Делать     факториал = факториал * прилавок    прилавок = прилавок - 1Петля Пока прилавок > 0Распечатать факториал

C #

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

C

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

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

C ++

int прилавок = 5;int факториал = 1;делать {    факториал *= прилавок--;} пока (прилавок > 0);стандартное::cout << "факториал 5 есть"<< факториал << стандартное::конец;

CFScript

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

D

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

Фортран

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

      ЦЕЛОЕ CNT,ФАКТ      CNT=5      ФАКТ=1    1 ПРОДОЛЖИТЬФАКТ=ФАКТ*CNT      CNT=CNT-1      ЕСЛИ (CNT.GT.0) ИДТИ К 1      РАСПЕЧАТАТЬ*,ФАКТ      КОНЕЦ

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

программа ФакториалПрог    целое число :: прилавок = 5    целое число :: факториал = 1        факториал = факториал * прилавок    прилавок = прилавок - 1        делать пока (прилавок > 0) ! Значение истины проверяется перед циклом        факториал = факториал * прилавок        прилавок = прилавок - 1    конец делать    Распечатать *, факториалконец программы ФакториалПрог

Ява

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

JavaScript

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

[3]

Котлин

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

[4]

Паскаль

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

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

PHP

$ counter = 1;$ факториал = 1;$ loop = 5;делать {    эхо $ факториал * $ counter;    $ counter ++;    $ loop--;} пока ($ loop > 0);

PL / I

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

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

Python

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

прилавок = 5факториал = 1пока Истинный:    факториал *= прилавок    прилавок -= 1        если прилавок == 0:        перемена    Распечатать(факториал)

Ракетка

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

#lang ракетка(определять прилавок 5)(определять факториал 1)(позволять петля ()    (набор! факториал (* факториал прилавок))    (набор! прилавок (sub1 прилавок))    (когда (> прилавок 0) (петля)))(displayln факториал)

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

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

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

Рубин

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

Болтовня

| встречный факториал |прилавок := 5.факториал := 1.[прилавок > 0] whileTrue:     [факториал := факториал * прилавок.    прилавок := прилавок - 1].Стенограмма Показать: факториал printString

Быстрый

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

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

Swift 1.x:

вар прилавок = 5вар факториал = 1делать {    факториал *= прилавок    прилавок -= 1} пока прилавок > 0println(факториал)

Visual Basic .NET

Тусклый прилавок В качестве Целое число = 5Тусклый факториал В качестве Целое число = 1Делать    факториал *= прилавок    прилавок -= 1 Петля Пока прилавок > 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.

внешняя ссылка