- 本日の作業内容
- 出席確認
電子メールで出席確認をします.宛先など以下の情報を用いてメールを作成し,
出席申告してください.なお,キーワードは授業中に紹介します.
提出形式
宛先 |
justice@mag.shimane-u.ac.jp |
件名 |
AttendR12-10_ruby_s0340** |
本文 |
学生番号
氏名
キーワード
|
(改行) (改行)
キーワードは授業中に紹介 |
注意 |
「件名」および「添付書類名」の**をそのままにしないで,必ず自分の学生番号
に修正して下さい.また,ABクラス別は指示にしたがって下さい.
|
- 多重 for ループ
for ループは何重にでも重ねることが出来ます.
条件分岐のときの
「入れ子」と同じ考え方ですが,繰りかえしになる分だけ見た目がややこしくな
ります.先ずは,2重になった簡単な例を見てみましょう.
for i in 1..3
printf "外側ループ %d 回目\n", i
for j in 1..2
printf " 内側ループ %d 回目\n", j
end
printf " 内側ループ終了\n"
end
printf "外側ループ終了\n"
|
フローチャートでは図1のようになります.
図1 二重の 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
|
どのような違いがあるのか,結果の方を良く見て下さい.
- インデント見本
最近複雑な処理が徐々に加わってきたために,インデント(字下げ)に対する注意
が散漫になってきているようです.もう一度きちんとした字下げを確認して下さ
い.次のスクリプトは見本です.
n = 10
count = 1
for i in 0..n-8
m = 1
l = 2
for j in 1..l
if j == 1
printf "%2d行目\n", count
else
count += 1
printf "%2d行目\n", count
end
break if j == 3
end
for k in m..l
count += 1
printf "%2d行目\n", count
end
count += 1
end
printf "これでおしまい\n"
|
- 演習
多重のループを活用して次のようなスクリプトを作成してみましょう.解答例は
後で紹介します.
次に示すような行列の要素を表示する表現形式.
A11 A12 A13
A21 A22 A23
A31 A32 A33
|
解答例
- 次に示すようなランダムなモザイク模様的なテキスト出力.これには乱数を
利用しています.乱数ですから,実行するたびに結果は異なるものとなり
ます.また,表示には文字としての"□"と"■"を用いています.この文字
は自分で好きなものに変更しても構いません.
□□□□□□■□□□■□□□■■
■□■■□■■■□■■□■□□■
■■■□■□□□■□■■■□■□
□■□□□■■□□□□□■□□□
■□□□■□□□■■■■■□□□
□□□■■■■■■■□■■□■■
□■■■□■■■■■□□□□□□
□□■■□□■□■□■□□□■□
□■□□□■□■■■■■□■□□
□□■■□□■□□□□□□□■□
□■■□□■□■□■□■□□□□
■■□■□■□□□■□□■□■■
■■■□■□□■□■□■□■■□
■□■□■■■■□■□□■□□■
□■□■□■□■■■■■■□■■
■■□■■■□■■■■□■■□■
|
解答例
- 次のように結果が表示されるスクリプト
■
■ ■
■ ■
■ ■
■ ■
■ ■
■ ■
■ ■
■ ■
■ ■
■ ■
■ ■
■ ■
■ ■
■ ■
■ ■
■
|
解答例
- 次のように結果が表示されるスクリプト
12345678910
123456789
12345678
1234567
123456
12345
1234
123
12
1
|
解答例
- 2次元直交系において,-5 ≦ x ≦ 5,-5 ≦ y ≦ 5の範囲内のxとy
が整数値を持つすべての格子点の座標を列挙するスクリプト.
解答例
- 小テスト
授業の終わりに小テストを実施します.アナウンスに注意していて下さい.
再履修クラス小テスト
- 宿題
宿題に関する案内が授業の終わりに紹介されます.注意にしたがって提出してく
ださい.
再履修クラス宿題
- 本日の用語