IGORプログラミング:データの一括処理に至る道③:ループ①
本稿では全てIGOR pro 8.0を基準にして解説を行いますが、ここで紹介するレベルであればバージョン違いはそれほど大きな問題にならないと思います。
今回の記事はこの記事の続きになります。
ここからがプログラミングの本領発揮です
さて、前回までで基本的な変数の使いかた、また四則演算のやりかたを学びました。ここまで勉強してきた方は思っている事でしょう。
いったいこれが何の役に立つんだ!
と。
その通り。単に四則演算を行うだけならExcelでも電卓でもいいわけで、今の時代にわざわざプログラムを組むのは無意味といって差し支えありません。
ずばり、プログラミングのありがたさは、繰り返し処理にあり!
というわけで、今回から数回かけて、様々な繰り返し処理について学んでいきましょう。
回数がわかっている繰り返し処理1
今回もまずはサンプルプログラムからです。
function for_loop_1()
variable i
for(i=0; i<10; i+=1)
print i
endfor
end
こちらを実行すると次のように表示されます。
それでは解説です。まず、2行目の variable i は単にiという名前の数値型変数を定義しているだけです。
ループ処理の基本はその次の for(i=0; i<10; i+=1) という部分から5行目の endfor まで。for文の中身は次のようになっています。
for(変数の初期化;ループするかの判断条件;1ループごとの処理)
まず変数の初期化についてですが、ここにi=0と入れた場合、これまでと同じように変数iの中身が0にセットされます。
その後、そのままendforのところまで普通に関数が進行していきます。
今回のサンプルプログラムでは print i しか書いていませんので、iの中身すなわち 0 が表示されます。
ここからが重要です。
endforまでプログラムが進行すると、for文のカッコ内3つめに書いた「1ループごとの処理」が実行されます。
今回の場合、 i+=1 というのがそれに該当します。
i += 1 というのは i = i+1 と書いても同じで、「今のiに1加えたもの(右辺)を改めてiに代入」という意味の命令です。
ようするに、「iに1を足す」という意味です。
従って、endforに達した時点でiが0から1に更新されます。
なお、このように、for文の進行に伴って順次値が更新されていく変数を「カウンター変数」と呼んだりします。
私はiを使うことが多いですが、countからとってcntなどとつける人もいますし、状況によってわかりやすいものを選んでください。
さて、カウンター変数の更新後、for文のカッコ内2番目に書いた i<10 が満たされているかどうかチェックされます。
今、i=1に更新されたところですからi<10ですね。
このように、条件を満たしている場合にはfor文の先頭のところまで戻って処理が再開されます。ただし変数iの中身は1のままです。
繰り返しになりますが今回のサンプルプログラムでは print i しか書いていませんので、iの中身すなわち 1 が表示されます。
以降は同じことの繰り返しで、endforまで達するとiの中身が1増えてまた繰り返しが起こります。
結局、print i という命令がiの中身だけ1ずつ更新されながら繰り返されることになるわけです。
では、iが9のときはどうなるでしょうか?
まず通常通りprint iによって9が表示されます。その後endforでiが1増え、iの中身が10となります。
すると条件 i<10(iは10未満)を満たさなくなります。
このように、iが更新されていった結果条件を満たさなくなると繰り返し処理から抜け、プログラムは次の行へと移っていきます。
つまり、ループ終了です。今回のサンプルプログラムではループの後に何も処理を書いていませんので、そのままendに達して関数の実行が終了します。
それでは、練習問題に行ってみましょう。
準備問題
次のプログラムを実行した時、表示される数値は何か?
function calculator()
variable a=100
variable b=50
a += b
print a
end
ここでのポイントは5行目の a += bですね。ここでつまづいてしまうと次の問題が解けません。
準備問題の解答
まず先に答えですが、150が出力されます。
a += b は「a = a + b」と書いても同じで「aにbを足す」という意味です。
今回は a=100, b=50ですので、 a += b の結果aには150が代入されます。
ではこれを踏まえて次の問題に行ってみましょう。
繰り返し処理の練習問題:級数の計算
問題: forループ文を用いて、1 + 2 + 3 + ・・・ + 100 の結果を表示するプログラムを作成せよ。
ただし必要に応じ条件文に、「以下」を示す「<=」を使用してもよい。(「<」は以下ではなく未満であるのに注意)
【解答】繰り返し処理の練習問題:級数の計算
まず、正しくプログラムを作ることができた場合の答えを計算しておきましょう。
簡単な高校数学によって、
$$( \displaystyle \sum_{i=1}^{100}i ) = \frac{100\times(1+100)}{2} = 5050$$
です。
それでは、こちらを繰り返し処理によってプログラムに計算させた例がこちらです。
function sum1to100()
variable i
variable result = 0
for(i=1;i<=100;i+=1)
result += i
endfor
print result
end
実行すると、確かに5050と表示されるのがわかると思います。
ループの外であらかじめ変数resultを0に初期化しておき、あとはiを次々に足しているだけですが、きちんと計算されていることがわかるでしょう。
まとめ:回数がわかっている繰り返し
以上、今回はプログラムを組んだ時点で回数がわかっている(例題の場合なら繰り返し100回)場合の処理について学習しました。
まとめは以下になります。
・基本の書き方は、for(変数の初期化;ループするかの判断条件;1ループごとの処理) ~ endfor
・forからendforまでの間が繰り返される
・カウンター変数は処理の間順次更新されていく
・カウンター変数の更新の結果、条件を満たさなくなるとループから抜ける
それでは、また次回お会いしましょう。