第4回 基礎プログラミング II レポート課題 氏名: xxxxxxxx 学籍番号: C109xxx 語学クラス: 英語 1 コース(系): 環境サイエンス 1 A パソコンとかけて、足の悪い老人と解く その心は どちらも立ち上がるのが遅いでしょう。 B 時給と時間を調べ何円貰えるのか計算する。 時給 630 円時間は 3 時間 f(x,y) = x * y f(630,3) = 630 * 3 = 1890 ガソリンの値段と入れた量を調べ何円かかるか計算する。 値段 130 円入れた量 20 l f(x,y) = x * y f(130,20) = 130 * 20 = 2600 2 A 1.考えた設定 バイトで働いた時間と時給を入力すると貰える金額が表示されるプログラムを 考えた 2.作成したプログラム #!/usr/koeki/bin/ruby def kyuuryou(j,t) # メソットの定義 j * t end # def に対する end STDERR.print("時給何円ですか?: ") # 標準出力で相手の画面に出力する a = gets.to_i # a の中に入力された文字列を整数に直し代入する STDERR.print("何時間働きましたか?: ") # 標準出力で相手の画面に出力する b = gets.to_i # b の中に入力された文字列を整数に直し相手の画面に出力する printf("あなたは今回 %d 円貰えます。\n",kyuuryou(a,b)) # 表示させたい文をカッコとダブルコーテーションで囲み、%d の中にはメソット # で定義したもの (j * t) が入る 3.元にしたプログラムからの変更点 def の関数名を kyuuryou にした 4.実行結果 pan{c109149}% ./def_twoparam.rb [~/Ruby] 時給何円ですか?: 650 何時間働きましたか?: 3 あなたは今回 1950 円貰えます。 5.考察 このプログラムが正しく実行されているのか確かめる為に、bc -l を使い確か め算をした pan{c109149}% bc -l [~/Ruby] 650 * 3 1950 quit 確かめ算では 1950 になり実行結果でも 1950 なのでこのプログラムは正しく 実行されているといえる B 1.考えた設定 時給を 640 円に固定し何時間働いたかを入力すると貰える金額が表示される プログラムを考えた 2.作成したプログラム #!/usr/koeki/bin/ruby def kyuuryou(t) # メソットの定義 640 * t end # def に対する end STDERR.print("時給は 640 円です。\n") # 標準出力で相手の画面に出力する STDERR.print("何時間働きましたか?: ") # 標準出力で相手の画面に出力する b = gets.to_i # b の中に入力された文字列を整数に直し相手の画面に出力する printf("あなたは今回 %d 円貰えます。\n",kyuuryou(b)) # 表示させたい文をカッコとダブルコーテーションで囲み、%d の中にはメソット # で定義したもの (640 * t) が入る 3.元にしたプログラムからの変更点 2 変数ではなく、一つの変数を固定しもう一つの変数に代入し金額が出るよう にした 4.実行結果 pan{c109149}% ./def_oneparam_a.rb [~/Ruby] 時給は 640 円です。 何時間働きましたか?: 5 あなたは今回 3200 円貰えます。 5.考察 このプログラムが正しく実行されているのか確かめる為に、bc -l を使い確か め算をした pan{c109149}% bc -l [~/Ruby] 640 * 5 3200 quit 確かめ算では 3200 になり実行結果でも 3200 なのでこのプログラムは正しく 実行されているといえる C 1.考えた設定 時給を固定し、今週分、1週間前、2週間前、3週間前の働いた時間を入力すると 貰える金額をグラフに表せるようなプログラムを考えた 2.作成したプログラム #!/usr/koeki/bin/ruby def kyuuryou(t) # メソットの定義 640 * t / 100.to_f end # def に対する end def gurahu(a,b,c,d) # メソットの定義 print("-" * kyuuryou(d) + "- y単位(百円)\n") # - に kyuuryou(d) を掛けた答えの回数だけ「-」を表示させ、その後 # 「- y単位(百円)」 を表示させる for i in 0 .. a-1 # 0 から a-1 を引いた回数繰り返す print("|\n") # 「|」 と 「改行」 を表示させる end # def に対する end printf("|" + "*" * kyuuryou(d) + "%5.1f\n",kyuuryou(d)) # | と * に kyuuryou(d) を掛けた答えの回数だけ「*」を表示させ、その後 # %5.1f を表示させる。%d には kyuuryou(d) が入る。kyuuryou(d)とは # このプログラムの最初で定義したもののこと。 print("|\n") printf("|" + "*" * kyuuryou(c) + "%5.1f\n",kyuuryou(c)) print("|\n") printf("|" + "*" * kyuuryou(b) + "%5.1f\n",kyuuryou(b)) print("|\n") printf("|" + "*" * kyuuryou(a) + "%5.1f\n",kyuuryou(a)) print("|\nx\n") end # def に対する end STDERR.print("3週間前の働いた時間は何時間ですか?: ") # 標準出力で相手の画面に出力する i = gets.to_i # i の中に入力された文字列を整数に直し相手の画面に出力する STDERR.print("2週間前の働いた時間は何時間ですか?: ") # 標準出力で相手の画面に出力する j = gets.to_i # j の中に入力された文字列を整数に直し相手の画面に出力する STDERR.print("1週間前の働いた時間は何時間ですか?: ") # 標準出力で相手の画面に出力する k = gets.to_i # k の中に入力された文字列を整数に直し相手の画面に出力する STDERR.print("今週の働いた時間は何時間ですか?: ") # 標準出力で相手の画面に出力する l = gets.to_i # l の中に入力された文字列を整数に直し相手の画面に出力する STDERR.print("上から今週分、1週間前、2週間前、3週間前\n") # 標準出力で相手の画面に出力する gurahu(i,j,k,l) # gurahu(a,b,c,d) で定義したものを表示させる 3.元にしたプログラムからの変更点 合計の金額をグラフで表せるようにした 4.実行結果 pan{c109149}% ./def_oneparam_bar.rb [~/Ruby] 3週間前の働いた時間は何時間ですか?: 5 2週間前の働いた時間は何時間ですか?: 4 1週間前の働いた時間は何時間ですか?: 5 今週の働いた時間は何時間ですか?: 3 上から今週分、1週間前、2週間前、3週間前 -------------------- y単位(百円) | | | | | |******************* 19.2 | |******************************** 32.0 | |************************* 25.6 | |******************************** 32.0 | x 5.考察 このプログラムが正しく実行されているのか確かめる為に、bc -l を使い確か め算をした kterm におさまるように合計を 100 で割った pan{c109149}% bc -l [~/Ruby] 640 * 5 / 100 32.00000000000000000000 640 * 4 / 100 25.60000000000000000000 640 * 5 / 100 32.00000000000000000000 640 * 3 / 100 19.20000000000000000000 quit 確かめ算では 32.000…、25.600…、32.000…、19.200…となった 実行結果では 19.0、32.0、25.0、32.0 になっている これは表示するとき小数第2位を四捨五入して表示させているためである 確かめ算の小数第2位を四捨五入すると、32.0、25.6、32.0、19.2になる よってこのプログラムは正しく実行されているといえる D 1.考えた設定 合計のグラフを def_param というファイルに出力されるプログラムを 考えた 2.作成したプログラム #!/usr/koeki/bin/ruby def kyuuryou(t) # メソットの定義 640 * t / 100.to_f end # def に対する end def gurahu(a,b,c,d) # メソットの定義 print("-" * kyuuryou(d) + "- y単位(百円)\n") # - に kyuuryou(d) を掛けた答えの回数だけ「-」を表示させ、その後 # 「- y単位(百円)」 を表示させる for i in 0 .. a - 1 # 0 から a-1 を引いた回数繰り返す print("|\n") # 「|」 と 「改行」 を表示させる end # def に対する end printf("|" + "*" * kyuuryou(d) + "%5.1f\n",kyuuryou(d)) # | と * に kyuuryou(d) を掛けた答えの回数だけ「*」を表示させ、その後 # %5.1f を表示させる。%d には kyuuryou(d) が入る。kyuuryou(d)とは # このプログラムの最初で定義したもののこと。 print("|\n") # 「|」 と 「改行」を表示させる printf("|" + "*" * kyuuryou(c) + "%5.1f\n",kyuuryou(c)) # | と * に kyuuryou(c) を掛けた答えの回数だけ「*」を表示させ、その後 # %5.1f を表示させる。%d には kyuuryou(c) が入る。kyuuryou(c)とは # このプログラムの最初で定義したもののこと。 print("|\n") # 「|」 と 「改行」を表示させる printf("|" + "*" * kyuuryou(b) + "%5.1f\n",kyuuryou(b)) # | と * に kyuuryou(b) を掛けた答えの回数だけ「*」を表示させ、その後 # %5.1f を表示させる。%d には kyuuryou(b) が入る。kyuuryou(b)とは # このプログラムの最初で定義したもののこと。 print("|\n") # 「|」 と 「改行」を表示させる printf("|" + "*" * kyuuryou(a) + "%5.1f\n",kyuuryou(a)) # | と * に kyuuryou(a) を掛けた答えの回数だけ「*」を表示させ、その後 # %5.1f を表示させる。%d には kyuuryou(a) が入る。kyuuryou(a)とは # このプログラムの最初で定義したもののこと。 print("|\nx\n") # 「|」 と 「改行」 と 「x」 と 「改行」を表示させる end # def に対する end STDERR.print("3週間前の働いた時間は何時間ですか?: ") # 標準出力で相手の画面に出力する i = gets.to_i # i の中に入力された文字列を整数に直し相手の画面に出力する syuukan_3 = kyuuryou(i) # syuukan_3 の中に kyuuryou(i) を代入する # kyuuryou(i) とはこのプログラムの最初で定義 # したもののこと。 STDERR.print("2週間前の働いた時間は何時間ですか?: ") # 標準出力で相手の画面に出力する j = gets.to_i # j の中に入力された文字列を整数に直し相手の画面に出力する syuukan_2 = kyuuryou(j) # syuukan_2 の中に kyuuryou(j) を代入する # kyuuryou(j) とはこのプログラムの最初で定義 # したもののこと。 STDERR.print("1週間前の働いた時間は何時間ですか?: ") # 標準出力で相手の画面に出力する k = gets.to_i # k の中に入力された文字列を整数に直し相手の画面に出力する syuukan_1 = kyuuryou(k) # syuukan_1 の中に kyuuryou(k) を代入する # kyuuryou(k) とはこのプログラムの最初で定義 # したもののこと。 STDERR.print("今週の働いた時間は何時間ですか?: ") # 標準出力で相手の画面に出力する l = gets.to_i # l の中に入力された文字列を整数に直し相手の画面に出力する syuukan = kyuuryou(l) # syuukan の中に kyuuryou(l) を代入する # kyuuryou(l) とはこのプログラムの最初で定義 # したもののこと。 STDERR.print("上から今週分、1週間前、2週間前、3週間前\n") # 標準出力で相手の画面に出力する gurahu(i,j,k,l) # gurahu(a,b,c,d) で定義したものを表示させる open("def_param.txt" , "w") do |kingaku| # def_param.txt を書込みモードで開き kingaku という名前に置きかえる kingaku.print("上から今週分、1週間前、2週間前、3週間前\n") # 表示させたい文をカッコとダブルコーテーションで囲み、def_param.txt # に出力させるので print の前に kingaku をつける kingaku.print("-" * syuukan_3 + "- y単位(百円)\n") # - に kyuuryou(d) を掛けた答えの回数だけ「-」を表示させ、その後 #「- y単位(百円)」 を表示させ、def_param.txt に出力させるので # print の前に kingaku を付ける for i in 0 .. 3 # 0 から 3 まで繰り返す kingaku.print("|\n") # 「改行」を表示させる end # def に対する end kingaku.printf("|" + "*" * syuukan + "%5.1f\n",syuukan) # | と * に syuukan を掛けた答えの回数だけ「*」を表示させ、その後 # %5.1f を表示させる。%d には syuukan が入る。syuukan とは kyuuryou(l) # を代入したもの。kyuuryou(l)とはこのプログラムの最初で定義したもののこと。 kingaku.print("|\n") # 「|」 と 「改行」を表示させる kingaku.printf("|" + "*" * syuukan_1 + "%5.1f\n",syuukan_1) # | と * に syuukan_1 を掛けた答えの回数だけ「*」を表示させ、その後 # %5.1f を表示させる。%d には syuukan_1 が入る。syuukan_1 とは kyuuryou(k) # を代入したもの。kyuuryou(k)とはこのプログラムの最初で定義したもののこと。 kingaku.print("|\n") # 「|」 と 「改行」を表示させる kingaku.printf("|" + "*" * syuukan_2 + "%5.1f\n",syuukan_2) # | と * に syuukan_2 を掛けた答えの回数だけ「*」を表示させ、その後 # %5.1f を表示させる。%d には syuukan が入る。syuukan_2 とは kyuuryou(j) # を代入したもの。kyuuryou(j)とはこのプログラムの最初で定義したもののこと。 kingaku.print("|\n") # 「|」 と 「改行」を表示させる kingaku.printf("|" + "*" * syuukan_3 + "%5.1f\n",syuukan_3) # | と * に syuukan_3 を掛けた答えの回数だけ「*」を表示させ、その後 # %5.1f を表示させる。%d には syuukan が入る。syuukan_3 とは kyuuryou(i) # を代入したもの。kyuuryou(i)とはこのプログラムの最初で定義したもののこと。 kingaku.print("|\nx\n") # 「|」 と 「改行」 と 「x」 と 「改行」を表示させる end # open に対する end 3.元にしたプログラムからの変更点 プログラムの最後にファイルに出力できるようにプログラムをつけたした 4.実行結果 pan{c109149}% ./def_oneparam_write.rb [~/Ruby] 3週間前の働いた時間は何時間ですか?: 6 2週間前の働いた時間は何時間ですか?: 7 1週間前の働いた時間は何時間ですか?: 3 今週の働いた時間は何時間ですか?: 4 上から今週分、1週間前、2週間前、3週間前 -------------------------- y単位(百円) | | | | | | |************************* 25.6 | |******************* 19.2 | |******************************************** 44.8 | |************************************** 38.4 | x pan{c109149}% cat def_param.txt [~/Ruby] 上から今週分、1週間前、2週間前、3週間前 --------------------------------------- y単位(百円) | | | | |************************* 25.6 | |******************* 19.2 | |******************************************** 44.8 | |************************************** 38.4 | x 5.考察 このプログラムが正しく実行されているのか確かめる為に、bc -l を使い確か め算をした kterm におさまるように合計を 100 で割った pan{c109149}% bc -l [~/Ruby] 640 * 6 / 100 38.40000000000000000000 640 * 7 / 100 44.80000000000000000000 640 * 3 / 100 19.20000000000000000000 640 * 4 / 100 25.60000000000000000000 quit 確かめ算では 38.400…、44.800…、19.200…、25.600…となった 実行結果では 25.6、19.2、44.8、38.4 になっている これは表示するとき小数第2位を四捨五入して表示させているためである 確かめ算の小数第2位を四捨五入すると、38.4、44.8、19.2、25.6になる よってこのプログラムは正しく実行されているといえる 3.感想 義務教育で学んだ算数や数学とくらべ今回やったことは同じしくみだと思う。 例えば f(x)=3x+5 のような数式があったとき、これをプログラムで表すと def f(x) 3 * x + 5 end というように表すことができるので同じしくみを使っていると思う。 今回学んだ def は数学の要素もあるので少し難しく感じた。しかし def を 使えるようになれば、プログラミングの幅も広がるのでしっかりと使える ようにしたいと思った。 4.参考文献 http://roy/~madoka/2010/r2/04/04_03_theme_03_method.htm 基礎プログラミング II 第 4 回 「繰り返しは引っ張りだそう」どんな関数がきてもだいじょうぶ 西村 まどか先生 2009年度の先輩がかいたレポート http://roy/~madoka/2009/r2/04/rpt/c108182.txt 2009年度の先輩 5.共同学習者 青木 千紗 大島 藍 久保田 瑛一郎 小松 由里 6.添付