第3回 基礎プログラミング II レポート課題 氏名 : xxxxxxxx 学籍番号 : c109xxx 語学クラス : 英語3 コース : 地域共創 1. 筆記問題 A. 私の名前のアルファベット表記は Shun Fujii である。 これを ASCIIコードにしていくと次の通りになる。 S → 0x53 スペース → 0x20 F → 0x46 h → 0x68 u → 0x75 u → 0x75 j → 0x6a n → 0x6e i → 0x69 i → 0x69 16進数を10進数にかえるには16をかけていく。 0x53 = 5 * 16の1乗 + 3 * 16の0乗 = 90 + 3 = 93 よって 0x53 = 0d93 0x68 = 6 * 16の1乗 + 8 * 16の0乗 = 96 + 8 = 104 よって 0x68 = 0d104 0x75 = 7 * 16の1乗 + 5 * 16の0乗 = 112 + 5 = 117 よって 0x75 = 0d117 0x6e = 6 * 16の1乗 + 14 * 16の0乗 = 96 + 14 = 120 よって 0x6e = 0d120 0x20 = 2 * 16の1乗 + 0 * 16の0乗 = 32 + 0 = 32 よって 0x20 = 0d32 0x46 = 4 * 16の1乗 + 6 * 16の0乗 = 64 + 6 = 70 よって 0x46 = 0d70 0x75 = 7 * 16の1乗 + 5 * 16の0乗 = 112 + 5 = 117 よって 0x75 = 0d117 0x6a = 6 * 16の1乗 + 10 * 16の0乗 = 96 + 10 = 106 よって 0x6a = 0d106 0x69 = 6 * 16の1乗 + 9 * 16の0乗 = 96 + 9 = 105 よって 0x69 = 0d105 0x69 = 6 * 16の1乗 + 9 * 16の0乗 = 96 + 9 = 105 よって 0x69 = 0d105 B. "きょうことりをかう"(4例) きょう ことりを かう (今日小鳥を買う) きょう ことりを かう (今日小鳥を飼う) きょうこ とりを かう (京子鳥を買う) きょうこ とりを かう (京子鳥を飼う) C. 野菜の特徴を hash 配列 food にしました。 food の key と value はそれぞれの名前と一般的な色、属性、旬の時期、重 さ(適当)[g]にしました。 その 1: key「トマト」 に対して value は「赤、ナス科ナス属、春と 秋、150」 その 2: key「なす」 に対して value は「紫、ナス科ナス属、夏か ら秋、90」 その 3: key「ねぎ」 に対して value は「緑、ネギ科ネギ属、冬、 55」 その 4: key「にんじん」 に対して value は「オレンジ、セリ科ニンジ ン属、秋から冬、85」 その 5: key「じゃがいも」 に対して value は「茶、ナス科ナス属、秋か ら冬、60」 その 6: key「もやし」 に対して value は「白、属性なし、通年、130」 その 7: key「ほうれんそう」に対して value は「緑、アカザ科、冬、65」 その 8: key「ピーマン」 に対して value は「緑、ナス科トウガラシ属、 夏、70」 その 9: key「パプリカ」 に対して value は「黄、ナス科トウガラシ属、 夏、75」 その 10: key「まいたけ」 に対して value は「茶、サルノコシカケ科マ イタケ属、秋、85」 これに対する Hash の表し方は food["トマト"] = ["赤","ナス科ナス属","春と秋",150] food["なす"] = ["紫","ナス科ナス属","夏から秋",90] food["ねぎ"] = ["緑","ネギ科ネギ属","冬",55] food["にんじん"] = ["オレンジ","セリ科ニンジン属","秋から冬",85] food["じゃがいも"] = ["茶","ナス科ナス属","秋から冬",60] food["もやし"] = ["白","属性なし","通年",130] food["ほうれんそう"] = ["緑","アカザ科","冬",65] food["ピーマン"] = ["緑","ナス科トウガラシ属","夏",70] food["パプリカ"] = ["黄","ナス科トウガラシ属","夏",75] food["まいたけ"] = ["茶","サルノコシカケ科マイタケ属","秋",85] また、もう一つの表し方は {"トマト" => ["赤","ナス科ナス属","春と秋",150] ,"なす" => ["紫","ナ ス科ナス属","夏から秋",90] ,"ねぎ" =>["緑","ネギ科ネギ属","冬",55] , "にんじん" =>["オレンジ","セリ科ニンジン属","秋から冬",85] ,"じゃが いも" => ["茶","ナス科ナス属","秋から冬",60] ,"もやし" => ["白","属性 なし","通年",130] ,"ほうれんそう" => ["緑","アカザ科","冬",65] ,"ピー マン" => ["緑","ナス科トウガラシ属","夏",70] ,"パプリカ" => ["黄"," ナス科トウガラシ属","夏",75] ,"まいたけ" =>["茶","サルノコシカケ科マ イタケ属","秋",85] } となる。 2.プログラム問題 A. a.考えた設定 「野菜の特徴など登録してある対を表示させる」 b.元にしたプログラム 前回のレポート課題の hash_for.rb を参考にした。 変更箇所は value 部分を増やしたことと、iro を koumoku に変更した。 c.プログラム本体 #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語を文字化けしないようにする food = Hash.new # Hash 配列を food にする food["トマト"] = ["赤","ナス科ナス属","春と秋",150] food["なす"] = ["紫","ナス科ナス属","夏から秋",90] food["ねぎ"] = ["緑","ネギ科ネギ属","冬",55] food["にんじん"] = ["オレンジ","セリ科ニンジン属","秋から冬",85] food["じゃがいも"] = ["茶","ナス科ナス属","秋から冬",60] food["もやし"] = ["白","属性なし","通年",130] food["ほうれんそう"] = ["緑","アカザ科","冬",65] food["ピーマン"] = ["緑","ナス科トウガラシ属","夏",70] food["パプリカ"] = ["黄","ナス科トウガラシ属","夏",75] food["まいたけ"] = ["茶","サルノコシカケ科マイタケ属","秋",85] for yasai ,koumoku in food # for キー名、値、in ハッシュ配列 printf(" %sの代表的な色:「%s色」\n %s\n 旬な季節:%s\n 重さ:%d [g]\n", yasai, koumoku[0],koumoku[1],koumoku[2],koumoku[3]) # value の項目を表示させる。 end d.実行結果 pan{c109130}% ./hash_ary_print.rb [~/Ruby] パプリカの代表的な色:「黄色」 ナス科トウガラシ属 旬な季節:夏 重さ:75 [g] トマトの代表的な色:「赤色」 ナス科ナス属 旬な季節:春と秋 重さ:150 [g] まいたけの代表的な色:「茶色」 サルノコシカケ科マイタケ属 旬な季節:秋 重さ:85 [g] ほうれんそうの代表的な色:「緑色」 アカザ科 旬な季節:冬 重さ:65 [g] なすの代表的な色:「紫色」 ナス科ナス属 旬な季節:夏から秋 重さ:90 [g] じゃがいもの代表的な色:「茶色」 ナス科ナス属 旬な季節:秋から冬 重さ:60 [g] にんじんの代表的な色:「オレンジ色」 セリ科ニンジン属 旬な季節:秋から冬 重さ:85 [g] ピーマンの代表的な色:「緑色」 ナス科トウガラシ属 旬な季節:夏 重さ:70 [g] もやしの代表的な色:「白色」 属性なし 旬な季節:通年 重さ:130 [g] ねぎの代表的な色:「緑色」 ネギ科ネギ属 旬な季節:冬 重さ:55 [g] e.考察 はじめに実行したときは printf(" %sの代表的な色:「%s色」\n %s\n 旬な季節:%s\n 重さ:%d [g]\n", yasai, koumoku[0],koumoku[1],koumoku[2],koumoku[3]) の所を文章にして改行文字の \n を入れないで実行した結果、 pan{c109130}% ./hash_ary_print.rb [~/Ruby] パプリカ の代表的な色は「黄 色」で ナス科トウガラシ属 旬な季節は夏 で、 重さは 75 [g]です。 トマト の代表的な色は「赤 色」で ナス科ナス属 旬な季節は春と秋 で、 重さは 150 [g]です。 まいたけ の代表的な色は「茶 色」で サルノコシカケ科マイタケ属 旬な 季節は秋 で、重さは 85 [g]です。 . . . . . というふうになり、とても見にくかった。 だから /n をこまめに入れることで見やすいようにしてみた。 実行してみて正常に作動したのでプログラム自体は正しいといえる。 B. a.考えた設定 「A で作成したプログラムの野菜の重さの軽い順に表示させる」 b.元にしたプログラム Aのプログラムと、授業のときの、hash_sesame.rb を参考にした。 2つのプログラムをくっつけて作成した。変更箇所は、mae を yasaiに、 ushiro を omosa に変えた c.プログラム本体 #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語を文字化けしないようにする food = Hash.new # Hash 配列を food にする food["トマト"] = ["赤","ナス科ナス属","春と秋",150] food["なす"] = ["紫","ナス科ナス属","夏から秋",90] food["ねぎ"] = ["緑","ネギ科ネギ属","冬",55] food["にんじん"] = ["オレンジ","セリ科ニンジン属","秋から冬",85] food["じゃがいも"] = ["茶","ナス科ナス属","秋から冬",60] food["もやし"] = ["白","属性なし","通年",130] food["ほうれんそう"] = ["緑","アカザ科","冬",65] food["ピーマン"] = ["緑","ナス科トウガラシ属","夏",70] food["パプリカ"] = ["黄","ナス科トウガラシ属","夏",75] food["まいたけ"] = ["茶","サルノコシカケ科マイタケ属","秋",85] for yasai ,koumoku in food # for キー名、値、in ハッシュ配列 printf(" %sの代表的な色:「%s色」\n %s\n 旬な季節:%s\n 重さ:%d [g]\n", yasai, koumoku[0],koumoku[1],koumoku[2],koumoku[3]) # value の項目を表示させる。 end print("\n") # 1行改行する food.keys.sort{|yasai,omosa| food[yasai][3] <=> food[omosa][3] # []の部分を入れ替える }.each{|retail| printf("重さが軽い順: %s (%d [g])\n" ,retail,food[retail][3]) } d.実行結果 pan{c109130}% ./hash_ary_sort.rb [~/Ruby] パプリカの代表的な色:「黄色」 ナス科トウガラシ属 旬な季節:夏 重さ:75 [g] トマトの代表的な色:「赤色」 ナス科ナス属 旬な季節:春と秋 重さ:150 [g] まいたけの代表的な色:「茶色」 サルノコシカケ科マイタケ属 旬な季節:秋 重さ:85 [g] ほうれんそうの代表的な色:「緑色」 アカザ科 旬な季節:冬 重さ:65 [g] なすの代表的な色:「紫色」 ナス科ナス属 旬な季節:夏から秋 重さ:90 [g] じゃがいもの代表的な色:「茶色」 ナス科ナス属 旬な季節:秋から冬 重さ:60 [g] にんじんの代表的な色:「オレンジ色」 セリ科ニンジン属 旬な季節:秋から冬 重さ:85 [g] ピーマンの代表的な色:「緑色」 ナス科トウガラシ属 旬な季節:夏 重さ:70 [g] もやしの代表的な色:「白色」 属性なし 旬な季節:通年 重さ:130 [g] ねぎの代表的な色:「緑色」 ネギ科ネギ属 旬な季節:冬 重さ:55 [g] 重さが軽い順: ねぎ (55 [g]) 重さが軽い順: じゃがいも (60 [g]) 重さが軽い順: ほうれんそう (65 [g]) 重さが軽い順: ピーマン (70 [g]) 重さが軽い順: パプリカ (75 [g]) 重さが軽い順: にんじん (85 [g]) 重さが軽い順: まいたけ (85 [g]) 重さが軽い順: なす (90 [g]) 重さが軽い順: もやし (130 [g]) 重さが軽い順: トマト (150 [g]) e.考察 実際に実行してみると、設定した通りに重さが軽い順に表示させることが 出来た。 はじめ、 food[yasai][3] <=> food[omosa][3] の [3] を [4]にしてやっ て作動しなくて困った。[0] から始まることを確認して作動させることが 出来るようになった。 C a.考えた設定 「野菜の重さの合計を出す」 b.元にしたプログラム A と B のプログラムと hash_sesame.rb を参考にした。 c.プログラム本体 #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語を文字化けしないようにする food = Hash.new # Hash 配列を food にする total = 0 food["トマト"] = ["赤","ナス科ナス属","春と秋",150] food["なす"] = ["紫","ナス科ナス属","夏から秋",90] food["ねぎ"] = ["緑","ネギ科ネギ属","冬",55] food["にんじん"] = ["オレンジ","セリ科ニンジン属","秋から冬",85] food["じゃがいも"] = ["茶","ナス科ナス属","秋から冬",60] food["もやし"] = ["白","属性なし","通年",130] food["ほうれんそう"] = ["緑","アカザ科","冬",65] food["ピーマン"] = ["緑","ナス科トウガラシ属","夏",70] food["パプリカ"] = ["黄","ナス科トウガラシ属","夏",75] food["まいたけ"] = ["茶","サルノコシカケ科マイタケ属","秋",85] for yasai ,koumoku in food # for キー名、値、in ハッシュ配列 printf(" %sの代表的な色:「%s色」\n %s\n 旬な季節:%s\n 重 さ:%d[g]\n",」 yasai, koumoku[0],koumoku[1],koumoku[2],koumoku[3]) # value の項目を表示させる。 end print("\n") # 1行改行する food.keys.sort{|yasai,omosa| food[yasai][3] <=> food[omosa][3] # []の部分を入れ替える }.each{|retail| printf("重さが軽い順: %s (%d [g])\n" ,retail,food[retail][3]) } for yasai ,koumoku in food total += koumoku[3] end print("\n") # 1行改行する printf("全ての野菜の重さは %d [g]です。\n",total ) d.実行結果 pan{c109130}% ./hash_ary_calc.rb [~/Ruby] パプリカの代表的な色:「黄色」 ナス科トウガラシ属 旬な季節:夏 重さ:75[g] トマトの代表的な色:「赤色」 ナス科ナス属 旬な季節:春と秋 重さ:150[g] まいたけの代表的な色:「茶色」 サルノコシカケ科マイタケ属 旬な季節:秋 重さ:85[g] ほうれんそうの代表的な色:「緑色」 アカザ科 旬な季節:冬 重さ:65[g] なすの代表的な色:「紫色」 ナス科ナス属 旬な季節:夏から秋 重さ:90[g] じゃがいもの代表的な色:「茶色」 ナス科ナス属 旬な季節:秋から冬 重さ:60[g] にんじんの代表的な色:「オレンジ色」 セリ科ニンジン属 旬な季節:秋から冬 重さ:85[g] ピーマンの代表的な色:「緑色」 ナス科トウガラシ属 旬な季節:夏 重さ:70[g] もやしの代表的な色:「白色」 属性なし 旬な季節:通年 重さ:130[g] ねぎの代表的な色:「緑色」 ネギ科ネギ属 旬な季節:冬 重さ:55[g] 重さが軽い順: ねぎ (55 [g]) 重さが軽い順: じゃがいも (60 [g]) 重さが軽い順: ほうれんそう (65 [g]) 重さが軽い順: ピーマン (70 [g]) 重さが軽い順: パプリカ (75 [g]) 重さが軽い順: にんじん (85 [g]) 重さが軽い順: まいたけ (85 [g]) 重さが軽い順: なす (90 [g]) 重さが軽い順: もやし (130 [g]) 重さが軽い順: トマト (150 [g]) 全ての野菜の重さは 865 [g]です。 e.考察 設定した通りにできたのでプログラム自体は正しいといえる。 最初は total = 0 を入力し忘れて動かなくて苦労した。 最初の値をしっかり設定しないといけないことが分かった。 3.感想 さるかに合戦で同じ文が繰り返される文章があった。 カニ、おにぎりを持っている → サル、柿の種を持っている サル、柿の種を持っている → おにぎりと柿の種を交換する おにぎりと柿の種を交換する → カニ、種をまく カニ、種をまく → 柿が実る 柿が実る → カニ、木に登れない カニ、木に登れない → サルがやって来て木に登る サルがやって来て木に登る → サル、柿食べる サル、柿食べる → カニに向かって青い柿投げる カニに向かって青い柿投げる → カニ、当たる カニ、当たる → サルに仇討をする サルに仇討をする → 見事成功 今回は設定したものがいけなかったせいかプログラム問題をやるにあたっ てかなりやりづらかった。授業でやったことや、以前のレポートの内容を 参考にしていけば前より簡単に作成することが出来るようになったので良 かった。次回からももっと頑張れるようにしていきたい。 4.参考文献等 サルかに合戦 http://hukumusume.com/douwa/i/jap/11/01.htm ◎共同学習者 ・池田博哉