講評: しっかりがんばりました。 ---- 10 月 17 日 第 3 回レポート 「Value が配列のとき」 学籍番号:c106XXXX 氏名:XXXXXXXX 語学クラス:XXXX語 XX 系:XXXX系 1. 筆記問題 A.5 つの対を考えよ。 中華まんの種類を hash 配列 tyuuka としました。 tyuuka の key と value は中華まんの種類とその値段[yen],カロリー[kcal], 肉の種類にとりました。 その 1: key 「肉まん」に対して value は「105,238,"牛肉"」 その 2: key 「ピザまん」に対して value は「105,230,"とり肉"」 その 3: key 「あんまん」に対して value は「105,254,"未使用"」 その 4: key 「明太じゃがバターまん」に対して value は「130,195,"とり肉"」 その 5: key 「餃子三連まん」に対して value は「135,185,"豚肉"」 その 6: key 「特製豚まん」に対して value は「150,286,"豚肉"」 tyuuka["肉まん"] = 105,238,"牛肉" tyuuka["ピザまん"] = 105,230,"とり肉" tyuuka["あんまん"] = 105,254,"未使用" tyuuka["明太じゃがバターまん"] = 130,195,"とり肉" tyuuka["餃子三連まん"] = 135,185,"豚肉" tyuuka["特製豚まん"] = 150,286,"豚肉" 参考資料:サンクスHP http://www.circleksunkus.jp/ B. alphabet → Onodera Sato ●ASCII コード● O → 4F n → 6E o → 6F d → 64 e → 75 r → 72 a → 61 S → 53 a → 61 t → 74 o → 6F ○16進数から10進数へ変換○ O → 4 × 16**1 = 64 F(15) × 16**0 = 15 計算式→irsv{c106048}% bc -l [~] 4*16 64 64+15 79 よって、0d79(10進数) n → 6 × 16**1 = 96 E(14) × 16**0 = 14 計算式→ irsv{c106048}% bc -l [~] 6*16 96 96+14 110 よって、0d110(10進数) o → 6 × 16**1 = 96 F(15) × 16**0 = 15 計算式→irsv{c106048}% bc -l [~] 6*16 96 96+15 111 よって、0d111(10進数) d → 6 × 16**1 = 96 4 × 16**0 = 4 計算式→irsv{c106048}% bc -l [~] 6*16 96 96+4 100 よって、0d100(10進数) e → 7 × 16**1 = 112 5 × 16**0 = 5 計算式→irsv{c106048}% bc -l [~] 7*16 112 112+5 117 よって、0d117(10進数) r → 7 × 16**1 = 112 2 × 16**0 = 2 計算式→irsv{c106048}% bc -l [~] 7*16 112 112+2 114 よって、0d114(10進数) a → 6 × 16**1 = 96 1 × 16**0 = 1 計算式→irsv{c106048}% bc -l [~] 6*16 96 96+1 97 よって、0d97(10進数) S → 5 × 16**1 = 80 3 × 16**0 = 3 計算式→irsv{c106048}% bc -l [~] 5*16 80 80+3 83 よって、0d83(10進数) a → 6 × 16**1 = 96 1 × 16**0 = 1 計算式→irsv{c106048}% bc -l [~] 6*16 96 96+1 97 よって、0d97(10進数) t → 7 × 16**1 = 112 4 × 16**0 = 116 計算式→irsv{c106048}% bc -l [~] 7*16 112 112+4 116 よって、0d116(10進数) o → 6 × 16**1 = 96 F(15) × 16**0 = 15 計算式→irsv{c106048}% bc -l [~] 6*16 96 96+15 111 よって、0d111(10進数) ○ASCII コードの参考文献○ 西村まどか先生の基礎プログラミング1のHP "http://roy/~madoka/2007/r1/05/05-03-ascii.html"より ○2進数、10進数、16進数の参考文献○ 2進数、16進数と10進数のHP "http://www.asahi-net.or.jp/~AX2S-KMTN/ref/bdh.html"より 2. ● hash-for.rb のプログラム● a. 考えた設定 コンビニのアルバイト経験をもとに、中華まんの商品を取り入れたプログラム作 成したいと思い、中華まんとその値段、カロリー、取扱っている肉の主な種類で 設定してみました。 b. 作成したプログラムコードそのもの #!/usr/koeki/bin/ruby $KCODE = 'e' #数字表記させるため "e" を指定する tyuuka = Hash.new # Hash 配列を tyuuka tyuuka["肉まん"] = 105,238,"牛肉" tyuuka["ピザまん"] = 105,230,"とり肉" tyuuka["あんまん"] = 105,254,"未使用" tyuuka["明太じゃがバターまん"] = 130,195,"とり肉" tyuuka["餃子三連まん"] = 135,185,"豚肉" tyuuka["特製豚まん"] = 150,286,"豚肉" #p tyuuka print("カロリーの低い順に並べます!!\n") tyuuka.keys.sort{ |kcal,low| #keyの変数並びかえ前と並びかえ後 tyuuka[kcal][1] <=>tyuuka[low][1] #hash配列を並びかえる時に必要な変数。[1]でカロリーを出力させる }.each{ #特定のものをとりだす |namae| #変数 printf("%-24s\t%d円\t%dkcal\t%sです。\n", namae, tyuuka[namae][0], tyuuka[namae][1], tyuuka[namae][2]) # - は左詰め 24は半角文字で24個分のスペースを作る } c. もとにしたプログラムからの変更点 前回のレポート(第2回)で作成した "hash-for.rbのプログラム" と 今日の授業 で学んだ "sesame" をもとにして作成しました。 変更した点……Hash配列をonigiriからtyuukaに変更。 print文の変更。 hash配列を並びかえる時に必要な変数を付け足して変更。 d. プログラムを実行した結果画面 irsv{c106048}% ./hash-for.rb [~/Ruby] カロリーの低い順に並べます!! 餃子三連まん 135円 185kcal 豚肉です。 明太じゃがバターまん 130円 195kcal とり肉です。 ピザまん 105円 230kcal とり肉です。 肉まん 105円 238kcal 牛肉です。 あんまん 105円 254kcal 未使用です。 特製豚まん 150円 286kcal 豚肉です。 e. 導き出された結果の考察 printf("%-24s\t%d円\t%dkcal\t%sです。\n", namae, tyuuka[namae][0], tyuuka[namae][1], tyuuka[namae][2]) と入力した結果、しっかりと表示さ れたので間違いないとわかった。また、字を揃えさせることに成功した。 f. 参考文献 西村まどか先生のHP "http://roy/~madoka/2007/r2/03/03-07-sort-hash-array-02.html"より ●hash-array-calc.rb のプログラム● a. 考えた設定 中華まんの売れ筋を高い方から並べさせるプログラムに考えた。 b. 作成したプログラムコードそのもの #!/usr/koeki/bin/ruby $KCODE = 'e' #数字表記させるため "e" を指定する tyuuka = Hash.new # Hash 配列を tyuuka tyuuka["肉まん"] = 105,238,16,"牛肉" #値段、カロリー、個数、肉の種類。 tyuuka["ピザまん"] = 105,230,10,"とり肉" tyuuka["あんまん"] = 105,254,2,"未使用" tyuuka["明太じゃがバターまん"] = 130,195,14,"とり肉" tyuuka["餃子三連まん"] = 135,185,20,"豚肉" tyuuka["特製豚まん"] = 150,286,11,"豚肉" #p tyuuka price = Array.new #for item, price in tyuuka do # printf("%s\t%d%d \n",item, price[0],price[1]) #end print("########中華まんの人気☆売れ筋の商品!!#####\n") print("----種類 ---------------------- 価格 -- 個数 --\n") tyuuka.keys.sort{ |prim,sorted| tyuuka[prim][2] <=> tyuuka[sorted][2] #個数を各成分に代入させる。 }.reverse.each { #reverse.each で 反対に並びかえる。 |item| printf("%-26s\t%d\t%d\n", item, tyuuka[item][0],tyuuka[item][2]) } c. もとにしたプログラムからの変更点 "hash-for.rb" のプログラム と "hash-each.rb" のプログラムをもとに変更し ていきまいした。 変更した点……Array.new を新規に追加して、配列を新規につくる methodに変 更した。 reverse.each を追加で、反対に並びかえるように変更した。 print文で、中華まんの種類と価格と個数を表示させるように変 更した。 d. プログラムを実行した結果画面 irsv{c106048}% ./hash-array-calc.rb [~/Ruby] ########中華まんの人気☆売れ筋の商品!!##### ----種類 ---------------------- 価格 -- 個数 -- 餃子三連まん 135 20 肉まん 105 16 明太じゃがバターまん 130 14 特製豚まん 150 11 ピザまん 105 10 あんまん 105 2 e. 導き出された結果の考察 最初プログラムを起動させた時にエラーばかりでたのだが、悩み続けた結果、 |prim,sorted| tyuuka[prim][2] <=> tyuuka[sorted][2] とした結果、指定した個数の所をしっかりと実行になった。数字入力が不足だっ たことが理解できた。中華まんの売れ筋の高い通り表示された。 f. 参考文献 西村まどか先生のHP "http://roy/~madoka/2007/r2/02/02-08-sort-hash.html" "http://roy/~madoka/2007/r1/05/05-11-form1.html" より ●hash-each.rb のプログラム● a. 考えた設定 ある一日の中華まんの売上げ個数を設定して、その売り上げた個数の総カロリー を求められるように設定しました。 b. 作成したプログラムコードそのもの #!/usr/koeki/bin/ruby $KCODE = 'e' #数字表記させるため "e" を指定する tyuuka = Hash.new # Hash 配列を tyuuka tyuuka["肉まん"] = 105,238,16,"牛肉" #値段、カロリー、適当な個数、肉の種類。 tyuuka["ピザまん"] = 105,230,10,"とり肉" tyuuka["あんまん"] = 105,254,2,"未使用" tyuuka["明太じゃがバターまん"] = 130,195,14,"とり肉" tyuuka["餃子三連まん"] = 135,185,20,"豚肉" tyuuka["特製豚まん"] = 150,286,11,"豚肉" #p tyuuka print("中華まんの総カロリー!!\n") for kcal, kosuu in tyuuka #for文でhashの対を繰り返し呼ぶ。 total = kosuu[1] * kosuu[2] #valueの配列の[1]と[2]を呼び出して計算させる。 printf("%-24s\t%10d[kg]\n", kcal, total) #綺麗に表示させる。 end c. もとにしたプログラムからの変更点 授業で学んだ "key を叩いて value の一部を取り出すには" のfor文をもとにし た。 変更した点……配列の名前をkosuuに変更した。 カロリーと個数をかけ合わせるような計算式に変更した。 文字を綺麗に表示させるために数字"-24"の左詰めを入れた。 d. プログラムを実行した結果画面 irsv{c106048}% ./hash-each.rb [~/Ruby] 中華まんの総カロリー!! 明太じゃがバターまん 2730[kg] ピザまん 2300[kg] 餃子三連まん 3700[kg] あんまん 508[kg] 特製豚まん 3146[kg] 肉まん 3808[kg] ○確かめ○ irsv{c106048}% bc -l [~/Ruby] 238*16 3808 230*10 2300 254*2 508 195*14 2730 185*20 3700 286*11 3146 計算した結果プログラムは正常に起動したとわかった。 e. 導き出された結果の考察 指定した個数の総カロリーを表示させることに成功した。valueの個数の[1][2] を呼び出して計算させることができた。かけ算を使用したことにより、カロリー と個数の計算が上手くいった。 f. 参考文献 西村まどか先生の後期基礎プログラミングIIのHP "http://roy/~madoka/2007/r2/03/03-05-for-hash-array.html" より。 3. 感想 今回の講義ではfor文やeachを学び、hashにどんどんプラスされたことを学びま した。Array.newを忘れていたので、前期の行先検索案内の表示文の講義内容を 見直し、プログラムを作成しました。忘れていることが多いのでこれから思い出 して活用していきたいと思います。配列だけでなく "hash" でも計算させるプロ グラムを作成することができると学びました。