更新:2024/11/08
【Octave】ループ処理・for・while・continue・練習問題について


はるか
ループ処理は、コードを簡潔にまとめるために便利。無駄な繰り返しを避けられる。

ふゅか
そうね、例えば `for` ループを使えば、指定した回数だけ繰り返すことができるわ!Octaveではどう書くのか見ていきましょう!
目次
1. ループ処理の使い方
Octaveでのループ処理は、for
ループや while
ループを使用して実行できます。以下にそれぞれの例を示します。
1.1. forループ

ふゅか
たとえば、Octaveで5回繰り返すには、「for i = 1:5」みたいな感じになるよ。
for
ループを使用すると、指定された回数だけループ処理を繰り返すことができます。
% forループの例
for i = 1:5
disp(['This is iteration number ', num2str(i)]);
end
このスクリプトは、i
が 1 から 5 までの値を取るごとに、ループの中の処理を実行します。disp
関数を使って現在のイテレーション番号を表示しています。
1.2. whileループの例
while
ループは、条件が真である限り、ループ処理を繰り返します。
% whileループの例
i = 2;
while i <= 10
disp(['This is iteration number ', num2str(i)]);
i = i*i;
end
このスクリプトでは、変数 i
が 10 以下である限り、ループが繰り返されます。例ではiの二乗が10以下である限り、ループ処理が行われます。

はるか
条件に応じて繰り返しを制御するなら、`while` ループが適している。
1.3. breakとcontinueの使用例

はるか
処理の途中でループを抜けたい時や、特定の条件で次のループに進みたいときは?

ふゅか
その場合は、`break` や `continue` を使うのが便利だね![/code block]
break
と continue
を使って、ループの中断や次のイテレーションへのスキップを行うことができます。
% break と continue の例
for i = 1:10
if i == 6
break; % iが6になったらループを終了
elseif mod(i, 2) == 0
continue; % iが偶数の場合、残りの処理をスキップして次のイテレーションへ
end
disp(['Odd iteration number: ', num2str(i)]);
end
この例では、i
が偶数のときに continue
によって残りの処理がスキップされ、i
が6になった時点で break
によってループが終了します。
2. 練習問題
2.1. フィボナッチ数列を計算する
Octaveで$a_{20}$までのフィボナッチ数列を計算しなさい。フィボナッチ数列の漸化式は次のようになっているとする。
$$a_{n+1} = a_n + a_{n-1}$$
$$a_1=0,a_2=1$$
n = 20;
a = zeros(1, n); % サイズnの0で初期化された配列を作成
a(1) = 0; % 初期条件 a_1 = 0
a(2) = 1; % 初期条件 a_2 = 1
for i = 3:n
a(i) = a(i-1) + a(i-2); % 漸化式を適用
end
disp(a) % 結果を表示
このコードは、最初にサイズ20の0で初期化された配列を作成し、初期条件を設定します。次に、漸化式に基づいて配列の各要素を計算し、最終的に結果を表示します。
2.2. 数列の最大公約数 (GCD) を求める
Octaveで60, 90, 120の最大公約数を求めよ。
numbers = [60, 90, 120];
gcd_value = numbers(1);
for i = 2:length(numbers)
gcd_value = gcd(gcd_value, numbers(i));
end
disp(['数列の最大公約数は: ', num2str(gcd_value)]);
このコードは、まず最初の数を基準として設定し、次に他の数と順番に最大公約数を計算します。最終的な最大公約数を表示することで、60, 90, 120の3つの数に共通する最大の正の整数を得ることができます。