第3回 基礎プログラミング II レポート課題 氏名: xxxxxxxx 学籍番号:c109xxx コース(系):環境サイエンス 1、筆記問題 ================================================================= A、 私の名前は小松由里なので、アルファベットになおすと、komatsu turi になるの で、ASCIIコードになおすと、 k = 0x6b o = 0x6f m = 0x6d a = 0x61 t = 0x74 s = 0x73 u = 0x75 y = 0x79 u = 0x75 r = 0x72 i = 0x69 となり、 16進数を10進数になおすには、16をかけていく。 また、16進数で表示されているので、10進数表で確認しながら10進数になおした。 0x6b = 6 * 16 + 11 * 16 = 176 0x6f = 6 * 16 + 15 * 16 = 336 0x6d = 6 * 16 + 13 * 16 = 304 0x61 = 6 * 16 + 1 * 16 = 112 0x74 = 7 * 16 + 4 * 16 = 176 0x73 = 7 * 16 + 3 * 16 = 160 0x75 = 7 * 16 + 5 * 16 = 192 0x79 = 7 * 16 + 9 * 16 = 256 0x75 = 7 * 16 + 5 * 16 = 192 0x72 = 7 * 16 + 2 * 16 = 144 0x69 = 6 * 16 + 9 * 16 = 240 上記の結果となった。 よって、10進数になおすと以下のようになる。 k = 0d176 o = 0d336 m = 0d304 a = 0d112 t = 0d176 s = 0d160 u = 0d192 y = 0d256 u = 0d192 r = 0d144 i = 0d240 ============================================================================= B、 "かにくわれる" か に くわれる 「蚊に食われる」 かに くわれる 「蟹、食われる」 かにく われる 「果肉、割れる」 ============================================================================== C、 食べ物の名前を hash 配列 foodとしました。 Food の key と value はそれぞれの国名と、その国名から発想される食べ物、 国土面積[平方キロメートル]、人口[人]にしました。 1:key「日本」に対して value は「お寿司,377914,127288419」 2:key「イタリア」に対して value は「ピザ,301230,59870000」 3:key「インド」に対して value は「カレー,3287590,1198003000」 4:key「メキシコ」に対して value は「トルティーヤ,1972550,109610000」 5:key「イギリス」に対して value は「サンドイッチ,244820,61565000」 これに対するHashの表し方はこのようになります。 food["日本"] = "お寿司",377914,127288419 food["イタリア"] = "ピザ",301230,59870000 food["インド"] = "カレー",3287590,1198003000 food["メキシコ"] = "トルティーヤ",1972550,109610000 food["イギリス"] = "サンドイッチ",244820,61565000 2つめの表し方はこのようになります。 {"日本"=>"お寿司",377914,127288419, "イタリア"=>"ピザ",301230,59870000, "インド"=>"カレー",3287590,1198003000, "メキシコ”=>"トルティーヤ" ,1972550,109610000 "イギリス"=>"サンドイッチ",244820,61565000 } 2、プログラム問題 ============================================================= A、 a、考えた設定 事前に登録してある対のデータを表示させるプログラム。 b、作成したプログラム(hash_ary_print.rb) #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語コードEUCで入力する。 food = Hash.new # Hash 配列を food とする。 food["日本"] = "お寿司",377914,127288419 food["イタリア"] = "ピザ",301230,59870000 food["インド"] = "カレー",3287590,1198003000 food["メキシコ"] = "トルティーヤ",1972550,109610000 food["イギリス"] = "サンドイッチ",244820,61565000 for name ,kuni in food # for キー名、値 in hash配列名 printf("%s から発想される食べ物は %s です。国土は %d [平方キロメートル]で、人口は %d [人]です。\n\n",name, kuni[0],kuni[1],kuni[2]) # 行なう操作 end # for 終わり c、もとにしたプログラム 前回の課題で作成したプログラム hash_for.rb を参考にしました。 value のデータ数と、printf文を増やしました。 printf文が長いので、" \n\n " で改行させ、見やすくしました。 d、実行結果 pan{c109067}% ./hash_ary_print.rb [~/Ruby] イギリス から発想される食べ物は サンドイッチ です。国土は 244820 [平方キロメートル]で、人口は 61565000 [人]です。 インド から発想される食べ物は カレー です。国土は 3287590 [平方キロメートル]で、人口は 1198003000 [人]です。 イタリア から発想される食べ物は ピザ です。国土は 301230 [平方キロメートル]で、人口は 59870000 [人]です。 日本 から発想される食べ物は お寿司 です。国土は 377914 [平方キロメートル]で、人口は 127288419 [人]です。 メキシコ から発想される食べ物は トルティーヤ です。国土は 1972550 [平方キロメートル]で、人口は 109610000 [人]です。 e、考察 事前に登録してある対のデータが、printf文の通りに表示された。また、改行も きちんと行われているため、このプログラムは正しいといえる。 f、参考文献 最後に記載 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ B、 a、考えた設定 事前に登録されているデータの値を並び変えて表示させるプログラム。 b、作成したプログラム(hash_ary_sort.rb) #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語コードEUCで入力する。 food = Hash.new # Hash 配列を food とする。 food["日本"] = "お寿司",377914,127288419 food["イタリア"] = "ピザ",301230,59870000 food["インド"] = "カレー",3287590,1198003000 food["メキシコ"] = "トルティーヤ",1972550,109610000 food["イギリス"] = "サンドイッチ",244820,61565000 print("各国の国土面積を表示させます。\n") print("国土面積の少ない順に並び変えると…\n") # printf文 print("\n") food.keys.sort{|ooi,sukunai| food[ooi][1]<=>food[sukunai][1] }.each{|kokudo| # 配列.sort{ # |配列の要素を代入する変数 , 並べ替え後の配列要素を代入する内部変数| # 並べ替え前の個所[key変数][要素番号] <=> 並べ替え後の個所[key変数][要素番号] printf("%s の国土面積は %d 平方キロメートルです。\n",kokudo,food[kokudo][1]) } c、もとにしたプログラム プログラム hash_ary_sesame.rb を参考にしました。 配列名・変数・内部変数・key変数・要素番号・printf文を変更しました。 d、実行結果 pan{c109067}% ./hash_ary_sort.rb [~/Ruby] 各国の国土面積を表示させます。 国土面積の少ない順に並び変えると… イギリス の国土面積は 244820 平方キロメートルです。 イタリア の国土面積は 301230 平方キロメートルです。 日本 の国土面積は 377914 平方キロメートルです。 メキシコ の国土面積は 1972550 平方キロメートルです。 インド の国土面積は 3287590 平方キロメートルです。 e、考察 データの通りに数値が表示された。 プログラムを確認するために、print文・printf文と、要素番号を[1]から[2]に 変更してプログラムを新に作成し、実行してみた。 プログラム(hash_ary_sort2.rb) #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語コードEUCで入力する。 food = Hash.new # Hash 配列を food とする。 food["日本"] = "お寿司",377914,127288419 food["イタリア"] = "ピザ",301230,59870000 food["インド"] = "カレー",3287590,1198003000 food["メキシコ"] = "トルティーヤ",1972550,109610000 food["イギリス"] = "サンドイッチ",244820,61565000 print("各国の人口を表示させます。\n") print("人口の少ない順に並び変えると…\n") # printf文 print("\n") food.keys.sort{|ooi,sukunai| food[ooi][2]<=>food[sukunai][2] }.each{|jinkou| # 配列.sort{ # |配列の要素を代入する変数 , 並べ替え後の配列要素を代入する内部変数| # 並べ替え前の個所[key変数][要素番号] <=> 並べ替え後の個所[key変数][要素番号] printf("%s の人口は %d 人です。\n",jinkou,food[jinkou][2]) } 実行結果 pan{c109067}% ./hash_ary_sort.rb [~/Ruby] 各国の人口を表示させます。 人口の少ない順に並び変えると… イタリア の人口は 59870000 人です。 イギリス の人口は 61565000 人です。 メキシコ の人口は 109610000 人です。 日本 の人口は 127288419 人です。 インド の人口は 1198003000 人です。 と、上記のような数値になった。変数[0]は食べ物、変数[1]は人口、変数[2]は国 土のデータを表示させるはずなので、もとのデータを確認すると、きちんと人口 数の数値が表示されていたので、このプログラムは正しく実行されているとい える。 f、参考文献 最後に記載 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C、 a、考えた設定 数値の入った配列成分(国土面積・人口)の値を使用して、各国の人口密度を表示 させるプログラム。 b、作成したプログラム(hash_ary_calc.rb) #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語コードEUCで入力する。 food = Hash.new # Hash 配列を food とする。 food["日本"] = "お寿司",377914,127288419 food["イタリア"] = "ピザ",301230,59870000 food["インド"] = "カレー",3287590,1198003000 food["メキシコ"] = "トルティーヤ",1972550,109610000 food["イギリス"] = "サンドイッチ",244820,61565000 for name ,kuni in food # for キー名、値 in hash配列名 printf("%s から発想される食べ物は %s です。国土は %d [平方キロメートル]で、人口は %d [人]です。\n\n",name, kuni[0],kuni[1],kuni[2]) # 行なう操作 end # for 終わり print("続いて、各国の人口密度を表示させます。\n") print("\n") for name, kuni in food jm = kuni[2].to_f / kuni[1].to_f # 人口密度 # 人口密度 = 人口 / 国土面積 # 少数で値を表示させるために to_f をする。 printf("%s の人口密度は %0.2f 人 となります。\n", name,jm ) # 0.2f で小数点第二まで表示させる。 end # for 終わり c、もとにしたプログラム プログラム hash_sesame.rb ・ hash_ary_print.rb_を参考にしました。 変数名・要素番号・printf文を変更し、to_f 、%0.2f を付け加えました。 d、実行結果 pan{c109067}% ./hash_ary_calc.rb [~/Ruby] イギリス から発想される食べ物は サンドイッチ です。国土は 244820 [平方キロメートル]で、人口は 61565000 [人]です。 インド から発想される食べ物は カレー です。国土は 3287590 [平方キロメートル]で、人口は 1198003000 [人]です。 イタリア から発想される食べ物は ピザ です。国土は 301230 [平方キロメートル]で、人口は 59870000 [人]です。 日本 から発想される食べ物は お寿司 です。国土は 377914 [平方キロメートル]で、人口は 127288419 [人]です。 メキシコ から発想される食べ物は トルティーヤ です。国土は 1972550 [平方キロメートル]で、人口は 109610000 [人]です。 続いて、各国の人口密度を表示させます。 イギリス の人口密度は 251.47 人 となります。 インド の人口密度は 364.40 人 となります。 イタリア の人口密度は 198.75 人 となります。 日本 の人口密度は 336.82 人 となります。 メキシコ の人口密度は 55.57 人 となります。 e、考察 人口密度の計算が正しいのか、 bc -l で計算して確かめた。 pan{c109067}% bc -l [~/Ruby] 61565000/244820 251.47046809901151866677 1198003000/3287590 364.40158292244470873801 59870000/301230 198.75178435082827075656 127288419/377914 336.81847986578957117227 109610000/1972550 55.56766621885376796532 結果、計算は正しかった。また、小数点第二まで表示されているので、このプロ グラムは正しいといえる。 f、参考文献 最後に記載 3、感想 ===================================================================== 何度も繰り返す文章で進むような物語は「かちかち山」「花さかじいさん」が挙げ られると思う。 「かちかち山」 タヌキ 畑を荒らす - 老人に捕まる 老婆を騙し、杵で襲う - 老婆に怪我を負わせる 老夫婦がウサギに相談する - ウサギはタヌキ成敗に向かう ウサギは親しげにタヌキに近づく - 金儲けを口実に柴刈りに誘う ウサギはタヌキの後を歩く - タヌキの薪に火を付ける ウサギはタヌキの見舞いに行く - 薬だと称して芥子をタヌキに渡す タヌキは薬を塗り、苦しむ - ウサギを疑わない タヌキの火傷が治る - タヌキの食い意地を利用して漁に誘う 木の船と大きな泥の船を用意する - タヌキを泥の船に乗せる 沖で泥の船が沈む - タヌキはウサギに助けを求める ウサギは艪でタヌキを沈める - 老婆の仇を討った 「花さかじいさん」 老夫婦は犬をかわいがる - 犬はここ掘れワンワンと鳴く 老人 鍬で畑を掘る - 金貨が出てくる 老夫婦は近所にも振る舞う - 隣人夫婦が妬む 隣人夫婦 犬を連れ去る - 財宝を探させようとする 犬がここ掘れワンワンと鳴く - ガラクタが出てくる 隣人夫婦は犬を殺す - 飼い主夫婦に悪態をつく 夫婦は死んだ犬を引き取り墓に埋める - 墓の傍らに木を植えた 木は大木になる - 犬が夢に現れ、大木で臼を作るようにいう 夫婦は臼を作る - 餠をつくと財宝が出てきた 隣人夫婦は臼を借りる - 餠をつくとガラクタが出てきた 激怒した隣人夫婦は、斧で臼を打ち割る - 薪にして燃やす 夫婦は灰を返してもらって大事に供養しようとする - 犬が夢で桜の枯れ木に灰 を撒いてほしいと頼む 花が満開になる - 大名がたまたま通りがかる 大名が感動する - 老人をほめて褒美を与える 隣人夫婦がまねをする - 大名の目に灰が入る 悪辣な隣人は無礼をとがめられる - 罰を受ける 感想 今回の課題では、授業中で学んだことをあまり理解出来ていなかったので、少し 不安な部分もあったが、実際にプログラムを作成していくと、分からなかったプ ログラムの内容が少しだが理解しながら作成することができたと思う。 もっとプログラムの内容が理解できるように、見直しもしながら、授業に取り組 んで頑張っていきたい。 参考文献 ==================================================================== 西村 まどか 基礎プログラミング I 第5回 配列の構造 http://roy/~madoka/2010/r1/05/ 「ASCII コード表」 http://roy/~madoka/2010/r1/05/05_01_theme_01_asciicode.html 基礎プログラミング I 第4回 プログラミングの方法 http://roy/~madoka/2010/r1/04/ 「16 進数のまとめ」 http://roy/~madoka/2010/r1/04/04_13_appendix_03_hexdecimal.html ウィキペディア フリー百科辞典 ぎなた読み http://ja.wikipedia.org/wiki/%E3%81%8E%E3%81%AA%E3%81%9F%E8%AA%AD%E3%81%BF 日本 http://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC イタリア http://ja.wikipedia.org/wiki/%E3%82%A4%E3%82%BF%E3%83%AA%E3%82%A2 インド http://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%83%89 メキシコ http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%AD%E3%82%B7%E3%82%B3 イギリス http://ja.wikipedia.org/wiki/%E3%82%A4%E3%82%AE%E3%83%AA%E3%82%B9 かちかち山 http://ja.wikipedia.org/wiki/%E3%81%8B%E3%81%A1%E3%81%8B%E3%81%A1%E5%B1%B1 花さかじいさん http://ja.wikipedia.org/wiki/%E8%8A%B1%E3%81%95%E3%81%8B%E3%81%98%E3%81%84%E3%81%95%E3%82%93