考えた設定 今回作ったプログラムは、夏休み中に高校の頃の 友人に協力してもらい、作成していたプログラムです。 このプログラムは、以前作った sinsu.rb sinsu_b.rb の改良版で、10進数を 2進数と 16進数に変換するプログラムです。 作成したプログラム #!/usr/koeki/bin/ruby print("10進数を入力して下さい、2進数と16進数に変換します。Ctlr-d\n") print("上段には2進数が、下段には16進数が表示されます。\n") class Fixnum def to_b num = self bin = "" while num > 0 bin << (num % 2).to_s num /= 2 end bin.reverse end def to_x num = self hex = "" while num > 0 temp = (num % 16) case temp when 10 hex << 'a' when 11 hex << 'b' when 12 hex << 'c' when 13 hex << 'd' when 14 hex << 'e' when 15 hex << 'f' else hex << temp.to_s end num /= 16 end hex.reverse end end while line = gets line.chomp! next unless /\d+/ =~ line num = line.to_i puts num.to_b puts num.to_x puts exit end 元にしたプログラムからの変更点 今回のプログラムは、以前のプログラム(sinsu.rb sinsu_b.rb) でできなかった2種類の変換を可能にした。 実行結果 irsv{c106185}% ./sinsu_ex.rb [~/Ruby] 10進数を入力して下さい、2進数と16進数に変換します。Ctlr-d 上段には2進数が、下段には16進数が表示されます。 1 1 1 irsv{c106185}% ./sinsu_ex.rb [~/Ruby] 10進数を入力して下さい、2進数と16進数に変換します。Ctlr-d 上段には2進数が、下段には16進数が表示されます。 2 10 2 irsv{c106185}% ./sinsu_ex.rb [~/Ruby] 10進数を入力して下さい、2進数と16進数に変換します。Ctlr-d 上段には2進数が、下段には16進数が表示されます。 3 11 3 irsv{c106185}% ./sinsu_ex.rb [~/Ruby] 10進数を入力して下さい、2進数と16進数に変換します。Ctlr-d 上段には2進数が、下段には16進数が表示されます。 4 100 4 irsv{c106185}% ./sinsu_ex.rb [~/Ruby] 10進数を入力して下さい、2進数と16進数に変換します。Ctlr-d 上段には2進数が、下段には16進数が表示されます。 5 101 5 irsv{c106185}% ./sinsu_ex.rb [~/Ruby] 10進数を入力して下さい、2進数と16進数に変換します。Ctlr-d 上段には2進数が、下段には16進数が表示されます。 6 110 6 irsv{c106185}% ./sinsu_ex.rb [~/Ruby] 10進数を入力して下さい、2進数と16進数に変換します。Ctlr-d 上段には2進数が、下段には16進数が表示されます。 7 111 7 irsv{c106185}% ./sinsu_ex.rb [~/Ruby] 10進数を入力して下さい、2進数と16進数に変換します。Ctlr-d 上段には2進数が、下段には16進数が表示されます。 8 1000 8 irsv{c106185}% ./sinsu_ex.rb [~/Ruby] 10進数を入力して下さい、2進数と16進数に変換します。Ctlr-d 上段には2進数が、下段には16進数が表示されます。 9 1001 9 irsv{c106185}% ./sinsu_ex.rb [~/Ruby] 10進数を入力して下さい、2進数と16進数に変換します。Ctlr-d 上段には2進数が、下段には16進数が表示されます。 10 1010 a irsv{c106185}% ./sinsu_ex.rb [~/Ruby] 10進数を入力して下さい、2進数と16進数に変換します。Ctlr-d 上段には2進数が、下段には16進数が表示されます。 11 1011 b irsv{c106185}% ./sinsu_ex.rb [~/Ruby] 10進数を入力して下さい、2進数と16進数に変換します。Ctlr-d 上段には2進数が、下段には16進数が表示されます。 12 1100 c irsv{c106185}% ./sinsu_ex.rb [~/Ruby] 10進数を入力して下さい、2進数と16進数に変換します。Ctlr-d 上段には2進数が、下段には16進数が表示されます。 13 1101 d irsv{c106185}% ./sinsu_ex.rb [~/Ruby] 10進数を入力して下さい、2進数と16進数に変換します。Ctlr-d 上段には2進数が、下段には16進数が表示されます。 14 1110 e irsv{c106185}% ./sinsu_ex.rb [~/Ruby] 10進数を入力して下さい、2進数と16進数に変換します。Ctlr-d 上段には2進数が、下段には16進数が表示されます。 15 1111 f とりあえず、15進数が一回りする16まで計算してみました 結果の考察 16進数、2進数の計算結果は基礎プログラミング1前期第4回 16進数のまとめというページにまとめて記載してあったものを 引用しました。 16 進数表示 2 進数表示 10 進数表示 0 0 0 1 1 1 2 10 2 3 11 3 4 100 4 5 101 5 6 110 6 7 111 7 8 1000 8 9 1001 9 a 1010 10 b 1011 11 c 1100 12 d 1101 13 e 1110 14 f 1111 15 実行結果と照らし合わせた結果、全て一致していたため成功と言える。 参考文献 基礎プログラミング1 前期 第4回 プログラミングの方法 2 進数, 16 進数変換 (2) 16 進数のまとめ http://roy/~madoka/2007/r1/04/04-12-binary2.html gan2 の Ruby 勉強日記 http://d.hatena.ne.jp/gan2/ 感想 今回のプログラムは実は前期に完成させたかったのですが、 今回協力してくれた友人はそのとき忙しかったため、 自分一人で作り、提出しましたが、 今回のプログラムは自信作です。 とはいっても、このプログラムも gan2 さんの作った プログラムを少し変えただけですが、次こそは 自分オリジナルのプログラムを完成させたいです 今回作成したホームページ http://roy/~c106185/advertise/indexkoki.html