whileループを実行する


Do_while_loop

ほとんどのコンピュータープログラミング言語では、do whileループは、コードのブロックを少なくとも1回実行し、ブロックの最後の特定のブール条件に応じて、ブロックを繰り返し実行するか、実行を停止する制御フロー ステートメントです。 。
DoWhileループのフロー図
do while構文は、プロセスシンボルと条件で構成されます。まず、ブロック内のコードが実行され、次に条件が評価されます。条件がtrueの場合、ブロック内のコードが再度実行されます。これは、条件がfalseになるまで繰り返されます。do whileループはブロックの実行後に条件をチェックするため、制御構造は多くの場合、テスト後ループとも呼ばれます。whileループと対比、ブロック内のコードが実行される前に条件をテストします。do-whileループはexit-conditionループです。これは、コードを常に最初に実行してから、式またはテスト条件を評価する必要があることを意味します。trueの場合、コードはループの本体を再度実行します。式がtrueと評価される限り、このプロセスが繰り返されます。式がfalseの場合、ループは終了し、制御はdo-whileループに続くステートメントに移ります。言い換えると、whileループは、ステートメントの真理をコード実行の先行条件として設定しますが、do-whileループは、条件の偽り、つまり偽り(つまり、条件の否定)は、後続の条件として設定されます。
条件が常にtrueと評価され、無限ループが作成される可能性があり、場合によっては望ましいこともこのようなループが意図的に作成された場合、通常、ループの終了を可能にする別の制御構造(breakステートメントなど)が
一部の言語では、このタイプのループに異なる命名規則を使用する場合がたとえば、Pascal言語とLua言語には、「repeat until」ループがあり、制御式が真になるまで実行され続けます(その後、終了します)。一方、「while」ループは、制御式が真である間実行されます(そして、式はfalseになります)。

コンテンツ
1 同等の構成
2 dowhileループのデモンストレーション
2.1 ActionScript 3 2.2 エイダ 2.3 ベーシック 2.4 C# 2.5 C 2.62.6 C ++ 2.7 CFScript 2.8 D 2.9 Fortran 2.10 Java 2.11 JavaScript 2.12 Kotlin 2.13 パスカル 2.14 PHP 2.15 PL / I 2.16 Python 2.17 ラケット 2.18 ルビー 2.19 Smalltalk 2.20 迅速 2.21 Visual Basic .NET
3 も参照してください
4 参考文献
5 外部リンク

同等の構成
行う{ do_work (); } while (条件);
と同等です
do_work ();while (条件){
do_work ();}
このようにして、do … whileループは、ループdo_work();の前の行で最初の「ループプライミング」を保存しwhileます。
継続ステートメントが使用されていない限り、上記は技術的に次と同等です(ただし、これらの例は、日常のコンピューターで使用される典型的または最新のスタイルではありません)。
while (true ){ do_work (); if (!condition )break ; }
また
ループスタート: do_work (); if (条件)goto LOOPSTART ;

dowhileループのデモンストレーション
このセクションの
Do whileloop これらのサンプルプログラムは、do-whileループのそれぞれの言語の構文を使用して5の階乗を計算します。

ActionScript 3
var counter : int = 5 ; var factorial : int = 1 ;do { 階乗 * = カウンター-; / *乗算してから、デクリメントします。* / } while (counter > 0 );トレース(階乗);

エイダ
ウィキブックスのAda_Programmingには、次のトピックに関するページが制御
Ada.Integer_Text_IOを使用;手続き 階乗 は カウンター です: 整数 := 5 ; 階乗 : 整数 := 1 ; ループの開始 階乗:=階乗*カウンター; カウンター:=カウンター-1 ; Counter = 0のときに終了します; ループの終了;
エイダ。Integer_Text_IO 。置く (階乗); 階乗を終了し ます;

ベーシック
初期のBASIC(GW-BASICなど)は、構文WHILE / WENDを使用していました。PowerBASICなどの最新のBASICは、WHILE / WEND構造とDO / LOOP構造の両方を提供し、DO WHILE / LOOP、DO UNTIL / LOOP、DO / LOOP WHILE、DO / LOOP UNTIL、DO / LOOPなどの構文を備えています(外部テストはありませんが、ループ内のどこかに条件付きEXITLOOPがあります)。典型的なBASICソースコード:
Dim factorial As Integer Dim counter As Integer階乗 = 1カウンター = 5階乗 =階乗 *カウンターカウンター=カウンター-1ループWhileカウンター> 0 _ _
階乗を印刷

C#
int カウンター = 5 ; int 階乗 = 1 ;do { 階乗 * = カウンター-; / *乗算してから、デクリメントします。* / } while (counter > 0 );システム。コンソール。WriteLine (階乗);

C
intカウンター= 5 ; int階乗= 1 ; 行う{ 階乗* =カウンター- ; / *乗算してから、デクリメントします。* / } while (counter > 0 ); printf (”5の階乗は%d n ” 、factorial );
Do-while(0)ステートメントは、複数のステートメントを通常の(複合ではなく)ステートメントにラップする方法として、Cマクロでも一般的に使用されます。これにより、マクロの後にセミコロンが必要になり、単純なパーサーやプログラマーに関数のような外観を提供するだけでなく、のスコープの問題を回避できますif。CERTCコーディング標準ルールPRE10-Cで推奨されています。

C ++
intカウンター= 5 ; int階乗= 1 ; 行う{ 階乗* =カウンター- ; } while (counter > 0 ); std :: cout << "階乗5は" <<階乗<< std :: endl ;

