Jump to content

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

Блок-схема цикла Do 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 [ править ]

Эти примеры программ вычисляют факториал 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

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

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

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

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

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 68b3e5b869a5d2e8230e65a44825cdec__1713346980
URL1:https://arc.ask3.ru/arc/aa/68/ec/68b3e5b869a5d2e8230e65a44825cdec.html
Заголовок, (Title) документа по адресу, URL1:
Do while loop - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)