- 本日の作業内容
- 出席確認
電子メールで出席確認をします.宛先など以下の情報を用いてメールを作成し,
出席申告してください.なお,キーワードは授業中に紹介します.
提出形式
宛先 |
justice@mag.shimane-u.ac.jp |
件名 |
AttendA11-28_ruby_s0540**
AttendB11-28_ruby_s0540** |
(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まで,1000まで,10000までのようにに拡張すると,もうどうしようもありません.そこ
で,同じ様なことをくり返し行うための手順がプログラミング言語には用意され
ています.
次のスクリプト
を試してみて下さい.
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"
|
このスクリプトの動作を実際に確かめてみましょう.自分でまずは頭の中で表示
結果を推測してください.そして,実際に動作させてみたときに,その通りになっ
たかどうかを確認しましょう.また,実際の動作の概略を次のページで確かめて
みましょう.
- 応用例
この授業では,最初から実は for 文を扱うことを行って来ました.最
初に示したスクリプト例をもう一度確認してみましょう.
for i in 1..20
printf "Iteration time: %d\n", i
printf "Number: %d\n\n", i+100
end
|
上の例を Number: の値が奇数のときだけ表示するように変えてみましょ
う.
for i in 1..20
printf "Iteration time: %d\n", i
if i % 2 == 1
printf "Number: %d\n\n", i+100
else
printf "\n"
end
end
|
このようにfor 文のくり返しの中に条件分岐の if 文が入っ
ているような構成も可能です.
制御構造が使われているときには,インデント(字下げ)に注意して下さい.ま
た,end のつけ忘れも気をつけないといけないポイントです.
また,代入の動作にも注意して下さい.11月14日の小テストにおいてかなりの人
が犯した間違いに,代入に伴うものとして,次のようなも
のがありました.
num = rand(10)
for i in 0..9
puts num
end
|
記号 = はプログラム言語においては代入ですので,変数 num
は乱数を発生させるものではないことに注意しましょう.乱数を発生させ
てその値を代入したものが変数 num の中身の値です.
これまで,if 文における then や,今回の for
文の do のように,「省略可能」な予約語を紹介しています.省略可
能ならば,なぜ用意されているのかと言えば,「1行で表示するときに必要」だ
からです.次の例を見てみましょう.このようなときには,上記の単語は省略で
きません.というよりも,省略すると,それぞれのメソッドや変数の関係が分か
らなくなります.
num = rand(10) - 5
printf "Obtained number: %d\n", num
if num > 0 then puts "positive" elsif num == 0 then puts "zero" else puts "negative" end
for i in 0..9 do puts rand(10) end
|
|
- 演習
- 小テスト
授業の終わりに小テストを実施します.アナウンスに注意していて下さい.
- 宿題
宿題に関する案内が授業の終わりに紹介されます.注意にしたがって提出してく
ださい.
- 本日の用語