4. findmax.rb
1 # findmax.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 max = -1000
5 for i in 0 .. n-1
6 if max < ar[i] then
7 max = ar[i]
8 end
9 end
10 print “最大値は #{max}です”
5. findmax.rb
1 # findmax.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 max = -1000
5 for i in 0 .. n-1
6 if max < ar[i] then
7 max = ar[i]
8 end
9 end
10 print “最大値は #{max}です”
数値が入った配列 ar を用意(2行目)
配列の要素数を変数 n に代入(3行目)
6. findmax.rb
1 # findmax.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 max = -1000
5 for i in 0 .. n-1
6 if max < ar[i] then
7 max = ar[i]
8 end
9 end
10 print “最大値は #{max}です”
仮の最大値を設定(4行目)
ここでは -1000 としている
7. findmax.rb
1 # findmax.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 max = -1000
5 for i in 0 .. n-1
6 if max < ar[i] then
7 max = ar[i]
8 end
9 end
10 print “最大値は #{max}です”
総和や平均を求めたときと同様に、forループで
配列の中の数字を一つずつ処理していく(5~9行目)
8. findmax.rb
1 # findmax.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 max = -1000
5 for i in 0 .. n-1
6 if max < ar[i] then # 現在の最大値と比較
7 max = ar[i] # 最大値の更新
8 end
9 end
10 print “最大値は #{max}です”
if 文に注目(6~8行目)
現在の最大値より大きければその値で max を更新
9. findmax.rb
1 # findmax.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 max = -1000
true
5 for i in 0 .. n-1
6 if max < ar[i] then # -1000 < 82
7 max = ar[i] # max = 82
8 end
9 end
10 print “最大値は #{max}です”
⓪ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑲
[82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
max
10. findmax.rb
1 # findmax.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 max = -1000
false
5 for i in 0 .. n-1
6 if max < ar[i] then # 82 < 24
7 max = ar[i] # 更新無し
8 end
9 end
10 print “最大値は #{max}です”
⓪ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑲
[82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
max
11. findmax.rb
1 # findmax.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 max = -1000
false
5 for i in 0 .. n-1
6 if max < ar[i] then # 82 < 12
7 max = ar[i] # 更新無し
8 end
9 end
10 print “最大値は #{max}です”
⓪ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑲
[82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
max
12. findmax.rb
1 # findmax.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 max = -1000
false
5 for i in 0 .. n-1
6 if max < ar[i] then # 82 < 27
7 max = ar[i] # 更新無し
8 end
9 end
10 print “最大値は #{max}です”
⓪ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑲
[82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
max
13. findmax.rb
1 # findmax.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 max = -1000
false
5 for i in 0 .. n-1
6 if max < ar[i] then # 82 < 18
7 max = ar[i] # 更新無し
8 end
9 end
10 print “最大値は #{max}です”
⓪ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑲
[82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
max
14. findmax.rb
1 # findmax.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 max = -1000
false
5 for i in 0 .. n-1
6 if max < ar[i] then # 82 < 78
7 max = ar[i] # 更新無し
8 end
9 end
10 print “最大値は #{max}です”
⓪ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑲
[82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
max
15. findmax.rb
1 # findmax.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 max = -1000
false
5 for i in 0 .. n-1
6 if max < ar[i] then # 82 < 19
7 max = ar[i] # 更新無し
8 end
9 end
10 print “最大値は #{max}です”
⓪ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑲
[82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
max
16. findmax.rb
1 # findmax.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 max = -1000
true!
5 for i in 0 .. n-1
6 if max < ar[i] then # 82 < 86
7 max = ar[i] # max = 86 に更新
8 end
9 end
10 print “最大値は #{max}です”
⓪ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑲
[82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
max
17. findmax.rb
1 # findmax.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 max = -1000
5 for i in 0 .. n-1
6 if max < ar[i] then # 以後、最後の数値まで
7 max = ar[i] # 同じ処理を繰り返す
8 end
9 end
10 print “最大値は #{max}です”
⓪ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑲
[82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
max
18. findmax.rb
1 # findmax.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 max = -1000
5 for i in 0 .. n-1
6 if max < ar[i] then
7 max = ar[i]
8 end
9 end
10 print “最大値は #{max}です” # max = 86
⓪ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑲
[82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
max
20. 問題5-1 解答例
1 # findmin.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 min = 1000
5 for i in 0 .. n-1
6 if min > ar[i] then
7 min = ar[i]
8 end
9 end
10 print “最小値は #{min}です”
仮の最小値を1000のような
大きな数字にすること(4行目)
24. 問題5-3 解答例
1 # findmax2.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 max = ar[0]
5 for i in 1 .. n-1
6 if max < ar[i] then
7 max = ar[i]
8 end
9 end
10 print “最大値は #{max}です”
配列の一番最初の数値を仮の最大に設定(4行目)
ループは0番目からではなく1番目から開始(5行目)
29. seqsearch.rb
1 # seqsearch.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 key = ARGV[0].to_i
5 found = false
6 for i in 0 .. n-1
7 if ar[i] == key then
8 found = true
9 ifound = i
10 break
11 end
12 end
13 if found then
14 puts “#{key} は #{ifound} 番目にありました。”
15 else
16 puts “#{key} は見つかりませんでした。”
17 end
30. seqsearch.rb
1 # seqsearch.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 key = ARGV[0].to_i ・・・・ # 探索キーをコマンドライン引数で
5 found = false 受け取り変数 key に代入
6 for i in 0 .. n-1
7 if ar[i] == key then
8 found = true
9 ifound = i
10 break
11 end
12 end
13 if found then
14 puts “#{key} は #{ifound} 番目にありました。”
15 else
16 puts “#{key} は見つかりませんでした。”
17 end
31. seqsearch.rb
1 # seqsearch.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 key = ARGV[0].to_i
5 found = false ・・・・ # 見つかったかどうかを判定するための
6 for i in 0 .. n-1 フラグ変数を用意。最初はfalse
7 if ar[i] == key then
8 found = true
9 ifound = i
10 break
11 end
12 end
13 if found then
14 puts “#{key} は #{ifound} 番目にありました。”
15 else
16 puts “#{key} は見つかりませんでした。”
17 end
32. seqsearch.rb
1 # seqsearch.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 key = ARGV[0].to_i
5 found = false
6 for i in 0 .. n-1 ・・・・・・ # 6行めから12行まで for ループ
7 if ar[i] == key then 配列の値をひとつずつ取り出して
8 found = true 逐次的に処理
9 ifound = i
10 break
11 end
12 end
13 if found then
14 puts “#{key} は #{ifound} 番目にありました。”
15 else
16 puts “#{key} は見つかりませんでした。”
17 end
33. seqsearch.rb
1 # seqsearch.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 key = ARGV[0].to_i
5 found = false
6 for i in 0 .. n-1
7 if ar[i] == key then ・・・・ # if 文で 配列の値 ar[i] と key が
8 found = true 一致するかどうかを判別
9 ifound = i
10 break
11 end
12 end
13 if found then
14 puts “#{key} は #{ifound} 番目にありました。”
15 else
16 puts “#{key} は見つかりませんでした。”
17 end
34. seqsearch.rb
1 # seqsearch.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 key = ARGV[0].to_i
5 found = false
6 for i in 0 .. n-1
7 if ar[i] == key then
8 found = true ・・・・ # もし一致すれば found を true に変更
9 ifound = I ・・・・・・ # その値の添字番号を ifound に記憶
10 break ・・・・・・・・・ # break でループを終了し13行目に移る
11 end
12 end
13 if found then
14 puts “#{key} は #{ifound} 番目にありました。”
15 else
16 puts “#{key} は見つかりませんでした。”
17 end
35. seqsearch.rb
1 # seqsearch.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 key = ARGV[0].to_i
5 found = false
6 for i in 0 .. n-1
7 if ar[i] == key then
8 found = true # 一致する値が見つかない場合は
9 ifound = I if 文は一度も実行されないので
10 break found は false のままループが終了
11 end
12 end
13 if found then
14 puts “#{key} は #{ifound} 番目にありました。”
15 else
16 puts “#{key} は見つかりませんでした。”
17 end
36. seqsearch.rb
1 # seqsearch.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 key = ARGV[0].to_i
5 found = false
6 for i in 0 .. n-1
7 if ar[i] == key then
8 found = true
9 ifound = i
10 break
11 end # 値が見つかっていればfound はtrueなので
12 end 「~は~番目にありました」と出力(14行目)
13 if found then
14 puts “#{key} は #{ifound} 番目にありました。”
15 else
16 puts “#{key} は見つかりませんでした。”
17 end
37. seqsearch.rb
1 # seqsearch.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 key = ARGV[0].to_i
5 found = false
6 for i in 0 .. n-1
7 if ar[i] == key then
8 found = true
9 ifound = i
10 break
11 end # そうでなければ else 文に入って
12 end 「~は見つかりませんでした」と出力(16行目)
13 if found then
14 puts “#{key} は #{ifound} 番目にありました。”
15 else
16 puts “#{key} は見つかりませんでした。”
17 end
38. seqsearch.rb
1 # seqsearch.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 key = ARGV[0].to_i
5 found = false
6 for i in 0 .. n-1
7 if ar[i] == key then
8 found = true
9 ifound = i
10 break # 13行目は 以下のように記述しても良いが
11 end 変数がそのものが 論理値の場合は
12 end “== true”を省略出来る
13 if found == true then
14 puts “#{key} は #{ifound} 番目にありました。”
15 else
16 puts “#{key} は見つかりませんでした。”
17 end
39. seqsearch.rb
1 # seqsearch.rb
2 ar = [82, 24, 12, 27, 18, 78, 19, 86, 45, 41, 64, ..., 26]
3 n = ar.size
4 key = ARGV[0].to_i
5 found = false
6 for i in 0 .. n-1 この例の変数 found ように
7 if ar[i] == key then 「見つかった」という状態(= true) と
8 found = true 「見つからなかった」という状態(= false)
9 ifound = i どちらかを記憶させるために使われる場合
10 break これをフラグ(flag) 変数という
11 end
12 end
13 if found then ・・・・ # 見つかった場合
14 puts “#{key} は #{ifound} 番目にありました。”
15 else ・・・・ # 見つからなかった場合
16 puts “#{key} は見つかりませんでした。
17 end