第5回 基礎プログラミング II レポート課題 氏名:布川大地 学籍番号:c1091230 語学クラス:英語3 コース(系):政策 1、筆記問題 A、Nunokawa Daichi をASCIIコード表を参考にして16進数に直すと、 N = 0x4E u = 0x75 n = 0x6E o = 0x6F k = 0x6B a = 0x61 w = 0x77 a = 0x61 D = 0x44 a = 0x61 i = 0x69 c = 0x63 h = 0x68 i = 0x69 となる。 これを10進数にする。 N = Ox4E:4*16の1乗=64 14*16の0乗=14 64+14=78 よって78 u = Ox75:7*16の1乗=112 5*16の0乗=5 112+5=117 よって117 n = 0x6E:6*16の1乗=96 14*16の0乗=14 96+14=110 よって110 o = 0x6F:6*16の1乗=96 15*16の0乗=15 96+15=111 よって111 k = 0x6B:6*16の1乗=96 11*16の0乗=11 96+11=107 よって107 a = 0x61:6*16の1乗=96 1*16の0乗=1 96+1=97 よって97 w = 0x77:7*16の1乗=112 7*16の0乗=7 112+7=119 よって119 a = 0x61:6*16の1乗=96 1*16の0乗=1 96+1=97 よって97 D = 0x44:4*16の1乗=64 4*16の0乗=4 64+4=68 よって68 a = 0x61:6*16の1乗=96 1*16の0乗=1 96+1=97 よって97 i = 0x69:6*16の1乗=96 9*16の0乗=9 96+9=105 よって105 c = 0x63:6*16の1乗=96 3*16の0乗=3 96+3=99 よって99 h = 0x68:6*16の1乗=96 8*16の0乗=8 96+8=104 よって104 i = 0x69:6*16の1乗=96 9*16の0乗=9 96+9=105 よって105 10進数を全て足すと、 78+117+110+111+107+97+119+97+68+97+105+99+104+105=1414 10進数の1414を2進数にする。 1414 / 2 = 707 余り 0 707 / 2 = 353 余り 1 353 / 2 = 176 余り 1 176 / 2 = 88 余り 0 88 / 2 = 44 余り 0 44 / 2 = 22 余り 0 22 / 2 = 11 余り 0 11 / 2 = 5 余り 1 5 / 2 = 2 余り 1 2 / 2 = 1 余り 0 これをしたから順に並べると、 0110000110 になるので、1414 = 0b 0110000110 となる。 2進数を16進数にするには2進数をまず下から4桁ずつに区切る。 0110 = 2の3乗*0 + 2の2乗*1 + 2の1乗*1 + 2の0乗*0 = 6 1000 = 2の3乗*1 + 2の2乗*0 + 2の1乗*0 + 2の0乗*0 = 8 0001 = 2の3乗*0 + 2の2乗*0 + 2の1乗*0 + 2の0乗*1 = 0 0x 680 となる。 よって、0d 1414 = 0x 680 となり、二つの方法で計算しても一致する。 B、 学校から帰ったあとの夜の行動をプログラム風にします。 def gohan(kome,okazu,ocha ) kome を炊飯器で炊く okazu をつくる dish = kome と okazu を置く cup = cup に ocha をいれる end # dish を洗う def dentifrice(water,powder,time) water をくむ powder を取り出す toothbrush = water で洗い powder をぬる toothbrush = toothbrush に time かける end # toothbrush を返す gohan(1 杯, 1 品, 200 ml) # ご飯を作るので呼び出す dentifrice(コップ 1 杯, 3 g, 3 分) # 歯みがきをするので呼び出す print("寝る準備ができました。\n") 2、プログラム問題 A、 設定はリンゴを友達に配るプログラムをつくった。 ・プログラム本体 #!/usr/koeki/bin/ruby def fact(x) if x == 1 # もし、x が 1 なら 1 # 1 にする else # 他は x * fact(x-1) # end end def ringo(type,kosu) if type == kosu # もし、リンゴの数と配る数が同じ場合 1 # 1通りにしかならない elsif kosu == 0 # もし、組み合わせが 0 の場合 0 # 友達に配るリンゴは無い elsif type < kosu # もし、リンゴの数よりも組み合わせの数が多い場合 print("「出来ません!」\n") exit # 終了 else fact(type) / (fact(kosu) * fact(type-kosu)) end end print("「たくさんあるリンゴを友達に配りたいと思います。」\n\n") STDERR.print("何種類のリンゴを配る? :") syurui = gets.to_i STDERR.print(" 一人に何個ずつ配る? :") kubaru = gets.to_i print("\n") printf("%d 種類のリンゴ\n%d 個ずつ配る\n", syurui, kubaru) print("\t・\n") print("\t・\n") print("\t・\n") printf("組み合わせは%d通りになります。\n", ringo(syurui,kubaru)) ・実行結果 pan{c109123}% ./def_combination.rb [~/Ruby] 「たくさんあるリンゴを友達に配りたいと思います。」 何種類のリンゴを配る? :5 一人に何個ずつ配る? :3 5 種類のリンゴ 3 個ずつ配る ・ ・ ・ 組み合わせは10通りになります。 pan{c109123}% bc -l [~/Ruby] (5*4*3)/(3*2*1) 10.00000000000000000000 となりました。 ・考察 確かめ算で計算があったのでよかった。うまく起動したのでよかったです。 3、感想 工場などで使われている機械などは同じ操作を繰り返している。今回の課題は難 しかったが、友達に教えてもらいながらうまく解くことができました。 共同学習者 渡辺力、池田博哉、藤井駿、森谷瑛二、奥山卓哉