Цикл do while — це синтаксична конструкція керування послідовністю виконання операторів програми, призначена для повторення виконання щонайменше одного разу блока операторів. Рішення про повторне виконання приймається в кінці блока, в залежності від умови логічного виразу.
Конструкція do while
складається із символу виокремлення повторюваного блока операторів та умови його повторення. Спочатку виконується код блока, а потім перевіряється умова. Якщо умова виконується, блок операторів виконується знову. Це повторюється, доки умова не стане хибною.
Оскільки цикл do while
перевіряє стан після виконання блоку, така структура керування часто називається циклом з післяумовою, на відміну від циклу while
, у якому умова перевіряється перед виконанням блока операторів ((цикл з передумовою)). Якщо цикл while
встановлює істинність висловлювання як умову виконання коду, то цикл do while
передбачає постійне виконання дії, яке переривається за умови хибності твердження.
Можливо, а в деяких випадках і бажано, щоб умова завжди виявлялась істинною, створюючи нескінченний цикл. Якщо такий цикл створюється навмисно, то використовують додаткові структури керування (наприклад, оператор break
) для керованого припинення циклу.
У різних мовах використовуються різні правила запису цього типу циклу. Наприклад, у мові програмування Pascal такий тип циклу оформлюється як repeat until
, який продовжує виконуватися доти, поки вираз не стане істинним.
Еквівалентні конструкції
Така синтаксична конструкція
do { loop_block(); } while (condition);
рівнозначна
loop_block(); while (condition) { loop_block(); }
Записаний таким чином цикл do while
забезпечує виконання блока операторів щонайменше один раз через застосування loop_block()
до початку циклу while
.
Без застосування оператора continue
можна утворити такі рівнозначні конструкції (наведені приклади не є зразками типового або сучасного стилю програмування):
while (true) { loop_block(); if (!condition) break; }
або
LOOPSTART: do_work(); if (condition) goto LOOPSTART;
Конструкція do while в мовах програмування
Наведені приклади різними мовами програмування демонструють розрахунок факторіалу числа 5 із використанням циклу do while
.
Ada
Приклад мовою програмування Ada:
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
Ранні діалекти 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 всередині циклу).
Типовий код
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#:
int counter = 5; int factorial = 1; do { factorial *= counter--; /* Multiply, then decrement. */ } while (counter > 0); System.Console.WriteLine(factorial);
C
Приклад на C:
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 Coding Standard PRE10-C
C++
Приклад на :
int counter = 5; int factorial = 1; do { factorial *= counter--; } while (counter > 0); std::cout << "factorial of 5 is "<< factorial << std::endl;
D
Приклад на D:
int counter = 5; int factorial = 1; do { factorial *= counter--; // Помножили, потім зменшили } while (counter > 0); writeln("factorial of 5 is ", factorial);
Fortran
Приклад на Fortran. Стандартний 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
Fortran 90 й пізніші діалекти також не мають цієї конструкції, але вони мають звичайний цикл while
:
program FactorialProg integer :: counter = 5 integer :: factorial = 1 factorial = factorial * counter counter = counter - 1 do while (counter > 0) ! Перевіряємо цикл до входу в цикл factorial = factorial * counter counter = counter - 1 end do print *, factorial end program FactorialProg
Java
Приклад на Java:
int counter = 5; int factorial = 1; do { factorial *= counter--; /* Множимо, потім зменшуємо */ } while (counter > 0); System.out.println("The factorial of 5 is " + factorial);
JavaScript
Приклад на JavaScript:
let counter = 5; //Оголошуємо дві змінні - лічильник та факторіал let factorial = 1; do { factorial *= counter--; //Тіло циклу } while (counter > 0); //Умова циклу console.log(factorial); //Показуємо результат
Pascal
Pascal замість конструкції do while
використовує repeat until
. Як згадувалось у вступі, таку конструкцію можна вважати еквівалентом конструкції do loop_block() while not loop_expression()
.
factorial := 1; counter := 5; repeat factorial := factorial * counter; counter := counter - 1; until counter = 0;
Python
Python також не має окремої конструкції do while
, але її можна побудувати із використанням нескінченого циклу та оператора break
:
counter = 5 factorial = 1 while True: factorial *= counter counter -= 1 if counter == 0: break print(factorial)
Див. також
Примітки
- C multi-line macro: do/while(0) vs scope block. Stack Overflow.
- do...while. MDN Web Docs.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Cikl do while ce sintaksichna konstrukciya keruvannya poslidovnistyu vikonannya operatoriv programi priznachena dlya povtorennya vikonannya shonajmenshe odnogo razu bloka operatoriv Rishennya pro povtorne vikonannya prijmayetsya v kinci bloka v zalezhnosti vid umovi logichnogo virazu Blok shema ciklu do while Konstrukciya do while skladayetsya iz simvolu viokremlennya povtoryuvanogo bloka operatoriv ta umovi jogo povtorennya Spochatku vikonuyetsya kod bloka a potim pereviryayetsya umova Yaksho umova vikonuyetsya blok operatoriv vikonuyetsya znovu Ce povtoryuyetsya doki umova ne stane hibnoyu Oskilki cikl do while pereviryaye stan pislya vikonannya bloku taka struktura keruvannya chasto nazivayetsya ciklom z pislyaumovoyu na vidminu vid ciklu while u yakomu umova pereviryayetsya pered vikonannyam bloka operatoriv cikl z peredumovoyu Yaksho cikl while vstanovlyuye istinnist vislovlyuvannya yak umovu vikonannya kodu to cikl do while peredbachaye postijne vikonannya diyi yake pererivayetsya za umovi hibnosti tverdzhennya Mozhlivo a v deyakih vipadkah i bazhano shob umova zavzhdi viyavlyalas istinnoyu stvoryuyuchi neskinchennij cikl Yaksho takij cikl stvoryuyetsya navmisno to vikoristovuyut dodatkovi strukturi keruvannya napriklad operator break dlya kerovanogo pripinennya ciklu U riznih movah vikoristovuyutsya rizni pravila zapisu cogo tipu ciklu Napriklad u movi programuvannya Pascal takij tip ciklu oformlyuyetsya yak repeat until yakij prodovzhuye vikonuvatisya doti poki viraz ne stane istinnim Ekvivalentni konstrukciyiTaka sintaksichna konstrukciya do loop block while condition rivnoznachna loop block while condition loop block Zapisanij takim chinom cikl do while zabezpechuye vikonannya bloka operatoriv shonajmenshe odin raz cherez zastosuvannya loop block do pochatku ciklu while Bez zastosuvannya operatora continue mozhna utvoriti taki rivnoznachni konstrukciyi navedeni prikladi ne ye zrazkami tipovogo abo suchasnogo stilyu programuvannya while true loop block if condition break abo LOOPSTART do work if condition goto LOOPSTART Konstrukciya do while v movah programuvannyaNavedeni prikladi riznimi movami programuvannya demonstruyut rozrahunok faktorialu chisla 5 iz vikoristannyam ciklu do while Ada Priklad movoyu programuvannya Ada 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 Ranni dialekti BASIC taki yak GW BASIC vikoristovuvali sintaksis WHILE WEND Suchasni dialekti BASIC taki yak PowerBASIC zabezpechuyut strukturi WHILE WEND ta DO LOOP iz sintaksisom DO WHILE LOOP DO UNTIL LOOP DO LOOP WHILE DO LOOP UNTIL i DO LOOP bez umovi vikonannya ciklu ale z iz vikoristannyam perevirki EXIT LOOP vseredini ciklu Tipovij kod Dim factorial As Integer Dim counter As Integer factorial 1 counter 5 Do factorial factorial counter counter counter 1 Loop While counter gt 0 Print factorial C Priklad na C int counter 5 int factorial 1 do factorial counter Multiply then decrement while counter gt 0 System Console WriteLine factorial C Priklad na C int counter 5 int factorial 1 do factorial counter Multiply then decrement while counter gt 0 printf factorial of 5 is d n factorial Operatori do while 0 takozh chasto vikoristovuyutsya v makrosah C yak sposib obernuti dekilka operatoriv na zvichajnij na vidminu vid skladenogo operator Makros povinen zakinchuvatis krapkoyu z komoyu Ce zabezpechuye bilsh shozhij na funkciyi zovnishnij viglyad i sproshuye sintaksichnij analiz ta sprijnyattya programistami a takozh usuvaye problemu viznachennya oblasti diyi operatora if Rekomenduyetsya u standarti pravil koduvannya CERT C Coding Standard PRE10 C C Priklad na C int counter 5 int factorial 1 do factorial counter while counter gt 0 std cout lt lt factorial of 5 is lt lt factorial lt lt std endl D Priklad na D int counter 5 int factorial 1 do factorial counter Pomnozhili potim zmenshili while counter gt 0 writeln factorial of 5 is factorial Fortran Priklad na Fortran Standartnij FORTRAN 77 ne maye konstrukciyi DO WHILE prote yiyi mozhna vtiliti cherez zastosuvannya 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 Fortran 90 j piznishi dialekti takozh ne mayut ciyeyi konstrukciyi ale voni mayut zvichajnij cikl while program FactorialProg integer counter 5 integer factorial 1 factorial factorial counter counter counter 1 do while counter gt 0 Pereviryayemo cikl do vhodu v cikl factorial factorial counter counter counter 1 end do print factorial end program FactorialProg Java Priklad na Java int counter 5 int factorial 1 do factorial counter Mnozhimo potim zmenshuyemo while counter gt 0 System out println The factorial of 5 is factorial JavaScript Priklad na JavaScript let counter 5 Ogoloshuyemo dvi zminni lichilnik ta faktorial let factorial 1 do factorial counter Tilo ciklu while counter gt 0 Umova ciklu console log factorial Pokazuyemo rezultat Pascal Pascal zamist konstrukciyi do while vikoristovuye repeat until Yak zgaduvalos u vstupi taku konstrukciyu mozhna vvazhati ekvivalentom konstrukciyi do loop block while not loop expression factorial 1 counter 5 repeat factorial factorial counter counter counter 1 until counter 0 Python Python takozh ne maye okremoyi konstrukciyi i do while i ale yiyi mozhna pobuduvati iz vikoristannyam neskinchenogo ciklu ta operatora break counter 5 factorial 1 while True factorial counter counter 1 if counter 0 break print factorial Div takozhNeskinchennij cikl Cikl Cikl for Cikl foreach en Potik keruvannyaPrimitkiC multi line macro do while 0 vs scope block Stack Overflow do while MDN Web Docs