条件付きループ文 - while


for ループを学習するときに、アクションの繰り返し回数がわかっていれば、for ループ演算子を使用してプログラムを短縮できると述べました。しかし、繰り返し回数がわからない場合はどうなるでしょうか?これはよく起こります
が。 たとえば、10 進数体系から他の数体系への数値の変換を思い出してみましょう。答えが 0 になるまで、数値 (および割り算の結果) をその数値体系の底で割る必要があります。何回シェアするかは不明です。そして、そのようなアルゴリズムを実装するプログラムは非常にたくさんあります。
これはどのように実装されていますか?
プログラミングにおけるこのような場合に備えて、条件付きのループ演算子があります。
Pascal プログラミング言語では、条件付きループ ステートメントは while という単語で始まり、次の構造になります。 <プレ> while <条件>始めてください ループ本体 終了 すでにご存知のとおり、
- 条件は式であり、その結果は (条件文のように) true または false のいずれかになります。
- ループ本体は繰り返す必要があるコマンドです
- ループ本体が 1 つの演算子のみで構成されている場合は、beginend を省略できます

オペレーターの仕組み:
1. まず、プログラムは while という単語の後の条件を評価します。条件が満たされる (true) 場合、プログラムはループ本体に含まれるステートメントを実行します。
2. for ループと同様、ループ本体にステートメントが 1 つだけ含まれている場合は、ループ本体を強調表示する単語の開始と終了を省略できます。
3. ループ本体の実行が完了したら条件チェックに戻り、再度条件チェックを行います。
4. これらのアクション (条件の確認 - ループ本体の実行) は、条件が false になるまで繰り返されます。
5. この演算子の最初の実行時に条件がすぐに満たされない場合 (false)、プログラムはループ本体を実行しません。

この演算子の動作を分析すると、ループ本体には条件に影響を与える演算子が含まれている必要があることが明らかになるはずです。
たとえば、ループは条件で使用される変数の値をインクリメントできます。

「サイレント カウント」
と呼ぶプログラムの例 私たちの代わりにプログラムが例えば10まで数えてみましょう
。 プログラムは「Start」というフレーズを出力するはずです。と [完了] をクリックすると、これらのアクションの間に計算中の数値が表示されます。
このように 
スタート
します。 1 2 3 4 5 6 7 8 9 10
仕上げ
て while ループを使用したプログラムは次のようになります。 <プレ> <コード>変数 i: 整数; 始める     writeln('開始');     i := 1;    私は 10 未満ですが、始めます         write(i, ' ');         i += 1; //条件内の変数の変更に影響を与える演算子       終わり;     writeln();     writeln('終了'); 終了。 このプログラムでは、変数 i := 1 - 原点
に値を代入します。 さらに、変数 i の値が必要な値より大きくない (つまり、以下である) 限り、
 1 - 変数 i の値を表示します 
 2 - 変数 i の値を 1 ずつ増やします。この演算子は括弧内の条件の値に影響します。変数 i はインクリメントされます。つまり、ある時点で条件 i<=10 が false になります。これは、i が 11 に等しくなったときに発生します。この場合、ループ本体は実行されなくなり、プログラムはループの後の次のステートメントを実行します。 writeln();
writeln('終了');

次の問題を解決するプログラムを書いてみましょう。

数値 (3,000,000 未満にする) を入力し、その桁数を決定する必要があります。

解決策のアイデア


数値の桁数のカウンターを開始しましょう。最初、カウンタは 0 です。数値から最後の桁を順番に切り取るだけでよく (これは、整数の 10 による除算を使用して数値を 10 倍減らすことで実行できます)、そのたびにカウンタを 0 ずつ増やす必要があります。 1.
その結果、すべての桁を切り取った後、カウンターでは数字の桁数が取得され
ます。 別の方法では、アルゴリズムは次のように定式化できます。
数値がゼロにならなくなるまで、それを 10 回減らし、カウンターを 1 増やします。 <頭> 数値 (n) カウンター <本体> プログラムは次のようになります。 <プレ> var n、カウント: 整数; 始める    読み取り (n);    カウント:= 0;     while n <>; 0で開始        カウント += 1;         n := n div 10;    終わり;     writeln('Number - ', n, ' には ', count, ' 桁' が含まれます); 終わり。 このプログラムを暗記する必要があるからです。これに基づいて、桁による数値の計算に関連する他の多くの問題が解決されます。

123 0
12 1
1 2
0 3

タスク

プログラムの入力はデータ ストリームです。ゼロで終わる整数のシーケンス (シーケンスにはゼロは含まれません)。 このシーケンスの要素の合計を見つける必要があります。
 
解決アルゴリズム
<プレ> 合計=0 input x // 最初の数字を入力します while x != 0 // 入力終了符号が条件に設定されます。  nc // つまり、ゼロを入力するまで    sum = sum + x // 元の数値で何かを行うことができます。 // 条件などの数値チェックを追加できます。    input x // 次の数字を入力します kts print sum //結果の出力