第 6 回 目的に応じて使ってみよう レポート課題 氏 名: 本間 紘司 学籍番号: C1101796 語学クラス: 中国語 コース(系): 社会福祉 -------------------------------------------------------------------------------- 1.筆記問題 A.alphabet=["a","b","c","d","e","f","g","h","i","j","k","l","n","m","o","p","q","r","s","t","u","v","w","x","y","z"] alphabet = [18] alphabet = [40] ・x = [ ] とは配列の意味である。 さらに alphabet = [18] とはアルファベットの数、つまりalphabeの数 25 個 の内、18個目を答えれば良い。 * ただし、 配列の数え方は 例えば、 hoge = [10, 20, 30]であれば、 10 は 0番目、 20 は1番目、 30 は2番目となるので注意が必要。 つまり、 alphabet = [18] は 0 から数えて、 s が正解となる。 alphabet = [40]はアルファベットの数25個のうち、存在しない。 この結果、 空の情報を示す、 nil が妥当。 ~結果~ alphabet = [18] = "s" alphabet = [40] = nil 参考文献: 神田先生 基礎プログラミングI 配列 http://roy/~naoya/ruby/6.html -------------------------------------------------------------------------------- 2.プログラム問題 A.i.1日のゲーム時間を入力して1週間分のゲーム時間の平均が計算されるプログ ラムを作った。 ii.作成したプログラム (def_statistic.rb) #!/usr/koeki/bin/ruby def day(time) # time は数値がしまわれる配 sum = 0.0 for average in time # for 変数 in 配列 配列に関数処理 end sum += average # time の要素数を sum で割る end sum / time.length end game = Array.new print("これからあなたが1日にしているゲームの時間の平均を計算します\n") sleep(1) print("7回入力して、1週間の平均を調べよう!\n") sleep(1) print("1時間30分といった時は 1.30 と入力して下さい *(Ctrl-d)で終了\n") sleep(1) while true STDERR.print("1日のゲーム時間は?:") line = gets if line == nil break end game << line.to_f end printf("\nあなたの1週間のゲーム時間の平均は %3.2f [時間]です \n",day(game)) iii.もとにしたプログラムからの変更点 もとにしたプログラム (def_ary_movie.rb) ・score , points などの配列名の変更 ・points << line.to_i → to_f に変更し小数点を出力できるように ・%3.1f → %3.2 で小数点第二位まで表示できるように iv.プログラムの実行結果 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ pan{c110179}% ./def_statistic.rb [~/Ruby] これからあなたが1日にしているゲームの時間の平均を計算します 7回入力して、1週間の平均を調べよう! 1時間30分といった時は 1.30 と入力して下さい *(Ctrl-d)で終了 1日のゲーム時間は?:2.20 1日のゲーム時間は?:2 1日のゲーム時間は?:3 1日のゲーム時間は?:1.50 1日のゲーム時間は?:2 1日のゲーム時間は?:1.10 1日のゲーム時間は?:0.60 1日のゲーム時間は?:^D あなたの1週間のゲーム時間の平均は 1.77 [時間]です ~確かめ算~ pan{c110179}% bc -l [~/Ruby] 2.20+2+3+1.50+2+1.10+0.60 12.40 12.40 /7 1.77142857142857142857 quit pan{c110179}% [~/Ruby] よって、このプログラムは合っている。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ v.考察 最初プログラムを実行して、 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ an{c110179}% ./def_statistic.rb [~/Ruby] これからあなたが1日にしているゲームの時間の平均を計算します 7回入力して、1週間の平均を調べよう! 1時間30分といった時は 1.3 と入力して下さい *(Ctrl-d)で終了 1日のゲーム時間は?:3 1日のゲーム時間は?:2.3 1日のゲーム時間は?:4 1日のゲーム時間は?:3 1日のゲーム時間は?:1 1日のゲーム時間は?:1.5 1日のゲーム時間は?:1.2 1日のゲーム時間は?:^D あなたの1週間のゲーム時間の平均は 2.1 [時間]です ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ とでて、1時間30分ならば 1.30 だと気づき、直して実行したところ、 1日のゲーム時間は?:2 1日のゲーム時間は?:3.10 1日のゲーム時間は?:2.20 1日のゲーム時間は?:1.50 1日のゲーム時間は?:2 1日のゲーム時間は?:3 1日のゲーム時間は?:1 1日のゲーム時間は?:^D あなたの1週間のゲーム時間の平均は 2.0 [時間]です。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ と明らかに小数点の間違いを起こしていることに気付いた。 何度も見直して、プログラムを見ていると、 printf("\nあなたの1週間のゲーム時間の平均は %3.1f [時間]です \n",day(game)) と 2.00となるところが 2.0 になる欠陥があった。 そこで、 %3.1f → %3.2f 小数点第2位まで表示させるようにした。 だがその後もプログラムを実行したが、 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1日のゲーム時間は?:1.30 1日のゲーム時間は?:2.20 1日のゲーム時間は?:3 1日のゲーム時間は?:2 1日のゲーム時間は?:1 1日のゲーム時間は?:2 1日のゲーム時間は?:1.10 1日のゲーム時間は?:^D あなたの1週間のゲーム時間の平均は 1.71 [時間]です pan{c110179}% bc -l [~/Ruby] 1.30+2.20+3+2+1+2+1.10 12.60 12.60 /7 1.80000000000000000000 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ と確かめ算とプログラムの答えが合致していなかった。 その後、また見直したら、 game << line.to_i となっていた。このせいで、整数になり、結果が小数点に 不具合が生じ失敗した。これを game << line.to_fに直したところ成功した。 ~反省点~ ・あきらかに簡単なプログラムなのに初歩的なミスが多過ぎて時間をかけすぎた。 ・整数、実数、小数点の見直しが必要 ・もっとプログラムの配列の"意味"を理解する必要がある 参考文献 西村先生 基礎プログラミングII 「なわとびの数」 http://roy/~madoka/2011/r2/06/r2_06_07_theme_06_ary.html 「映画の星づけランキング」 http://roy/~madoka/2011/r2/06/r2_06_08_theme_07_aryavg.html vi.感想 プログラム A にとにかく時間をかけすぎた… 本来なら1日でできるはずが3日かけてようやく間違いに気づいた。 プログラム B は中途半端で実行してもエラーだらけになってしまい、 もっと、 A のプログラミングを終わらせるべきだったと後悔している。 また、今回の課題で1期の 基礎プロI の内容をかなり忘れているのがうきぼりになっ た。自分で復習し直したいと思います。