Octave のループ構文は、下記のようなものが用意されています。
for
ループwhile
ループdo ~ until
ループ
Octave には do ~ while
ループや、単純な until
ループは存在しないことに注意してください。
C++ や Java と同様に、各ループ処理の中では、continue
によるループ継続や、break
によるループ脱出を行えます。
for ループ
for x = ベクトル
...
end
とすると、ベクトル要素(あるいは行列要素)を 1 つずつ取り出しながらループ処理を行うことができます。 下記の例では、1~5 までの値を順番に足しこんでいく様子を表示しています。
for
ループは入れ子構造で記述することもできます。
下記は 2 重ループで 3x3 の行列を初期化しています。
次の例では、行列 A の各要素をループでひとつずつ取得して表示しています。
組み込み関数の size
は行列のサイズを返してくれますが、第2パラメータで 1 と 2 を指定することで、それぞれ行数、列数を返してくれるようになります。
これを利用して、正しい数だけループ処理しています。
下記のように行、列のサイズを別々の変数に取得してしまうのもアリですね。
[i_max, j_max] = size(A);
for i = 1:i_max
for j = 1:j_max
disp(A(i,j))
end
end
while ループ
while
ループでは、指定した条件を満たす限りループ処理が継続されます。
i = 0;
while (i < 10)
++i
endwhile
条件式に true
を指定すれば、無限ループを作成することができますが、その場合はループ内で何らかの条件で break
しなければいけません。
下記の例では、ユーザが 10 以上の数値を入力するまで、ユーザからの入力を求め続けます。
Octave の if
ブロックは、上記のように必ず end
で終わらなければいけないことに注意してください(end
を省略することはできません)。
do ~ until ループ
do ~ until
ループは、ある条件を満たすまでループを実行します。
条件判定はブロック内の処理を実行してから行われるため、必ず 1 回はブロック内の処理が実行されます。