第9回 基礎プログラミング I レポート課題 横山広樹 C109149A 英語 1 環境 1 A 0x13 + 0x24 = 0x?? このままでは計算することができないため、 10 進数に戻して計算する。 そのためにまず、13 に右から 16^0 と 16^1 を掛けて合計を足す。すると 1 * 16^1 + 3 * 16^0 = 19 24 も同じように計算して 2 * 16^1 + 4 * 16^0 = 36 この 19 と 36 は 10 進数表記なので 19 と 36 を足す。 19 + 36 = 55 今度は 10 進数の 55 を 16 進数に戻すために 2 進数に直す。 直すためには 55 を 2 で割っていく。 2)55 2)27 1 2)13 1 2) 6 1 2) 3 0 2) 1 1 下から読んで、110111 これを右から 4 つに区切って 11 0111 これを 10 進数に直して 16 進数に直す。 11 は 1 * 2 + 1 * 1 = 3 0111 は 0 * 8 + 1 * 4 + 1 * 2 + 1 * 1 = 7 3 は 16 進数で 3 になり、7 は 16 進数で 7 になる。 答えは 0x13 + 0x24 = 0x37 1 B 0x23 + 0x1e = 0x?? 前の問題と同じように 10 進数に戻して計算する。 そのためにまず、23 に右から 16^0 と 16^1 を掛けて足す。すると 2 * 16^1 + 3 * 16^0 = 35 1e の e は 16 進数では 14 なので 14 として計算する。 同じように計算して 1 * 16^1 + 14 * 16^0 = 30 これも 10 進数表記なので 35 と 30 を足す。 35 + 30 = 65 今度は 10 進数の 65 を 16 進数に戻すために 2 進数に直す。 直すためには 65 を 2 で割っていく。 2)65 2)32 1 2)16 0 2) 8 0 2) 4 0 2) 2 0 2) 1 0 下から読んで、1000001 これを右から 4 つに区切って 100 0001 これを 10 進数に直して 16 進数に直す。 100 は 1 * 4 + 0 * 2 + 0 * 1 = 4 0001 は 0 * 8 + 0 * 4 + 0 * 2 + 0 * 1 = 1 4 は 16 進数で 4 になり、1 は 16 進数で 1 になる。 答えは 0x23 + 0x24 = 0x41 1 C 0xaa - 0x33 = 0x?? これも同じように、10 進数に戻して計算する。 a は 16 進数で 10 なので 10 として計算する。 10 * 16^1 + 10 * 16^0 = 170 33 も同じように 計算して 3 * 16^1 + 3 * 16^0 = 51 これも 10 進数表記なので 176 から 51 を引く。 170 - 51 = 119 次に 10 進数の 119 を 16 進数に戻すために 2 進数に直す。 直すためには 119 を 2 で割っていく。 2)119 2) 59 1 2) 29 1 2) 14 1 2) 7 0 2) 3 1 2) 1 1 下から読んで 1110111 これを右から 4 つに区切って 111 0111 これを 10 進数に直して 16 進数に直す。 111 は 1 * 4 + 1 * 2 + 1 * 1 = 7 0111 は 0 * 8 + 1 * 4 + 1 * 2 + 1 * 1 = 7 7 は 16 進数で 7 になる。 答えは 0xaa - 0x33 = 0x77 2 進数 10 進数 16 進数 0000 0 0 0001 1 1 0010 2 2 0011 3 3 0100 4 4 0101 5 5 0110 6 6 0111 7 7 1000 8 8 1001 9 9 1010 10 a 1011 11 b 1100 12 c 1101 13 d 1110 14 e 1111 15 f 2 進数、10 進数、16 進数へ変換するときは、上の表を参考にする。 2 A 広告ホームページ http://roy/~c109149/advertise/ ゲーム部門にエントリーする。 2 B 設定 サイコロの目を当てるプログラムを作った。 プログラム #!/usr/koeki/bin/ruby srand # 乱数を適当に取りだして並べておく。 i = rand(6) # srand でもらってきた数字を計算し saikoro の # 中にある数字を無作為に取りだす。 saikoro = ["1","2","3","4","5","6"] # 配列の設定 STDERR.print("サイコロの目をあててね。\n") STDERR.printf(" %d %s %s %s %s %s \n",saikoro[0],saikoro[1],saikoro[2],saikoro[3],saikoro[4],saikoro[5]) j = gets.chomp.to_i-1 printf("自分: %d サイコロ: %d \n",saikoro[j],saikoro[i]) if saikoro[j] == saikoro[i] # 自分の数字とサイコロの数字が一緒だったら # 次の操作をする。 print("当たりだよ。今日はなにかいいことあるかも。\n") elsif # それ以外だったら次の処理をする。 print("はずれ。もう一回チャレンジだ!\n") end # if に対する end 実行結果 1 回目 pan{c109149}% ./saikoro.rb [~/public_html/advertise] サイコロの目をあててね。 1 2 3 4 5 6 3 自分: 3 サイコロ: 1 はずれ。もう一回チャレンジだ! 2 回目 pan{c109149}% ./saikoro.rb [~/public_html/advertise] サイコロの目をあててね。 1 2 3 4 5 6 3 自分: 3 サイコロ: 3 当たりだよ。今日はなにかいいことあるかも。 3 回目 pan{c109149}% ./saikoro.rb [~/public_html/advertise] サイコロの目をあててね。 1 2 3 4 5 6 6 自分: 6 サイコロ: 4 はずれ。もう一回チャレンジだ! 考察 実行結果で自分は 3 サイコロは 1 となり同じではないので、「はずれ。もう 一回チャレンジだ!」と表示されていることからこのプログラムは正しく動作し ていると言える。しかし、一回だけではまぐれかも知れないので 3 回してみた。 2 回目は自分が 3 サイコロは 3 となり同じなので、「当たりだよ。今日はな にかいいことあるかも。」と表示されていることからこのプログラムは正しく動 作していると言える。 3 回目は自分が 6 サイコロは 4 となり同じではないので、「はずれ。もう 一回チャレンジだ!」と表示されていることからこのプログラムは正しく動作し ていると言える。 3 回した結果正しく動作していることからこのプログラムは正しく動作している と言える。 感想 次回からも頑張ってプログラムを作っていきたいと思う。 参考文献 10進数⇔16進数 変換 http://7ujm.net/play/DECtoHEX/TOH.html 個人プログラム http://roy.e.koeki-u.ac.jp/~c108057/advertise/ 工藤 智也 共同学習者 青木 千紗 大島 藍 久保田 瑛一郎