第4回 基礎プログラミング I レポート課題 氏名:XXXXXXXX 学籍番号:c109XXXX 語学クラス:中国語1 コース(系):政策 ファイルが添付できませんでした。ctrl+c ctrl+a で画面を出したした後、 カーソルをピリオド( . )に合わせ、c をタイプして、ファイル名を入力しまし た。ここまではできたのですが、その後、Returnをタイプして "Copy to(while_bookkeeper.rb):" と表示されたので、再びReturnをタイプしたのですが、添付はできませんでした。 ktermで cd Ruby の後に、ls でファイルが Ruby内にあるかの確かめを行い、 ファイルがあることも確認しました。 提出期限までにあまり時間がないので、レポートとしては不十分ですが、今回 はファイルは添付せずに提出いたします。申し訳ありません。 1.筆記問題 A. 0bは2進法表示、0xは16進法表示、0dは10進法表示。 ・2進数(0b)を10進数(0d)に変換する。 0b10111をそれぞれ1桁ずつ区切って考える。 1,0,1,1,1 の5つの数字に分けることができる。 2進数であり、直したい数字が以上のように5つであることから、2のx乗として 右から2の0乗として2の4乗まで計算する。 2の4乗 = 16 , 2の3乗 = 8 , 2の2乗 = 4 , 2の1乗 = 2 , 2の0乗 = 1 左から順に並べると、16,8,4,2,1 となる。 次に、1,0,1,1,1 と 16,8,4,2,1 をそれぞれ区切った値ずつかける。 左から順に計算すると 1 * 16 = 16 0 * 8 = 0 1 * 4 = 4 1 * 2 = 2 1 * 1 = 1 となる。 最後に、上で出た答えをすべて足す。 16 + 0 + 4 + 2 + 1 = 23 よって、2進数 0b10111 を 10進数に変換すると 0d23 となる。 ・2進数(0b)を16進数(0x)に変換する。 2進数 0b10111を10進数に変換する。 上の結果より、2進数 0b10111 は 10進数で 0d23 となる。 変換した10進数 0d23 を 16で割っていく。この時に出る余りが重要である。 23 / 16 = 1 余り 7 1 / 16 = 0 余り 1 計算して出た余りを下から読む。 ここでは 17 となる。 よって 2進数 0b10111 を 16進数に変換すると 0x17 となる。 B. 週末の予定を立てた。 「金曜日はプログラミングの課題をする。 土曜日はバイトに行く。 日曜日は友だちと遊ぶ。」 これをプログラム風に書き直すと A = "曜日" B = "課題" C = "バイト" D = "遊ぶ" if A == 金曜日 then B elsif A == 土曜日 then C else A == 日曜日 then D end となる。 2.プログラム問題 選んだ問題 A a.設定 何度も繰り返し行う設定としたいので、基礎プログラミング第3回の講義ノート を参考に、while true -- end を用いたプログラムを作成すれば良いと考えた。 また、変動させるプログラムということで、入金の場合と出金、終了時の時に 用いる入力文字があるものとしたいため、if -- end を用いれば良いと考え、 これらを使用したプログラムを作成した。 b.作成したプログラム #!/usr/koeki/bin/ruby money = 10000 #最初にある金額。 この金額に足さったり、引かれたりする ns =0 #入力時に用いる変数 b = 0 #入力された値の変数 while true #繰り返し行う STDERR.print("入金ならばn,出金ならばs,終了の場合qを入力:") ns = gets.chomp #入力された文字を変数 ns で選択する if ns == "n" #何を入力した場合なのかを示す STDERR.print("入金額は?:") #質問文を表示する b = gets.chomp #入力された値を変数 b にしまう money += b.to_i #入力された値を整数表示にする elsif ns == "s" #何を入力した場合なのか示す STDERR.print("出金額は?:") #質問文を表示する b = gets.chomp #入力された値を変数 b にしまう money -= b.to_i #入力された値を整数表示にする elsif ns == "q" #何を入力した場合なのかを示す break else print("無効です。\n") #指定した n,s,q のもの以外を入力した場合の文を表示 end end printf("残額は%d円\n",money) #計算させた最後の値を表示させる c.もとにしたプログラムからの変更点 基礎プログラミング I 第3回「キーボードから入力して計算させるには」カロ リー計算プログラムの講義ノートを参考にした。 ・文章を問題文に合ったものに変更 ・if を3つ用いたものを作成したかったので、elsif と else を追加 ・if で指定した以外のものを入力した場合、表示される文を指定したかったの で break と if -- end の end の間に print を追加 d.プログラムを実行した結果画面 x. 指定した n,s の入力を間違わず行った場合の実行結果 pan{c109020}% ./while_bookkeeper.rb [~/Ruby] 入金ならばn,出金ならばs,終了の場合qを入力:n 入金額は?:100 入金ならばn,出金ならばs,終了の場合qを入力:n 入金額は?:300 入金ならばn,出金ならばs,終了の場合qを入力:n 入金額は?:200 入金ならばn,出金ならばs,終了の場合qを入力:n 入金額は?:123 入金ならばn,出金ならばs,終了の場合qを入力:s 出金額は?:350 入金ならばn,出金ならばs,終了の場合qを入力:n 入金額は?:347 入金ならばn,出金ならばs,終了の場合qを入力:s 出金額は?:600 入金ならばn,出金ならばs,終了の場合qを入力:s 出金額は?:580 入金ならばn,出金ならばs,終了の場合qを入力:q 残額は9540円 y. 指定した n,s,q 以外のものを入力した場合を含むプログラムの実行結果 (入力ミスをしたと仮定してここでは 3回目に w を入力) pan{c109020}% ./while_bookkeeper.rb [~/Ruby] 入金ならばn,出金ならばs,終了の場合qを入力:n 入金額は?:100 入金ならばn,出金ならばs,終了の場合qを入力:s 出金額は?:100 入金ならばn,出金ならばs,終了の場合qを入力:w 無効です。 入金ならばn,出金ならばs,終了の場合qを入力:q 残額は10000円 z. n 入力後に入金額をマイナス(−)で入力したものと、s 入力後に出金額をマイ ナス(−)で入力した場合のプログラムの実行結果 pan{c109020}% ./while_bookkeeper.rb [~/Ruby] 入金ならばn,出金ならばs,終了の場合qを入力:n 入金額は?:-600 入金ならばn,出金ならばs,終了の場合qを入力:q 残額は9400円 pan{c109020}% ./while_bookkeeper.rb [~/Ruby] 入金ならばn,出金ならばs,終了の場合qを入力:s 出金額は?:-100 入金ならばn,出金ならばs,終了の場合qを入力:q 残額は10100円 e.結果の考察 x,y,zの3種類のプログラムの実行結果より、n,s,q を入力して金額(数字)を入力す ることができた。また、y の実行結果では、"無効"と表示された。これらの結果 から、if -- end の構成には誤りはないと考えられる。 実行時には、毎回質問文も表示されたため、STDERR.print 文にも誤りはない。 q を入力するまで、その働きが繰り返されたことから、while true -- end も 正しく機能していると思われる。 コンピュータに計算をさせる設定としたのだが、実行結果だけでは、正し く計算されているかわからないため、bc -l で確かめ算を行った。 x. pan{c109020}% bc -l [~/Ruby] 10000 + 100 + 300 + 200 + 123 - 350 + 347 - 600 - 580 9540 y. pan{c109020}% bc -l [~] 10000 + 100 - 100 10000 z. pan{c109020}% bc -l [~/Ruby] 10000 + (- 600) 9400 10000 - (- 100) 10100 以上の結果より、このプログラムは正しく実行されたといえる。 3.感想 プログラムの作成はたいへんだったが実行できた時は嬉しかった。また、自分 が作成したプログラムが動くことに感動した。実行していく過程で、このよう に入力しても正しく計算されるのか?と思い、入金なのにマイナスを使って金額 を入れたりもしてみた。結果、正しく計算されることは証明されたが、入金な のにマイナスの金額が入ってしまうこともおかしいのではないかと思った。 入金の際にはマイナス記号を入れられないようにするプログラムを作成するな ど、このファイルにも更なる改良を重ねていきたい。 効率的かつ入力時のミス削減のためにはどのようなプログラムであればよ いかということも常に頭に入れながら今後のプログラミングに挑んでいきたい。 f.参考文献 ・http://roy/~madoka/2010/r1/04/04_03_theme_01_branch.html 基礎プログラミング I 第4回「プログラミングの方法」 もしもそうならば(講義ノート) 西村まどか先生 ・http://roy/~madoka/2010/r1/03/03_10_theme_07_while_calory.html 基礎プログラミング I 第3回「キーボードから入力して計算させるには」 カロリー計算プログラム(講義ノート) 西村まどか先生 ・http://roy/~madoka/2010/r1/03/03_07_theme_04_whiletrue.html 基礎プログラミング I 第3回 「キーボードから入力して計算させるには」 何度でも繰り返す場合には(講義ノート) 西村まどか先生 ・http://roy/~madoka/2010/rpt/report.html プログラミングのレポートに必要な項目 西村まどか先生 ・プログラミングの手引き p4 プログラミングレポートの書き方 西村組TA一同 共同学習者 酒井 春香 / 久保田 瑛一郎 / 小松 由里 / 佐竹聡美