目次に戻る | 前のページへ | 次のページへ |
1から20までの数字を画面に順に表示しなさい,というような命令が下されたらどうし ましょうか.単純に考えて, 次のようなこと はもちろん出来るでしょう.
puts 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 |
しかし,これを100までの数に拡張すると,もうどうしようもありません.そこ で,同じ様なことをくり返し行うための手順がプログラミング言語には用意され ています. 次のスクリプト を試してみて下さい.
n = 20 for i in 1..n puts i end |
このようなくり返しは for ループと呼ばれるものです.開始と終了の 条件を与えて,その回数分だけくり返すものです.
for ループの基本的な使い方は図1のようになります.
図1 for ループの構文
図2 順番に数字を表示するフローチャート
連続する整数の和を求めるスクリプトを最初に試しましたが,そのときには和の 公式を用いました.和の公式を知らなければどうやって求めれば良いのでしょう か.くり返しを使うと,いわば,力業のような方法で計算が出来ます. 次のスクリプト は公式を使うものに比べて非常に効率の悪い速度の遅いプログラムになっ ていますが,数学的な知識は必要なく計算が出来ます.
n = 100 sum = 0 for i in 1..n sum += i end puts sum |
ポイントは自己代入です.1から100まで順番にその数を最初は値が0である 変数 sum にひたすら足して行きます.変数 n の値をものす ごく大きく取ると,大変に時間のかかる「悪い」スクリプトですが単純ですね. この応用として, 奇数だけの和や偶数だけの和 もさらに効率の悪い方法で計算できます.
n = 100 odd = 0 even = 0 for i in 1..n if i % 2 == 0 even += i else odd += i end end printf "奇数の和は %d 偶数の和は %d\n", odd, even |
このようにfor 文のくり返しの中に条件分岐の if 文が入っ ているような構成も可能です.ここでは,出力に printf を使ってみ ました.いろいろな要素が登場してきますので,分からない場合には一つずつ確 認して行きましょう.
for ループは何重にでも重ねることが出来ます. 次の例 は3重にループが回るスクリプトです.
for i in 1..3 for j in 1..4 for k in 1..5 printf "i = %d, j = %d, k = %d\n", i, j, k end end end |
ループはトータルで60回回りますが,どのような順番でループが回っているかは 結果の方を良く見て下さい.kに関する一番内側のループが全部終わったらjの値 が一つ増えて行き,jが全部終わったらiが増えてまた順に実行して行くようになっ ているのが分かるかと思います.このようなループの回り方を理解しておくこと が大事です.
先ほどの例をほんの少し改良してみましょう. 次のスクリプト ではどうなるでしょうか
for i in 1..3 for j in i..4 for k in j..5 printf "i = %d, j = %d, k = %d\n", i, j, k end end end |
どのような違いがあるのか,結果の方を良く見て下さい.
目次に戻る | 前のページへ | 次のページへ |