CFScript
階乗 = 1 ; カウント = 10 ;do { 階乗 * = カウント- ; } while (count > 1 );writeOutput (階乗);

D
int カウンター = 5 ; int 階乗 = 1 ;do { 階乗 * = カウンター-; //乗算してから、デクリメントします。} while (counter > 0 );writeln (”5の階乗は” 、 階乗);

Fortran
従来のFORTRAN77には、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以降にもdo-while構文はありませんが、キーワード「do while」を使用するwhileループ構文があるため、実際にはforループと同じです。
プログラムFactorialProg 整数 :: カウンター = 5 整数 :: 階乗 = 1
階乗 = 階乗 * カウンター カウンター = カウンター -1 _
while (counter > 0 ) !真理値は、ループの前にテストされます
階乗= 階乗 * カウンター カウンター= カウンター -1 end do print * 、階乗終了プログラムFactorialProg

Java
int カウンター = 5 ; int 階乗 = 1 ;do { 階乗 * = カウンター- ; / *乗算してから、デクリメントします。* / } while (counter > 0 );システム。アウト。println (”5の階乗は” + 階乗);// ============================================ // //以下の関数は上記と同じように機能します。// // ============================================ //int カウンター = 5 ; int 階乗 = 1 ;while (counter > 0 ){ factorial * = counter- ; / *乗算してから、デクリメントします。* / } システム。アウト。println (”5の階乗は” + 階乗);

JavaScript
カウンター = 5 ; _ // 2つの変数を宣言します。counterとfactoriallet factorial = 1 ;
do { 階乗 * = カウンター- ; //ループされるもの} while (counter > 0 ); //ループ条件コンソール。対数(階乗); //結果を表示する

Kotlin
var counter = 5 var factorial = 1 //これらのコード行は上記のJavaScriptコードとほぼ同じですが、唯一の違いは、結果がdo { factorial * = counter- } while(counter > 0 )であることを示すキーワードです。 println (”5の階乗は$階乗です” )

パスカル
Pascalにはdo / whileがありません。代わりに、repeat / untilがはじめに述べたように、repeat / untilは「式ではなくコードを実行する」構造と同等であると見なすことができます。
階乗 := 1 ; カウンター := 5 ; 階乗を繰り返す :=階乗*カウンター; カウンター:=カウンター-1 ; // Object Pascalでは、dec(counter);を使用できます。カウンター= 0まで;

PHP
$ counter = 5 ; $ factorial = 1 ;do { $ factorial * = $ counter- ; } while ($ counter > 0 ); エコー $階乗;

PL / I
PL / I DOステートメントには、テスト後のループ(do until)、テスト前のループ(do while)、およびforループの機能が含まれています。すべての関数を1つのステートメントに含めることができます。この例は、「dountil」構文のみを示しています。
カウンター固定initial(5);を宣言します。階乗固定イニシャル(1);を宣言します。until(counter <= 0);を実行します。 階乗=階乗*カウンター; カウンター=カウンター-1;終わり;put(階乗);

Python
Pythonには、特定のdowhileフロー制御構造がありません。ただし、同等のものは、ブレーク付きのwhileループから構築できます。
カウンター = 5階乗 = 1True の場合: 階乗 * = カウンター カウンター -= 1
カウンター == 0の場合:
ブレーク 印刷(階乗)

ラケット
Racketでは、他のScheme実装と同様に、「named-let」がループを実装するための一般的な方法です。
#langラケット(define counter 5 )(define factorial 1 )(let loop () (set! factorial (* factorial counter )) (set! counter (sub1 counter )) (when (> counter 0 ) (loop )))(displayln factorial )
これを、 Racketのwhileループの例の最初の例と比較して名前付きletも引数を取ることができることに注意して
RacketとSchemeは、適切なdoループも提供します。(define (factorial n ) (do ((counter n ( -counter 1 ))(result 1 (* result counter )))((= counter 0 )result );停止条件と戻り値。; do-の本体ループは空です。))

ルビー
カウンター = 10階乗 = 2 階乗 を開始* = カウンター カウンター -= 2カウンター> 1の間に終了 階乗を置く

Smalltalk
| カウンター階乗| カウンター := 5 。階乗 := 1 。[ counter > 0 ] whileTrue:
[ factorial := factorial * counter 。 カウンター := カウンター -1 ]。トランスクリプト ショー: 階乗 printString

迅速
Swift 2.x以降:
var counter = 5 var factorial = 1 カウンター> 0の間に{ 階乗 * = カウンター カウンター -= 1 }を 繰り返します 印刷(階乗)
Swift 1.x:
var counter = 5 var factorial = 1do { factorial * = counter counter- = 1 } while counter > 0println (階乗)

Visual Basic .NET
Dim counter As Integer = 5 Dim factorial As Integer = 1階乗を 実行 * = カウンター カウンター -= 1 ループ While カウンター > 0コンソール。WriteLine (階乗)

も参照してください
制御フロー
Forループ Foreach ループを繰り返す
whileループ

参考文献
^ 「C複数行マクロ:do / while(0)vsスコープブロック」。スタックオーバーフロー。
^ 「Microsoftビジュアルベーシック」。msdn.microsoft.com 。
^ “do … while”。MDN WebDocs。
^ 「制御フロー:if、when、for、while-Kotlinプログラミング言語」。Kotlin。
^ 「制御フロー— Swiftプログラミング言語(Swift 5.3)」。docs.swift.org。

外部リンク
Cマクロで{…} while(0)を実行します