語学クラス:XXXX語 系: XXXX系 学籍番号:c106XXXX 氏名:XXXXXXXX ------------------------------------------------------------- 1. A.0xabc = 0b?? 0xabc は、16進数なので、まず、10進数なおす。 0xabc = (16**2)*a + (16**1)*b +(16**0)*c = 256*a + 16*b + c a=10 b=11 c=12 = 2560 + 176 + 12 = 2748 0xabc = 0d2748 と、なったので 0d2748 を、2進数になおす。 2 )2748 0 ↑ ---------- 2 )1374 0 ↑ ---------- 2 ) 687 1 ↑ ---------- 2 ) 343 1 ↑ ---------- 2 ) 171 1 ↑ ---------- 2 ) 85 1 ↑ ---------- 2 ) 42 0 ↑ ---------- 2 ) 21 1 ↑ ---------- 2 ) 10 0 ↑ ---------- 2 ) 5 1 ↑ ---------- 2 ) 2 0 ↑ ---------- 1 → よって、0xabc = 0b101010111100 である。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - B.0b11010001 + 0b1 - 0b1100 = 0d?? 0b11010001 0b1 0b1100 を、それぞれ10進数になおしてから、計算する。 0b11010001 = (2**0)*1 + (2**1)*0 + (2**2)*0 + (2**3)*0 + (2**4)*1 + (2**5)*0 + (2**6)*1 + (2**7)*1 = 1 + 0 + 0 + 0 + 16 + 0 + 64 + 128 = 209 0b1 = 1 0b1100 = (2**0)*0 + (2**1)*0 + (2**2)*1 + (2**3)*1 = 0 + 0 + 4 + 8 = 12 0b11010001 + 0b1 - 0b1100 = 209 + 1 - 12 = 198 よって、0b11010001 + 0b1 - 0b1100 = 0d198 となる。 ----------------------------------------------------------- 2. A. 設定 飯森山にあるレンタルビデオ屋の売り上げ伝票を まとめたデータについて、 その日の売り上げと客単価を計算させるプログラム。 貸し出しは 1日 1 本あたり 100 円である。 作成したプログラム #!/usr/koeki/bin/ruby n = 0 uriage = 0 tanka = 0 while line = gets # line = 行を順番に検索していく if/\S+\s+(\d+)\s+(\d+)/=~line # \S+ 文字列の連続 # \s+ スペースの連続 # (\d+)数字の連続 uriage += $1.to_i*$2.to_i*100 # to_i 数字を、整数として読む # $1 $2 は、後方参照 ( )の中だけを検索し取り出す n += 1 end end tanka = uriage/n # 売り上げ / 来店人数 = 客単価 printf("1日の売り上げは、%d円です。今日は、%dのお客さんが来店しました。\n",uriage,n) # 1つ目の %d に、売り上げ # 2つ目の %d に、来店人数を表示させる。 printf("1日の客単価は、%d円です。\n",tanka) # %d に、客単価を表示させる プログラムを実行した結果画面 irsv{c106090}% ./rental.rb iimori.dat [~/Ruby] 1日の売り上げは、33500円です。今日は、18のお客さんが来店しました。 1日の客単価は、1861円です。 導き出された結果の考察 (ここで計算結果が合っているか調べる) 名前 本数 日数 スティーブ 12 1 マーク 2 2 マーガレット 6 3 ケイン 1 5 ポール 9 1 ステファニー 11 2 クリス 4 3 ジャスティン 3 4 ライカ 5 5 ジョン 8 1 アンナ 20 2 オーリー 3 3 ケイト 7 4 ライアン 1 1 ミスティー 5 2 グレン 6 3 エドワード 3 4 アルフォンス 18 5 合計 18 名なので、手計算した結果 本数 * 日数 = 33500 # 売り上げ 18 / 33500 = 1861 # 客単価 となり、あっていることがわかった。 参考文献 (導き出された結果の考察 参照した本、ホームページなど) まどか先生と、神田先生のホームページ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - b. 設定 2つのランチメニュー (A: 650 円, B: 550 円) しかない黒森のオープンカフェ。 片方を残し、片方を新メニューに入れ替えたい。 売り上げ伝票から、総売り上げ、客単価、どちらのランチメニューの注文が多い かが分かる プログラム 作成したプログラム #!/usr/koeki/bin/ruby lanchiA = 0 # lanchiA は、ランチAを頼んだ回数を表す 初期値は、0 とする lanchiB = 0 # lanchiBは、ランチBを頼んだ回数を表す 初期値は、0 とする tanka = 0 # tanka は、客単価を表す 初期値は、0 とする total = 0 # total は、総売り上げを表す 初期値は、0 とする n = 0 # n は、人数を表す 初期値は、0 とする while line = gets # while = 繰り返し # line = 行を順番に検索していく if /(\w)/=~ line # (\w) 英数字を検索する if $1 == "A" # もし、$1が、Aだった場合lanchiAに 1 を加算する # $1 は、後方参照 ( )の中だけを検索し取り出す lanchiA += 1 elsif $1 == "B" # もし、$1が、Bだった場合lanchiBに 1 を加算する # $1 は、後方参照 ( )の中だけを検索し取り出す lanchiB += 1 end # if の end n += 1 # n に 1 を加算していく end # if の end end # while の end total = lanchiA*650 + lanchiB*550 # lanchiA(ランチAの頼まれた個数)*650(円) # + lanchiB(ランチBの頼まれた個数)*550(円) # = 総売り上げ tanka = total/n # 総売り上げ / 人数 if lanchiA > lanchiB # もし、ランチAの注文が、ランチBの注文より多い場合 print"注文は、lanchiAが多いです。lanchiBを消しましょう。\n" elsif lanchiA == lanchiB # もし、ランチAの注文と、ランチBの注文が同じ場合 print"注文は、どちらも同じ量です。再検討して下さい。\n" else # それ以外の場合( ランチAの注文が、ランチBの注文より少ない場合) print"注文は、lanchiBが多いです。lanchiAを消しましょう。\n" end printf("今日の総売り上げは、%d円です。今日は、%d人のお客さんが来店しました。\n",total,n) # 1つ目の %d に、売り上げ # 2つ目の %d に、来店人数を表示させる。 printf("今日の客単価は、%d円です。\n",tanka) # %d に、客単価を表示させる プログラムを実行した結果画面 kuromori-1.dat kuromori-2.dat kuromori-3.dat の 3パターンを作り実行した。 irsv{c106090}% ./cafe.rb kuromori-1.dat [~/Ruby] 注文は、どちらも同じ量です。再検討して下さい。 今日の総売り上げは、8400円です。今日は、14人のお客さんが来店しました。 今日の客単価は、600円です。 irsv{c106090}% ./cafe.rb kuromori-2.dat [~/Ruby] 注文は、lanchiAが多いです。lanchiBを消しましょう。 今日の総売り上げは、7850円です。今日は、13人のお客さんが来店しました。 今日の客単価は、603円です。 irsv{c106090}% ./cafe.rb kuromori-3.dat [~/Ruby] 注文は、lanchiBが多いです。lanchiAを消しましょう。 今日の総売り上げは、7750円です。今日は、13人のお客さんが来店しました。 今日の客単価は、596円です。 導き出された結果の考察 (ここで計算結果が合っているか調べる) kuromori-1.dat lanchiA 650 * 7 = 4550 lanchiB 550 * 7 = 3850 lanchiA + lanchiB = 8400 tanka 8400 /14 = 600 kuromori-2.dat lanchiA 650 * 7 = 4550 lanchiB 550 * 6 = 3300 lanchiA + lanchiB = 7850 tanka 7850 /13 = 603 kuromori-3.da lanchiA 650 * 6 = 3900 lanchiB 550 * 7 = 3850 lanchiA + lanchiB = 7750 tanka 7750 /13 = 596 参考文献 (導き出された結果の考察 参照した本、ホームページなど) まどか先生と、神田先生のホームページ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - c. 設定 あるコピー機は、1 枚印刷するときには 10 円のコストがかかる。 ところが連続で 30 枚以上印刷すると 7 円で済む。 コピー機で誰が何枚つくったかの情報を読みこんで、 コピー機の使用にいくらかかったのか調べよ。 作成したプログラム #!/usr/koeki/bin/ruby sum = 0 # 合計の変数 初期値を 0 とする while line = gets # 1行ずつデータを持ってきて検索させる # データの行数だけ繰り返し続ける if /\S+\s+(\d+)/=~ line # 空白以外の文字列 + スペースの連続 + 数字の連続 を検索する if $1.to_i < 30 # もし、$1 が、29以下だったら $1 を整数化したものに 10 かける # その結果を、sum に足していく sum += $1.to_i*10 else # もし、$1 が、30以上だったら $1 を整数化したものに 7 かける # その結果を、sum に足していく sum += $1.to_i*7 end # ifのエンド end # ifのエンド end # whileのエンド printf("コピー機の使用料金は%d円です\n",sum) プログラムを実行した結果画面 irsv{c106090}% ./copy.rb copy.dat [~/Ruby] コピー機の使用料金は1359円です 導き出された結果の考察 (ここで計算結果が合っているか調べる) 120 + 200 + 210 + 10 + 90 + 110 + 231 + 30 + 50 + 308 = 1359 参考文献 (導き出された結果の考察 参照した本、ホームページなど) まどか先生と、神田先生のホームページ ------------------------------------------------------------------- 3. 感想 今回は、とても頑張りました。 特に、if文を頑張ったと思います。