講評: 考察の部分がよかったです。 ---- 10月17日第3回レポート「Valueが配列のとき」 学籍番号:c106XXXX 氏名:XXXXXXXX 語学クラス:XXXX語XX 系:XXXX系 A、5つの対を考えよ。 (1) ケーキのHash配列を考えました。 key[ケーキ名] value[カロリー、作る時間、何人分、メインの材料] その1 key[スイートポテト] value[161、120、3、さつまいも ] その2 key[ガトーショコラ] value[529、90、6、チョコ] その3 key[はちみつレモンケーキ] value[274、90、6、レモン] その4 key[ケーゼ・タルト] value[341、150、6、クリームチーズ] その5 key[クレープ・オ・ポ厶・アン・シュルプリーズ] value[249、90、8、 りんご] (2) cake = {"スイートポテト" =>161、120、3、さつまいも "ガトーショコラ" =>529、90、6、チョコ "はちみつレモンケーキ" =>274、90、6、レモン "ケーゼ・ タルト" =>341、150、6、クリームチーズ "クレープ・オ・ポ厶・アン・シュル プリーズ" =>249、90、8、りんご} B、自分の名前をASCIIコードで調べる 大文字 小文字 KUDO ANNA kudo anna K → 4B A → 41 k → 6B a → 61 U → 55 N → 4E u → 75 n → 6E D → 44 N → 4E d → 64 n → 6E O → 4F A → 41 o → 6F a → 61 <16進数表示> 大文字 小文字 KUDO ANNA kudo anna K → 0x4B A → 0x41 k → 0x6B a → 0x61 U → 0x55 N → 0x4E u → 0x75 n → 0x6E D → 0x44 N → 0x4E d → 0x64 n → 0x6E O → 0x4F A → 0x41 o → 0x6F a → 0x61 <10進数> 計算方法 大文字のアルファベットの計算 K(0x4B) → 4 * 16**1 + 11 * 16**0 = 64 + 15 = 75 U(0x55) → 5* 16**1 + 5 * 16**0 = 80 + 5 = 85 D(0x44) → 4 * 16**1 + 4 * 16**0 = 64 + 4 = 68 0(0x4F) → 4 * 16**1 + 15 * 16**0 = 64 + 15 = 79 A(0x41) → 4 * 16**1 + 1 * 16**0 = 64 + 1 = 65 N(0x4E) → 4 * 16**1 + 14 * 16**0 = 64 + 15 = 78 小文字でアルファベットの計算 k(0x6B) → 6 * 16**1 + 11 * 16**0 = 96 + 11 = 107 u(0x75) → 7 * 16**1 + 5 * 16**0 = 112 + 5 =117 d(0x64) → 6 * 16**1 + 4 * 16**0 = 96 + 4 = 100 o(0x6F) → 6 * 16**1 + 15 * 16**0 = 96 + 15 = 111 a(0x61) → 6 * 16**1 + 1 * 16**0 = 96 + 1 = 107 n(0x6E) → 6 * 16**1 + 14 * 16**0 = 96 + 14 =110 大文字 小文字 KUDO ANNA kudo anna K → 0d75 A → 0d41 k → 0d107 a → 0d97 U → 0d85 N → 0d78 u → 0d117 n → 0d110 D → 0d68 N → 0d78 d → 0d100 n → 0d110 O → 0d79 A → 0d41 o → 0d111 a → 0d97 ●参照したホームページ● http://roy/~madoka/2007/r1/05/05-03-ascii.html 前期のプログラミング1「ASCIIコード」 http://roy/~madoka/2007/r1/04/04-12-binary2.html 「2進数、16進数変換(2)」 http://roy/~madoka/2007/r2/02/02-02-hash.html 「これはいくら」 2、 ◎ある値について並び替えるプログラム 調理時間と調理名ジャンルがわかるようなプログラム作成。 key[おつまみ] value[タコマヨ炒め、115、10] key[スープ] value[レタスとホタテスープ、49,15] key[ごはん] value[エスニック風カルビ丼、618,20] key[おかず] value[豚肉とザーサイの炒めもの、197,15] key[おかし] value[栗と小豆のパリパリ揚げ、153、20] cook[おつまみ] [タコマヨ炒め、115、10] cook[スープ] [レタスとホタテスープ、49,15] cook[ごはん] [エスニック風カルビ丼、618,20] cook[おかず] [豚肉とザーサイの炒めもの、197,15] cook[おかし] [栗と小豆のパリパリ揚げ、153、20] <プログラム設計> #!/usr/koeki/bin/ruby $KCODE = 'e' #日本語に変換 gohan = Hash.new # Hash配列 while okazu = gets #繰り返し if /(\S+)\s+(\S+)\s+(\d+)\s+(\d+)/ =~ okazu #if文 gohan[$1] = [$2,$3.to_i,$4.to_i] end #if文終わり end #while文終わり print"**お薦めの料理**\n" #ktermで表示される文 #p cook for cook,okazu in gohan #for文 printf(" %-8s は %-8s で %-2d カロリ−で調理時間 %-2d 分で作れます。\n",cook,okazu[0],okazu[1],okazu[2],okazu[3]) end <プログラム作成において工夫した点> お薦めの料理がいっぺんに出でくるのだが、Ktermを起動して結果が出る際に結 果を見ると見ずらいと思い、プリント文にスペースを空けてみたり、%とsの間に 数字を入れてktermの結果を表示する際に見やすいようにプログラム作成をした。 <考察> for文をうまく使えるか、ktermで見る際に見やすくなっているか。 <実行結果> **お薦めの料理** 丼物 は エスニック風カルビ丼 で 618 カロリ−で調理時間 20 分で作れます。 スープ は レタスとホタテスープ で 49 カロリ−で調理時間 15 分で作れます。 和菓子 は 栗と小豆のパリパリ揚げ で 153 カロリ−で調理時間 20 分で作れます。 炒めもの は 豚肉とザーサイの炒めもの で 97 カロリ−で調理時間 15 分で作 れます。 <考察結果> プログラムを作った時はなかなかうまく実行ができなくて何度も直し、for 文をうまく使うようにプログラムを何回も訂正した。 ktermで起動してみたら見やすい表示をすることができた。 ◎数値の入った配列成分を計算するプログラム あるケーキ店の売上げについて計算するプログラム <プログラムデータ> 商品 原価 仕入数 販売額 売上げ個数 いちごのショート 280 20 300 18 チョコレートケーキ 210 10 250 8 エクレア 180 15 220 13 ロールケーキ 525 10 500 9 ミルフィーユ 280 20 300 20 <プログラム設計> $KCODE = 'e' while cake = gets #繰り返し if /(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/ =~ cake sweet[$1] = [$2.to_i, $3.to_i,$4.to_i,$5.to_i] end end print"*利益計算*\n" print("************************************************\n") for amai,cake in sweet siire = cake[0] * cake[1] printf("%-30s仕入額\%20d[円]\n" , amai , siire) #仕入額 uriage = cake[2] * cake[3] printf("%-30s売上げ\%20d[円]\n" , amai , uriage)#売上額 rieki = uriage - siire printf("%-30s利益\%22d[円]\n", amai , rieki) #利益 print("************************************************\n") end sweet.keys.each{ |cake| p cake,sweet[cake] } print("************************************************\n") print("ケーキの値段が高い順\n") sweet.keys.sort{ # Hash配列 |high,low| # key変数、並び変え後のkey変換 sweet[high][0] <=>sweet[low][0] # Hash 配列 }.each{ |amai| printf("%-30s\t%d\n",amai,sweet[amai][0]) } <プログラム作成において工夫した点> 仕入れの計算や売上げを調べたいときなどの計算式では不等号を変えるだけでい ろんな計算をすることが可能にした。 ktermで結果を起動する際に見やすくした。 <考察> データをもとに計算するプログラムを作成することができるのか。 利益や売上げの計算をするのは可能なのか。 値段別に並び替えをすることができるか。 <実行結果> *利益計算* チョコレートケーキ 仕入額 2100[円] チョコレートケーキ 売上げ 2000[円] チョコレートケーキ 利益 -100[円] ************************************************************ ロールケーキ 仕入額 5250[円] ロールケーキ 売上げ 4500[円] ロールケーキ 利益 -750[円] ************************************************************ いちごのショート 仕入額 5600[円] いちごのショート 売上げ 5400[円] いちごのショート 利益 -200[円] ************************************************************* ミルフィーユ 仕入額 5600[円] ミルフィーユ 売上げ 6000[円] ミルフィーユ 利益 400[円] ************************************************************ エクレア 仕入額 2700[円] エクレア 売上げ 2860[円] エクレア 利益 160[円] ************************************************************ "チョコレートケーキ" [210, 10, 250, 8] "ロールケーキ" [525, 10, 500, 9] "いちごのショート" [280, 20, 300, 18] "ミルフィーユ" [280, 20, 300, 20] "エクレア" [180, 15, 220, 13] ************************************************ ケーキの値段が高い順 エクレア 180 チョコレートケーキ 210 いちごのショート 280 ミルフィーユ 280 ロールケーキ 525 <考察結果> データで作った原価や仕入額をもとに計算されていた。 結果を表じる際に見やすい表示をすることや、 ケーキの値段が高い順番に結果が表示することができた。 <手計算> 計算方法 仕入額 原価 * 仕入数 いちごのショート 280 * 20 = 5600 チョコレートケーキ 210 * 10 = 2100 エクレア 180 * 15 = 2700 ロールケーキ 525 * 10 = 5250 ミルフィーユ 280 * 20 = 5600 売上げ額の計算方法 売り値 * 販売個数 = 売上げ - 仕入額 いちごのショート 300 * 18 = 5400 5400 - 5600 = -200 200円赤字 チョコレートケーキ 250 * 8 = 2000 2000 - 2100 = -100 100円赤字 エクレア 220 * 13 = 2860 2860 - 2700 = 160 160円利益 ロールケーキ 500 * 9 = 4500 4500 - 5250 = -750 750円赤字 ミルフィーユ 300 * 20 = 6000 6000 - 5600 =400 400円利益 プログラムの答えと一致した。 ●参照したホームページ● http://roy/~madoka/2007/r2/03/03-06-sort-hash-array-01.html 「valueの1部を使ってデータを入れ替えるには」 http://roy/~madoka/2007/r2/03/03-07-sort-hash-array-02.html 「valueの1部を使ってsortする例」 http://roy/~madoka/2007/r2/03/03-04-value-array.html 「hash配列にしまえるもの」 http://roy/~madoka/2007/r2/03/03-05-for-hash-array.html 「keyを叩いてvalueの1部を取り出すには」 ◎同じプログラムをfor文で作ってみる for文を使うプログラムとは繰り返し条件をだすプログラム操作。 for(式1;条件式;式2) 条件が式の結果がtureの場合の処理 式1 : 基本的にfor文処理の初期設定に用いる 条件式 : ループ継続の条件 式2 : 変数の値を変化させる 条件式の結果がfalseになった時点でfor文の中の処理が終了する。 プログラムを作る際は条件式に当てはまる式を考えないといけないということ がわかる。 実際に作ってみようと思ったが条件式とはどのような式を当てはめるのか式の 作り方をどうすればいいのかわからなかった。 ●参照したホームページ http://members2.jcom.home.ne.jp/take_1118/java27.html for文について 3、感想 今回の授業ではHash配列の応用で並び替えをするプログラムを作成した。今回の 授業中に並び替えをうまくすることが出来なかったのですが、今回の課題で並び 替えをするプログラミングの操作をすることができました。 来週のプログラミングでもいろんな操作を覚えたいです。