- 本日の作業内容
- 出席確認
電子メールで出席確認をします.宛先など以下の情報を用いてメールを作成し,
出席申告してください.なお,キーワードは授業中に紹介します.
提出形式
宛先 |
justice@mag.shimane-u.ac.jp |
件名 |
AttendA11-29_ruby_s0440**
AttendB11-29_ruby_s0440** |
(Aクラス) (Bクラス) |
本文 |
学生番号
氏名
キーワード
|
(改行) (改行)
キーワードは授業中に紹介 |
注意 |
「件名」および「添付書類名」の**をそのままにしないで,必ず自分の学生番号
に修正して下さい.また,ABクラス別は指示にしたがって下さい.
|
- くり返しの必要性
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 ループの構文
今の例のスクリプトでは,変数 i について,範囲を1から20まで1ず
つ増やして処理を実行するようになっています.範囲の指定はピリオドを用いて
表現しますが,例のようにピリオド二つ (..) の場合はそのままの範
囲ですが,ピリオドを3つにすると,例えば,1...20 とすると1から
19までと一つ少ない数まで実行します.フローチャートを図2に示します.
図2 順番に数字を表示するフローチャート
ループの開始のための変数初期化やや終了の条件判断がフローチャートには入っ
ていますが,for ループの便利なところはこれらを自動で行ってくれ
るところです.初期化や条件判断は与えた範囲で勝手に規定されています.また,
ループの範囲のところで定義される i のような変数を「カウンタ」と
いうこともあります.この変数の値はループから出たときには最後の値が保持さ
れることを次のスクリプトで確認してください.
for i in 0..5
puts i
end
puts i
for i in 30..35
puts i
end
puts i
|
繰り返しを初めて学習するときには,動作を順を追って調べるようにすることも
重要です.このような練習をしておくと,実際に思ったような動作をしない場合
に,原因を特定するときに役に立ちます.次の簡単な例
を考えます.
for i in 0..5
print 5 - i, " "
end
print "\nFire!\n"
|
このスクリプトの動作を実際に確かめてみましょう.自分でまずは頭の中で表示
結果を推測してください.そして,実際に動作させてみたときに,その通りになっ
たかどうかを確認しましょう.また,実際の動作の概略を次のページで確かめて
みましょう.
- 応用例
連続する整数の和を求めるスクリプトを10月25
日に試しましたが,そのときには和の
公式を用いました.和の公式を知らなければどうやって求めれば良いのでしょう
か.くり返しを使うと,いわば,力業のような方法で計算が出来ます.
次のスクリプト
は公式を使うものに比べて非常に効率の悪い速度の遅いプログラムになっ
ていますが,数学的な知識は必要なく計算が出来ます.
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 を使ってみ
ました.いろいろな要素が登場してきますので,分からない場合には一つずつ確
認して行きましょう.
- 演習
これまでこの授業で試してきたスクリプトのいくつかは繰り返しによりスクリプ
トがかなりすっきりするものがあります.次の例を考えてみて下さい.
- 小テスト
授業の終わりに小テストを実施します.アナウンスに注意していて下さい.
- 宿題
宿題に関する案内が授業の終わりに紹介されます.注意にしたがって提出してく
ださい.
- 本日の用語