第 6 回 目的に応じて使ってみよう レポート課題 吉住 貴則 C1101980 英語 2 地域共創コース 1A、筆記問題 1)<考え方・方法> 私は、とりあえずプログラムを作ってみた。 そこから、理由を考えてみたい。 2)<プログラム・説明> #!/usr/koeki/bin/ruby alphabet = ["a","b","c","d","e","f","g","h","i", [0] [1] [2] [3] [4] [5] [6] [7] [8] "j","k","l","m","n","o","p","q","r","s","t","u", [9] [10][11][12][13][14][15][16][17][18][19][20] "v","w","x","y","z"] [21][22][23][24][25] # アルファベットを配列の中に入れてみた。 すると、アルファベットは a から始まるので、 a が配列の中の要素の0番目になる。 次の b が1番目、、、とつづく。 つづきは上記に掲載する。 # 問題にあった alphabet[18],alphabet[40]だが、 上記の順番をもとにみると[18]には、s がある。 ということで、 alphabet[18] = s となる。 しかし、アルファベットの配列を見ると、 「z」の[25]で要素が終わっている。 ということで、[40]番目は存在しなかったので alphabet[40] = (空)nil となる。 printf("[18]:%s\n",alphabet[18]) printf("[40]%s\n",alphabet[40]) 3)考察 一応、このプログラムを実行してみた。 pan{c110198}% ./alphabet.rb [~/Ruby] [18]:s [40]: という結果になり、[18]のところには s とアルファベットが 表示されたが、[40]のところにはなにも表示されなかった。 結果 alphabet[18] = s alphabet[40] = (空)nil となった。 2A、 1) 設定 私の母が、居酒屋を経営しているので、 売り上げ帳を作ってみたいと思う。 厳密な金額にするので、業績が怖いが… 2) 作成したプログラム #!/usr/koeki/bin/ruby # RUBY のお約束 def heikin(cash) # 関数: heikin(平均) # 仮引数: cash(現金) sum = 0.0 # 割り算を用いるため、小数点を指定した。 # sum: 合計 、変数 for sale in cash # forは、横の変数にinより右の変数を # 代入しながらその下に書かれた処理を繰り返す。 # sale: 売り上げ printf("日計 %d 円\n",sale) # %d: 10進整数の文字列にする # sale の中身を %dで表示する sum += sale # sale の中身を sum の中に足していく end # for 〜 in のための end printf("%d人分入力\n", cash.length) # length: 配列変数.lengthでその配列に代入されている値の # 数を返してくれるメソッド。 printf("合計 %d 円\n",sum) # %d: 10進整数の文字列にする # sum の中身を %dで表示する sum / cash.length # sum(合計)を cash で割ることで平均を求める end # def のための end en = [ ] # 新しい変数を用いて配列にする # en: 円 while true # 繰り返しをするメソッド STDERR.print("売り上げ金額を入力(終了はctrl+d):\n") # STDERR.print: 入力されたものをディスプレイで表示するメソッド money = gets # money(: 金)変数を取って来る if money == nil # もしmoneyが空で割る数が増えてしまうと危ないので break # while から抜け出す end # if のための end en << money.to_i # 配列に money を整数に変換して追加 end # while のための end printf("平均は %5.1f円 です\n", heikin(en)) # %5.1f: 5は全体の桁数、1は小数点以下1位までという意味 3) もとにしたプログラム 授業中につくった ary_movie.rb を使用しました。 本当は、偏差や分散を書こうと思ったのですが、 偏差や分散を習っていなかったため、わからなく 書けませんでした。 そのかわり、全体の合計を表示するようにして、 平均の求め方をわかりやすくしました。 あと、配列の表し方を Array.new から 使い慣れてる [ ] へと直しました。 4) 実行結果 <1> pan{YOSHIZUMI Takanori}% ./def_statistic.rb [~/Ruby] 売り上げ金額を入力(終了はctrl+d): 5600 売り上げ金額を入力(終了はctrl+d): 4400 売り上げ金額を入力(終了はctrl+d): 4000 売り上げ金額を入力(終了はctrl+d): 6000 売り上げ金額を入力(終了はctrl+d): 8000 売り上げ金額を入力(終了はctrl+d): 1200 売り上げ金額を入力(終了はctrl+d): 3200 売り上げ金額を入力(終了はctrl+d): 日計 5600 円 日計 4400 円 日計 4000 円 日計 6000 円 日計 8000 円 日計 1200 円 日計 3200 円 7人分入力 合計 32400 円 平均は 4628.6円 です <2> pan{c110198}% ./def_statistic.rb [~/Ruby] 売り上げ金額を入力(終了はctrl+d): 30000 売り上げ金額を入力(終了はctrl+d): 20000 売り上げ金額を入力(終了はctrl+d): 40000 売り上げ金額を入力(終了はctrl+d): 48000 売り上げ金額を入力(終了はctrl+d): 60000 売り上げ金額を入力(終了はctrl+d): 12000 売り上げ金額を入力(終了はctrl+d): 日計 30000 円 日計 20000 円 日計 40000 円 日計 48000 円 日計 60000 円 日計 12000 円 6人分入力 合計 210000 円 平均は 35000.0円 です 5) 考察 bc -l で確かめ算をしてみました。 <1> pan{c110198}% bc -l [~/Ruby] 5600+4400+4000+6000+8000+1200+3200 32400 # 全体合計 32400/7 # 平均 計算 4628.57142857142857142857 # 平均 (四捨五入前) 4628.57 は 四捨五入すると 4628.6 になるので この計算機能は正しい。 <2> pan{c110198}% bc -l [~/Ruby] 30000+20000+40000+48000+60000+12000 210000 # 全体合計 210000/6 # 平均 計算 35000.00000000000000000000 # 平均 35000.0 は プログラムと答えが同じなので この計算機能は正しい。 <1>、<2> の結果が正しいので このプログラムは正常と言える。 2B、 1) 考え方 私のおじいちゃんが、私が小さいときに 亡くなってしまっておじいちゃんのむくもりが わからないので、おじいちゃんを題材に致しました。 2) 作成したプログラム #!/usr/koeki/bin/ruby # ruby のお約束 def grandfather(gf) # 関数: grandfather(おじいちゃん) # 仮引数: gf(grandfatherの略) gf.times do # 仮引数.times do: do 以下のものを繰り返す print("ゴホッ!!\n") end # do のための end print("\n") sleep(0.5) # 間隔をあけるメソッド ()内に杪数を入れる end # def のための end def yuigon(yu) # 関数: yuigon (遺言) # 仮引数: yu (yuigon の略) # STDERR.print: 入力された文字をディスプレイで表示 STDERR.printf("%sを是非、お世話して差し上げましょう!: \n", yu) STDERR.print("[1]\tトイレにお連れする?\n") STDERR.print("[2]\tお風呂にお入れする?\n") STDERR.print("[3]\t食事に致しますか?\n") print"ご返答 :" end # def のための end def omosa(hiniti,osewa) # 関数: omosa(体重) # 仮引数: day(日) # osewa(お世話) x = 2 * hiniti - osewa # 体重増加分の計算 # x = 2 (2倍) * hiniti(日) - osewa(お世話) printf("%d日目\n",hiniti) printf("体重増加分 %d\n", x) x end # def のための end printf("とあるところでおじい様をいただいた!!\n") STDERR.printf("どんな名前にするの?\n") name = gets.chomp # 入力されたものを文字列に変換 if name == "" # もし名前が空白だったとき name = "遺野言左衛門" # 遺野言左衛門という名前にして end # if のための end printf("%sという名前になった。\n",name) happy = 1 # しあわせ度 weight = 38 # 体重 day = 1 # 育てた日付 printf("よく咳こみます! 気を付けて!\n") print("なんだ!!貴様!!<怒>\n") while true grandfather(happy) # 関数 grandfather に happy を代入 yuigon(name) # 関数 yuigon に name を代入 answer = gets.to_i # 入力されたものを整数に変換 happy += day * answer # しあわせ度 に 日と答えをかけて # 足していく printf("しあわせ度 = %d\n", happy) weight += omosa(day,answer) # 体重 に 関数を omosa として # 日と答えを代入して足していく printf("体重 = %d kg \n", weight) if happy > 6 # もししあわせ度が 6 以上のとき break # 終わりなさい end # if のための end if weight > 70 # もし体重が 70kg 以上のとき break # 終わりなさい end # if のための end grandfather(answer) # 関数を grandfather にして answer を代入 day += 1 # 日にちを1つずつ増やしなさい end # while のための end grandfather(weight) # 最終段階の体重が鳴き声になる printf("%sは", name) if weight > 45 # もし体重が 45kg 以上のとき print("ますます元気で120歳!!!") elsif weight <= 40 # もし体重が 40 kg 以下のとき print("栄養失調で、急な旅立ちとなりました……") else # その他 print("生き霊となって貴方を襲い続けるでしょう!!!") end print("\nおじいちゃーん!!!!!!!!!!!!!! \n") 3) もとにしたプログラム def_rubiocci.rb を もとにして作りました。 今回は、作ったというよりも変数を自分なりに 替えてみただけになってしまいました。 それでも、プログラムの作り方が、 わからなかった分、説明を加える毎に、 プログラムの内容が理解できたので 良かったと思います。 4) 実行結果 <1> pan{c110198}% ./def_rollplaying_a.rb [~/Ruby] とあるところでおじい様をいただいた!! どんな名前にするの? ともぞう ともぞうという名前になった。 よく咳こみます! 気を付けて! なんだ!!貴様!!<怒> ゴホッ!! ともぞうを是非、お世話して差し上げましょう!: [1] トイレにお連れする? [2] お風呂にお入れする? [3] 食事に致しますか? ご返答 :1 しあわせ度 = 2 1日目 体重増加分 1 体重 = 39 kg ゴホッ!! ゴホッ!! ゴホッ!! ともぞうを是非、お世話して差し上げましょう!: [1] トイレにお連れする? [2] お風呂にお入れする? [3] 食事に致しますか? ご返答 :2 しあわせ度 = 6 2日目 体重増加分 2 体重 = 41 kg ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ともぞうを是非、お世話して差し上げましょう!: [1] トイレにお連れする? [2] お風呂にお入れする? [3] 食事に致しますか? ご返答 :2 しあわせ度 = 12 3日目 体重増加分 4 体重 = 45 kg ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ともぞうは生き霊となって貴方を襲い続けるでしょう!!! おじいちゃーん!!!!!!!!!!!!!! <2> pan{c110198}% ./def_rollplaying_a.rb [~/Ruby] とあるところでおじい様をいただいた!! どんな名前にするの? ともぞう ともぞうという名前になった。 よく咳こみます! 気を付けて! なんだ!!貴様!!<怒> ゴホッ!! ともぞうを是非、お世話して差し上げましょう!: [1] トイレにお連れする? [2] お風呂にお入れする? [3] 食事に致しますか? ご返答 :3 しあわせ度 = 4 1日目 体重増加分 -1 体重 = 37 kg ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ともぞうを是非、お世話して差し上げましょう!: [1] トイレにお連れする? [2] お風呂にお入れする? [3] 食事に致しますか? ご返答 :3 しあわせ度 = 10 2日目 体重増加分 1 体重 = 38 kg ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ともぞうは栄養失調で、急な旅立ちとなりました…… おじいちゃーん!!!!!!!!!!!!!! <3> pan{c110198}% ./def_rollplaying_a.rb [~/Ruby] とあるところでおじい様をいただいた!! どんな名前にするの? ともぞう ともぞうという名前になった。 よく咳こみます! 気を付けて! なんだ!!貴様!!<怒> ゴホッ!! ともぞうを是非、お世話して差し上げましょう!: [1] トイレにお連れする? [2] お風呂にお入れする? [3] 食事に致しますか? ご返答 :1 しあわせ度 = 2 1日目 体重増加分 1 体重 = 39 kg ゴホッ!! ゴホッ!! ゴホッ!! ともぞうを是非、お世話して差し上げましょう!: [1] トイレにお連れする? [2] お風呂にお入れする? [3] 食事に致しますか? ご返答 :1 しあわせ度 = 4 2日目 体重増加分 3 体重 = 42 kg ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ともぞうを是非、お世話して差し上げましょう!: [1] トイレにお連れする? [2] お風呂にお入れする? [3] 食事に致しますか? ご返答 :1 しあわせ度 = 7 3日目 体重増加分 5 体重 = 47 kg ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ゴホッ!! ともぞうはますます元気で120歳!!! おじいちゃーん!!!!!!!!!!!!!! 5) 考察 bc -l を用いて体重を計算してみる。 式 ・ 最初の体重 + 前回の掛け数 * 返答 今回は、<1>を例題に計算してみる。 <1> 返答 (1、2、2) 体重 45 kg pan{c110198}% bc -l 38+1*1 39 39+2*1 41 41+2*2 45 45kg という 答えが 同じになったので正解だ。 独断と偏見で選んだ <1> が正解で これにより、プログラムは正常だといえる。 3、感想 1日ずつの体重と、食べた量と、体の代謝率を計ったら プログラムができるように思います。 今回、るびおっちゲームのところに計算が 出てきて正直あせりました。 何回も失敗を繰り返して「自分は一体何をやっているんだ このばかちんが」なんて言葉が浮かんできました。 これからも課題を失敗しながら未来につなげて行きたいです。 4、参考文献 WEBサイト :西村まどか 先生 ホームページ 2011 年度 基礎プログラミング II 講義ノート(シラバス) 第 6 回 目的に応じて使ってみよう (http://roy/~madoka/2011/r2/06/) ノート類 :自分のノートやプログラムのコメント覧 5、添付