Subject: 第 6 回 目的に応じて使ってみよう レポート課題 From: SAITO Haruka To: it-r2-1107-rpt@e.koeki-u.ac.jp Date: Sat, 12 Nov 2011 01:17:54 +0900 (JST) X-Mailer: Mew version 6.3 on Emacs 23.3 / Mule 6.0 (HANACHIRUSATO) 第 6 回 目的に応じて使ってみよう レポート課題 氏名:齋藤陽香 学籍番号:c1100880 語学クラス:英語6 コース:政策マネジメント 1-A. alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"] ・alphabet = [18] = s alphabet の26文字を配列で並べると、上のようになる。 alphabet = [18] は配列の18番目を示している。配列は 0 から配置されるので、 s になる。 よって、alphabet = [18] は s を示しているということがわかる。 ・alphabet = [40] = nil alphabet = [40] はアルファベットの始めから40番目を示す。アルファベットは 26文字しかないため40番目の文字は存在しない。よって、alphabet = [40] は nil となる。また、nil とはからっぽを意味する。 2-A. i.考えた設定 カロリーを入力してもらい、1食分の平均カロリーを求める。 ii.作成したプログラム (def_statistic.rb) #!/usr/koeki/bin/ruby def average(food) # 平均を求める関数。food は数値を入れる配列 sum = 0.0 # 合計。平均を求める際に除算をするので小数点にする for eat in food # food の中の eat。合計カロリーの中の1食分の摂取カロリー sum += eat # 1食分のカロリーを合計に加算 end # for A in B の end printf("%d食分入力\n", food.length - 1) # 合計何食かを表示 sum / ( food.length - 1 ) # 平均摂取カロリーを求める式 # -1 は入力終了を意味する入力分を引いて計算 # するため end # def avarage(food) の end cal = Array.new # 新しい配列 while true # 繰り返し STDERR.print("1食で摂取したカロリーの入力をして下さい: \n") # 配列への入力を求める表示 line = gets.to_i # 入力させる cal << line.to_i # 配列 if line == 0 # 条件 ( "0" が入力されたとき ) break # 繰り返し の終了 end # if の end end # while true の end printf("平均は1食 %4.1f kcalです\n", average(cal)) iii.もとにしたプログラムと変更点 授業で作成したプログラム(ary_movie.rb)をもとにして作成。 何食分入力したか表示する個所と平均を求める式に -1 を加えて正しい食事数と 正しい平均が出るようにした。 break する際の条件を 0 と入力するとした。 iv.実行結果 pan{c110088}% ./def_statistic.rb [~/Ruby] 1食で摂取したカロリーの入力をして下さい: 300 1食で摂取したカロリーの入力をして下さい: 280 1食で摂取したカロリーの入力をして下さい: 400 1食で摂取したカロリーの入力をして下さい: 0 3食分入力 平均は1食 326.7 kcalです v.考察 確かめ算( kterm で bc -l )をした。 pan{c110088}% bc -l [~/Ruby] (300+280+400)/3 326.66666666666666666666 quit 入力した食事が何食か、平均は何カロリーかが実際に入力したものと同じである。 また、プログラムでは小数は 小数点第1位まで表示させ、第2位は四捨五入する と 6 は繰り上げられ、結果が326.7となっている。 これはプログラムの実行結果と一致するため、このプログラムは正しいと言える。 vi.参考文献 ・広瀬雄二 Ruby プログラミング基礎講座 初版 株式会社技術評論社 2006年 309p ・西村まどか 基礎プログラミング II 第 2 回 「なになにといえばこれこれ」「Hash の対 を表示するには」 http://roy/~madoka/2011/r2/02/r2_02_07_theme_06_forprint.html ・共同学習者 伊藤桜子、笹川礼未、畠山貴衣 2-B. i.考えた設定 弓道をするプログラム。 ii.作成したプログラム(def_rollplaying_a.rb) #!/usr/koeki/bin/ruby $KCODE = 'e' def kyudo(yoshi) # メソッドの設定 yoshi.times do # yoshi の繰り返しを指示 print("よし!\t") # "よし!" を表示 end # do の end print("\n") # 改行 sleep(0.5) # 0.5 秒時間を空ける end # def の end def message(name) # メソッドの設定 print("\n") # 改行 print("*****************************************************\n") # 仕切り print("\n") # 改行 printf("おじいさん : %sや、5日間で弓道の名人を目指すんじゃ!\n",name) # おじいさんの話 STDERR.print("[1] ランニングする?\n") # 選択肢[1]を表示 STDERR.print("[2] 腕立て伏せする?\n") # 選択肢[2]を表示 STDERR.print("[3] 弓を引く?\n") # 選択肢[3]を表示 end # def の end print("\n") # 改行 print("ある日、あなたはおじいさんに話しかけられた。\n") # 表示 print("\n") # 改行 print("おじいさん :そこのものよ、おぬしには弓道の素質があると見た。\n") # おじいさんの話 print("\t おぬしにこの弓と矢を授けよう。\n") # 表示 print("\n") # 改行 STDERR.print("おじいさん : お主の名前はなんじゃ?") # ユーザーの名前を問う name = gets.chomp # 入力を求める if name == "" # 条件 : 名前を入力されなかったとき name = "ゆみお" # 処理 : ゆみおという名前にする end # if の end printf("\t ふむ、%s か。良い名じゃ。\n",name) # 名前を確認 power = 1 # 実力 concentration = 1 # 集中力 day = 1 # トレーニングした日付 printf("\t 「よし!」と言われるほど強くなるぞ。\n") # 説明 print("\n") while true # 繰り返しを指示 kyudo(power) # def kyudo()を引用 配列に power をいれる message(name) # def message(name) を引用 ans = gets.chomp.to_i # def message(name) で問われた質問の答の入力を求める kyudo(ans) # def kyudo() に ans で入力されたものをいれる printf("\n") # 改行 printf("<トレーニング%d日目>\n",day) # トレーニング日数を表示 power += day * ans # power に day を足し、ans をかける printf(" ★ 実力 ★ = %d\n", power) # 実力を表示 concentration += day * 2 # concentration に day を足す printf(" ★集中力★ = %d\n", concentration) # 集中力を表示 meijin = power + concentration # 総合力は実力と集中力の合計 printf(" ★総合力★ = %d\n", meijin) # 総合力を表示 if day == 5 # 条件 : トレーニング日数が5日以上のとき break # 処理 : 繰り返しをやめる end # if の end day += 1 # day に 1 を加算。 end # while true の end kyudo(meijin) # kyudo() に meijin を入れる printf("おじいさん : よくぞ練習に耐えたの。%sは%d日で", name, day) # おじいさんのコメント if meijin > 65 print("名人") # 処理 : "名人"と表示 elsif meijin >= 50 # 条件 : meijin が 30 以上のとき print("上級者") # 処理 : "上級者"と表示 else # 条件 : 上の条件以外のとき print("中級者") # 処理 : "中級者"と表示 end # if の end print("に認定じゃ!!\n") # おじいさんのコメント print("\n") # 改行 iii.もとにしたプログラムと変更点 授業で使用した def_rubiocci.rb のプログラムをもとに作成した。 変更点は break の仕方 と レベルをあげるための点数の加算の仕方である。 def メソッド の使い方は同じ方法で使用した。 iv.実行結果 (その1:中級者ver.) pan{c110088}% ./def_rollplaying_a.rb [~/Ruby] ある日、あなたはおじいさんに話しかけられた。 おじいさん :そこのものよ、おぬしには弓道の素質があると見た。 おぬしにこの弓と矢を授けよう。 おじいさん : お主の名前はなんじゃ?はたけ ふむ、はたけ か。良い名じゃ。 「よし!」と言われるほど強くなるぞ。 よし! ***************************************************** おじいさん : はたけや、5日間で弓道の名人を目指すんじゃ! [1] ランニングする? [2] 腕立て伏せする? [3] 弓を引く? 1 よし! <トレーニング1日目> ★ 実力 ★ = 2 ★集中力★ = 3 ★総合力★ = 5 よし! よし! ***************************************************** おじいさん : はたけや、5日間で弓道の名人を目指すんじゃ! [1] ランニングする? [2] 腕立て伏せする? [3] 弓を引く? 1 よし! <トレーニング2日目> ★ 実力 ★ = 4 ★集中力★ = 7 ★総合力★ = 11 よし! よし! よし! よし! ***************************************************** おじいさん : はたけや、5日間で弓道の名人を目指すんじゃ! [1] ランニングする? [2] 腕立て伏せする? [3] 弓を引く? 1 よし! <トレーニング3日目> ★ 実力 ★ = 7 ★集中力★ = 13 ★総合力★ = 20 よし! よし! よし! よし! よし! よし! よし! ***************************************************** おじいさん : はたけや、5日間で弓道の名人を目指すんじゃ! [1] ランニングする? [2] 腕立て伏せする? [3] 弓を引く? 1 よし! <トレーニング4日目> ★ 実力 ★ = 11 ★集中力★ = 21 ★総合力★ = 32 よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! ***************************************************** おじいさん : はたけや、5日間で弓道の名人を目指すんじゃ! [1] ランニングする? [2] 腕立て伏せする? [3] 弓を引く? 1 よし! <トレーニング5日目> ★ 実力 ★ = 16 ★集中力★ = 31 ★総合力★ = 47 よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! よし! よし! よし! よし! おじいさん : よくぞ練習に耐えたの。はたけは5日で中級者に認定じゃ!! (その2:上級者ver.) pan{c110088}% ./def_rollplaying_a.rb [~/Ruby] ある日、あなたはおじいさんに話しかけられた。 おじいさん :そこのものよ、おぬしには弓道の素質があると見た。 おぬしにこの弓と矢を授けよう。 おじいさん : お主の名前はなんじゃ?ぱたけ ふむ、ぱたけ か。良い名じゃ。 「よし!」と言われるほど強くなるぞ。 よし! ***************************************************** おじいさん : ぱたけや、5日間で弓道の名人を目指すんじゃ! [1] ランニングする? [2] 腕立て伏せする? [3] 弓を引く? 2 よし! よし! <トレーニング1日目> ★ 実力 ★ = 3 ★集中力★ = 3 ★総合力★ = 6 よし! よし! よし! ***************************************************** おじいさん : ぱたけや、5日間で弓道の名人を目指すんじゃ! [1] ランニングする? [2] 腕立て伏せする? [3] 弓を引く? 2 よし! よし! <トレーニング2日目> ★ 実力 ★ = 7 ★集中力★ = 7 ★総合力★ = 14 よし! よし! よし! よし! よし! よし! よし! ***************************************************** おじいさん : ぱたけや、5日間で弓道の名人を目指すんじゃ! [1] ランニングする? [2] 腕立て伏せする? [3] 弓を引く? 2 よし! よし! <トレーニング3日目> ★ 実力 ★ = 13 ★集中力★ = 13 ★総合力★ = 26 よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! ***************************************************** おじいさん : ぱたけや、5日間で弓道の名人を目指すんじゃ! [1] ランニングする? [2] 腕立て伏せする? [3] 弓を引く? 2 よし! よし! <トレーニング4日目> ★ 実力 ★ = 21 ★集中力★ = 21 ★総合力★ = 42 よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! ***************************************************** おじいさん : ぱたけや、5日間で弓道の名人を目指すんじゃ! [1] ランニングする? [2] 腕立て伏せする? [3] 弓を引く? 2 よし! よし! <トレーニング5日目> ★ 実力 ★ = 31 ★集中力★ = 31 ★総合力★ = 62 よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! おじいさん : よくぞ練習に耐えたの。ぱたけは5日で上級者に認定じゃ!! (その3:名人ver.) pan{SAITO Haruka}% ./def_rollplaying_a.rb [~/Ruby] ある日、あなたはおじいさんに話しかけられた。 おじいさん :そこのものよ、おぬしには弓道の素質があると見た。 おぬしにこの弓と矢を授けよう。 おじいさん : お主の名前はなんじゃ? ふむ、ゆみお か。良い名じゃ。 「よし!」と言われるほど強くなるぞ。 よし! ***************************************************** おじいさん : ゆみおや、5日間で弓道の名人を目指すんじゃ! [1] ランニングする? [2] 腕立て伏せする? [3] 弓を引く? 3 よし! よし! よし! <トレーニング1日目> ★ 実力 ★ = 4 ★集中力★ = 3 ★総合力★ = 7 よし! よし! よし! よし! ***************************************************** おじいさん : ゆみおや、5日間で弓道の名人を目指すんじゃ! [1] ランニングする? [2] 腕立て伏せする? [3] 弓を引く? 3 よし! よし! よし! <トレーニング2日目> ★ 実力 ★ = 10 ★集中力★ = 7 ★総合力★ = 17 よし! よし! よし! よし! よし! よし! よし! よし! よし! よし! ***************************************************** おじいさん : ゆみおや、5日間で弓道の名人を目指すんじゃ! [1] ランニングする? [2] 腕立て伏せする? [3] 弓を引く? 3 よし! よし! よし! <トレーニング3日目> ★ 実力 ★ = 19 ★集中力★ = 13 ★総合力★ = 32 よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! よし! よし! よし! よし! よし! よし! ***************************************************** おじいさん : ゆみおや、5日間で弓道の名人を目指すんじゃ! [1] ランニングする? [2] 腕立て伏せする? [3] 弓を引く? 3 よし! よし! よし! <トレーニング4日目> ★ 実力 ★ = 31 ★集中力★ = 21 ★総合力★ = 52 よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! ***************************************************** おじいさん : ゆみおや、5日間で弓道の名人を目指すんじゃ! [1] ランニングする? [2] 腕立て伏せする? [3] 弓を引く? 3 よし! よし! よし! <トレーニング5日目> ★ 実力 ★ = 46 ★集中力★ = 31 ★総合力★ = 77 よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! よし! よし! よし! よし! よし! よし! よし!よし! よし! よし! よし! よし! よし! よし! おじいさん : よくぞ練習に耐えたの。ゆみおは5日で名人に認定じゃ!! v.考察 (その1:中級者ver.) 確かめ算 □1日目 pan{c110088}% bc -l [~/Ruby] 1+1*1 2 ← 実力 1+1*2 3 ← 集中力 2+3 5 ← 総合力 quit □2日目 pan{c110088}% bc -l [~/Ruby] 2+2*1 4 ← 実力 3+2*2 7 ← 集中力 4+7 11 ← 総合力 quit □3日目 pan{c110088}% bc -l [~/Ruby] 4+3*1 7 ← 実力 7+3*2 13 ← 集中力 7+13 20 ← 総合力 quit □4日目 pan{SAITO Haruka}% bc -l [~/Ruby] 7+4*1 11 ← 実力 13+4*2 21 ← 集中力 11+21 32 ← 総合力 quit □5日目 pan{c110088}% bc -l [~/Ruby] 11+5*1 16 ← 実力 21+5*2 31 ← 集中力 16+31 47 ← 総合力 quit 実行結果と確かめ算が一致するので 中級者ver. は正しい。 (その2:上級者ver.) □1日目 pan{c110088}% bc -l [~/Ruby] 1+1*2 3 1+1*2 3 3+3 6 quit □2日目 pan{c110088}% bc -l [~/Ruby] 3+2*2 7 3+2*2 7 7+7 14 quit □3日目 pan{c110088}% bc -l [~/Ruby] 7+3*2 13 7+3*2 13 13+13 26 quit □4日目 pan{c110088}% bc -l [~/Ruby] 13+4*2 21 13+4*2 21 21+21 42 quit □5日目 pan{c110088}% bc -l [~/Ruby] 21+5*2 31 21+5*2 31 31+31 62 quit 実行結果と確かめ算が一致するので 上級者ver. は正しい (その3:名人ver.) □1日目 pan{c110088}% bc -l [~/Ruby] 1+1*3 4 1+1*2 3 4+3 7 quit □2日目 pan{c110088}% bc -l [~/Ruby] 4+2*3 10 3+2*2 7 10+7 17 quit □3日目 pan{c110088}% bc -l [~/Ruby] 10+3*3 19 7+3*2 13 19+13 32 quit □4日目 pan{c110088}% bc -l [~/Ruby] 19+4*3 31 13+4*2 21 31+21 52 quit □5日目 pan{c110088}% bc -l [~/Ruby] 31+5*3 46 21+5*2 31 46+31 77 quit 実行結果と確かめ算が一致するので 名人ver. は正しい。 ◎よって、このプログラムは正しいといえる。 また、エンディングの結果は総合力の合計によって異なる。合計が 65 より大きけれ ば名人に、50以上のときは上級者、50より小さいときは中級者となる。 vi.参考文献 ・神田直弥 2011年度授業用ページ 基礎プログラミングI (4)制御構造[1] http://roy/~naoya/ruby/4.html ・共同学習者 畠山貴衣 3.感想 人生ゲームはメソッドを使ってできるゲームである。ルーレットを回し、でた 数字の分だけマスを進める。そして、そのマスの指示を受ける。 if メソッドを使って進めることができる。 ----------------------------------- 東北公益文科大学 公益学部 公益学科 2年 齋藤陽香 c110088@f.koeki-u.ac.jp