第3回 基礎プログラミング II レポート課題 氏名: xxxxxx 学籍番号:c109xxx 語学クラス:英語3 コース:政策マネ 1、筆記問題 A. 私の名前のアルファベット表記は 「HARUKA SAKAI」 となる。 これを前期第5回「配列の構造」で習ったASCIIコード表を用いて 調べた結果以下のようになった。 S = 0x53 A = 0x41 K = 0x4b A = 0x41 I = 0x49 H = 0x48 A = 0x41 R = 0x52 U = 0x55 K = 0x4b A = 0x41 参考文献 西村まどか先生のHPより http://roy.e.koeki-u.ac.jp/~madoka/2010/r1/05/05_01_theme_01_asciicode.html 「基礎プログラミング I 第5回 配列の構造」 B. 「おれにくいやだ」 おれにくいやだ (折れにくい矢だ) おれ にく いやだ (俺 肉 嫌だ) おれ にくい やだ (俺 憎い やだ) 「これはなんでしたか」 これは なんでしたか (これは何でしたか) これは なんでしたか (これはナンでしたか) これは なんで したか (これは何で下か) 「きょうさいかみにいく」 きょうさ いか みにいく (今日さイカ見に行く) きょうさいか みにいく (恐妻家見に行く) きょう さい かみにいく (今日サイ噛みに行く) C. 岩手県の市町村の特徴をHash配列を city とした。 city の key と value はそれぞれ市町村名と特産品、人口、 面積(平方キロメートル)にとった。 その1:key「盛岡」に対してvalueは「冷麺,298149,886.47」 その2:key「一関」に対してvalueは「亀の子せんべい,119231,1133.10」 その3:key「八幡平」に対してvalueは「ひっつみ汁,28709,862.25」 その4:key「雫石」に対してvalueは「銀河高原ビール,18143,609.01」 その5:key「奥州」に対してvalueは「前沢牛,125359,993.35」 その6:key「平泉」に対してvalueは「弁慶力餠,8379,63.39」 これに対応する Hash配列の表し方は、以下の通りである。 city["盛岡"] = "冷麺",298149,886.47 city["一関"] = "亀の子せんべい",119231,1133.10 city["八幡平"] = "ひっつみ汁",28709,862.25 city["雫石"] = "銀河高原ビール",18143,609.01 city["奥州"] = "前沢牛",125359,993.35 city["平泉"] = "弁慶力餠",8379,63.39 もう一つの表し方は、以下の通りである。 {"盛岡" => "冷麺",298149,886.47 , "一関" => "亀の子せんべい",119231,1133.10 , "八幡平" => "ひっつみ汁",28709,862.25, "雫石" => "銀河高原ビール",125359,993.35 , "奥州 => "前沢牛",125359,993.35 , "平泉" => "弁慶力餠",8379,63.39 } 参考文献 「岩手県公式ホームページ 岩手県各市町村 一覧」 http://www.pref.iwate.jp/view.rbz?cd=3237 2、プログラム問題 A a,プログラムの設定 前回のレポートで使用したデータに人口と面積を増やし、そのデータを表示させ るプログラムを作成した。 b,作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語コードで出力する。 city = Hash.new # Hash 配列 print("☆岩手県の市町村の特産品情報☆\n\n") city["盛岡"] = "冷麺",298149,886 city["一関"] = "亀の子せんべい",119231,1130 city["八幡平"] = "ひっつみ汁",28709,862 city["雫石"] = "銀河高原ビール",18143,609 city["奥州"] = "前沢牛",125359,993 city["平泉"] = "弁慶力餠",8379,63 for name, tokutyou in city printf("[%s]の特産品は%sです。\n人口:%d人\n面積:%d平方キロメートル\n\n", name, tokutyou[0], tokutyou[1], tokutyou[2]) end c,もとにしたプログラムからの変更点 昨年の先輩のレポートと前回のプログラム(hash_for.rb)をもとに作成しました。 それぞれを「市町村名」「特産品」「人口」「面積」に名前を変更。 print文を適したものに変更。 Hash 配列を city に変更。 d,実行画面 pan{c109074}% ./hash_ary_print.rb [~/Ruby] ☆岩手県の市町村の特産品情報☆ [一関]の特産品は亀の子せんべいです。 人口:119231人 面積:1130平方キロメートル [奥州]の特産品は前沢牛です。 人口:125359人 面積:993平方キロメートル [雫石]の特産品は銀河高原ビールです。 人口:18143人 面積:609平方キロメートル [盛岡]の特産品は冷麺です。 人口:298149人 面積:886平方キロメートル [平泉]の特産品は弁慶力餠です。 人口:8379人 面積:63平方キロメートル [八幡平]の特産品はひっつみ汁です。 人口:28709人 面積:862平方キロメートル e,考察 実行画面から分かるように、登録していたものが不足なく表示されていたので、 Hash の対の表示には問題ないと考えられる。よって、このプログラムは正しく 機能したといえる。 f,参考文献 西村まどか先生のHPより http://roy.e.koeki-u.ac.jp/~madoka/2009/r2/03/rpt/c108170.txt 「第3回 レポート講評 先輩のレポート その3」 B a,プログラム設定 Aで作ったプログラムに改良を加え、人口の少ない順に並びかえるプログラムを 作成した。 b,作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語コードで出力する。 city = Hash.new # Hash 配列 print("☆岩手県の市町村の特産品情報☆\n\n") city["盛岡"] = "冷麺",298149,886 city["一関"] = "亀の子せんべい",119231,1130 city["八幡平"] = "ひっつみ汁",28709,862 city["雫石"] = "銀河高原ビール",18143,609 city["奥州"] = "前沢牛",125359,993 city["平泉"] = "弁慶力餠",8379,63 for name, tokutyou in city printf("[%s]の特産品は%sです。\n人口:%d人\n面積:%d平方キロメートル\n\n", name, tokutyou[0], tokutyou[1], tokutyou[2]) end print("人口順<少ない順>\n") city.keys.sort{|name,people| city[name][1] <=> city[people][1] }.each{|retail| printf("%s\t %5d[人]\n", retail, city[retail][1])} # 配列の一部分の並べ替えを行なう。 # Hash.keys.sort{ # |並び替え前の key 変数, 並び替え後の key 変数| # Hash[並び替え前の key 変数][要素番号] <=> # hash 配列[並び替え後の key 変数][要素番号] c,もとにしたプログラムからの変更点 昨年の先輩のレポートとAのプログラム(hash_ary_print.rb)をもとに作成。 print文を適したものに変更。 d,実行画面 pan{c109074}% ./hash_ary_sort.rb [~/Ruby] ☆岩手県の市町村の特産品情報☆ [一関]の特産品は亀の子せんべいです。 人口:119231人 面積:1130平方キロメートル [奥州]の特産品は前沢牛です。 人口:125359人 面積:993平方キロメートル [雫石]の特産品は銀河高原ビールです。 人口:18143人 面積:609平方キロメートル [盛岡]の特産品は冷麺です。 人口:298149人 面積:886平方キロメートル [平泉]の特産品は弁慶力餠です。 人口:8379人 面積:63平方キロメートル [八幡平]の特産品はひっつみ汁です。 人口:28709人 面積:862平方キロメートル 人口順<少ない順> 平泉 8379[人] 雫石 18143[人] 八幡平 28709[人] 一関 119231[人] 奥州 125359[人] 盛岡 298149[人] e,考察 実行画面より正しくデータが表示され、人口を少ない順に並び替えすることがで きた。よって、このプログラムは正しく機能したということが確認できた。 f,参考文献 西村まどか先生のHPより ・http://roy.e.koeki-u.ac.jp/~madoka/2009/r2/03/rpt/c108170.txt 「第3回 レポート講評 先輩のレポート その3」 ・「基礎プログラミング II <第2回 なになにといえばこれこれ> 要素の一部分を使って入れ替えをするには」 http://roy.e.koeki-u.ac.jp/~madoka/2010/r2/02/02_15_theme_14_sorthasharraycomp.html C a,プログラム設定 Aで作ったプログラムに改良を加え、人口密度を計算するプログラムを 作成した。 b,作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語コードで出力する。 city = Hash.new # Hash 配列 print("☆岩手県の市町村の特産品情報☆\n\n") city["盛岡"] = "冷麺",298149,886 city["一関"] = "亀の子せんべい",119231,1130 city["八幡平"] = "ひっつみ汁",28709,862 city["雫石"] = "銀河高原ビール",18143,609 city["奥州"] = "前沢牛",125359,993 city["平泉"] = "弁慶力餠",8379,63 for name, tokutyou in city printf("[%s]の特産品は%sです。\n人口:%d人\n面積:%d平方キロメートル\n\n", name, tokutyou[0], tokutyou[1], tokutyou[2]) end print("人口密度\n") for name, tokutyou in city zinmitsu = tokutyou[1].to_f / tokutyou[2].to_f # 小数点を表示させるための計算 printf("%sの人口密度は%0.2f人/km** \n", name, zinmitsu) # 小数点第2まで表示させるため0.2fとする end c,もとにしたプログラムからの変更点 昨年の先輩のレポートとAのプログラム(hash_ary_print.rb)をもとに作成。 print文を適したものに変更。 人口密度を計算するため計算式を加えた。 d,実行画面 pan{c109074}% ./hash_ary_calc.rb [~/Ruby] ☆岩手県の市町村の特産品情報☆ [一関]の特産品は亀の子せんべいです。 人口:119231人 面積:1130平方キロメートル [奥州]の特産品は前沢牛です。 人口:125359人 面積:993平方キロメートル [雫石]の特産品は銀河高原ビールです。 人口:18143人 面積:609平方キロメートル [盛岡]の特産品は冷麺です。 人口:298149人 面積:886平方キロメートル [平泉]の特産品は弁慶力餠です。 人口:8379人 面積:63平方キロメートル [八幡平]の特産品はひっつみ汁です。 人口:28709人 面積:862平方キロメートル 人口密度 一関の人口密度は105.51人/km** 奥州の人口密度は126.24人/km** 雫石の人口密度は29.79人/km** 盛岡の人口密度は336.51人/km** 平泉の人口密度は133.00人/km** 八幡平の人口密度は33.31人/km** e,考察 実行画面より正しくデータが表示され、人口密度も表示させることができた。 計算が合っているか分からないのでktermで確かめ算を行なった。 pan{c109074}% bc -l [~/Ruby] 119231/1130 105.51415929203539823008 125359/993 126.24269889224572004028 18143/609 29.79146141215106732348 298149/886 336.51128668171557562076 8379/63 133.00000000000000000000 28709/862 33.30510440835266821345 quit 上記より、実行画面の計算結果と比較してみると 正しく計算されていることが確認できた。 f,参考文献 西村まどか先生のHPより ・http://roy.e.koeki-u.ac.jp/~madoka/2009/r2/03/rpt/c108170.txt 「第3回 レポート講評 先輩のレポート その3」 ・「基礎プログラミング II <第2回 なになにといえばこれこれ> value の一部を使ってデータを入れ替えるには」 http://roy.e.koeki-u.ac.jp/~madoka/2010/r2/02/02_13_theme_12_valueasary.html 3、感想 何度も繰り返す文章で物語が進む例が思いつかなかったので、 大きなかぶについて考えた。 大きなかぶは、 次々に手伝いにくることから繰り返す文章が使えると思った。 話の内容↓ 畑にカブが出来ました。 今までに見たことないような、とっても大きな大きなカブです。 おじいさんはカブをひっぱりましたが、カブはぬけません。 おばあさんがやってきました。 おばあさんは、おじいさんと力を合わせてひっぱりましたが、やっぱりカブはぬ けません。 次にまごがやってきました。 おじいさんとおばあさんとまごは、力を合わせてカブをぬこうとしましたが、カ ブはぬけません。 次にイヌがやってきました。 おじいさんとおばあさんとまごとイヌは、力を合わせてカブをぬこうとしました が、カブはぬけません。 次にネコがやってきました。 おじいさんとおばあさんとまごとイヌとネコは、力を合わせてカブをぬこうとし ましたが、カブはぬけません。 次にネズミがやってきました。 おじいさんとおばあさんとまごとイヌとネコとネズミは、力を合わせてカブをぬ こうとしました。 みんなで力いっぱいひっぱりました。 すると、とうとうカブはぬけました。 それは、とってもとっても大きなカブでした。 *参考文献 「福娘童話集 きょうの世界昔話 大きなカブ」 http://hukumusume.com/douwa/pc/world/06/19.html この大きなかぶは ・◯◯◯がやってきました。 ・◯◯◯と◯◯◯、、、は、力を合わせてカブをぬこうとしましたが、やっぱり ぬけません。 など繰り返している文章が多用されていることから、 何度も繰り返す文章で物語が進む例だと考えられる。 今回のレポートは、時間がけっこうかかった。 プログラム問題では比較的早く出来たが、筆記問題でかなり時間がかかってしま いました。 来週はもっと早めに出来るように頑張りたいです。 共同学習者 伊藤 彩 / 佐竹 聡美