第3回 情報の構造を分析しよう レポート課題 氏名:小川まどか 学籍番号:C1100420 語学クラス:英語2 コース:社会福祉コース 1.筆記問題 A.Ogawa Madoka ASCJIIコードになおすと、 O = 0x4f g = 0x67 a = 0x61 w = 0x77 a = 0x61 M = 0x4d a = 0x61 d = 0x64 o = 0x6f k = 0x6b a = 0x61 B."ねえちゃんとかいものにいった" ねえちゃんと かいものにいった (姉ちゃんと買い物に行った) ねえ ちゃんと かいものにいった (ねえ ちゃんと買い物に行った?) "きょういくね" きょう いくね (今日行くね) きょう いくね (京行くね) C.国の特徴を hash 配列 kuni とした。 kuni の key とvalue はそれぞれ国の名前と首都、人口、面積にとった。 その1: key 「中国」に対して valueは 「北京,545,9596961」 その2: key 「インド」に対して valueは 「ニューデリー,372,3287263」 その3: key 「アメリカ合衆国」に対して valueは 「ワシントン,158,9161923」 その4: key 「ロシア」に対して valueは 「モスクワ,103,17075200」 その5: key 「日本」に対して valueは 「東京,81,377944」 これに対する Hash の表し方は、 kuni["中国"] = ["北京",545,9596961] kuni["インド"] = ["ニューデリー",372,3287263] kuni["アメリカ合衆国"] = ["ワシントン",158,9161923] kuni["ロシア"] = ["モスクワ",103,17075200] kuni["日本"] = ["東京",81,377944] また、もう一つの表し方は、 {"中国" => "北京",545,9596961, "インド" => "ニューデリー",372,3287263, "アメリカ合衆国" => "ワシントン",158,9161923, "ロシア" => "モスクワ",103,17075200, "日本" => "東京",81,377944, } 2.プログラム問題 A i.考えた設定 事前に登録してある対のデータを表示させるプログラム hash_ary_print.rb を 作成した。 ii.作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 文字コードの設定 kuni = Hash.new # Hash 配列をhanaとする kuni["中国"] = ["北京",545,9596961] kuni["インド"] = ["ニューデリー",372,3287263] kuni["アメリカ合衆国"] = ["ワシントン",158,9161923] kuni["ロシア"] = ["モスクワ",103,17075200] kuni["日本"] = ["東京",81,377944] for shuto in kuni.keys # すべての Hash の対を表示させる printf("「%s」の首都:「%s」 人口:「%d万人」 面積:「%d平方キロメートル」\n", shuto,kuni[shuto][0], kuni[shuto][1], kuni[shuto][2]) end # forを終了する iii.もとにしたプログラムからの変更点 前回の課題で作成したプログラム hash_for.rb をもとにした。 前回と違う5つの対を考えたのでhashと変数を変えた。 iv.プログラムを実行した結果画面 pan{c110042}% ./hash_ary_print.rb [~/Ruby] 「ロシア」の首都:「モスクワ」 人口:「103万人」 面積:「17075200平方キロメートル」 「インド」の首都:「ニューデリー」 人口:「372万人」 面積:「3287263平方キロメートル」 「日本」の首都:「東京」 人口:「81万人」 面積:「377944平方キロメートル」 「アメリカ合衆国」の首都:「ワシントン」 人口:「158万人」 面積:「9161923平方キロメートル」 「中国」の首都:「北京」 人口:「545万人」 面積:「9596961平方キロメートル」 v.導き出された結果の考察 プログラムに登録してあるデータが間違いなく表示されたので、このプログラム は正しいと言える。 B i.考えた設定 Aで作成したプログラムを人口の少ない順に並び替えるプログラム hash_ary_sort.rb を 作成した。 ii.作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 文字コードの設定 kuni = Hash.new # Hash 配列をhanaとする kuni["中国"] = ["北京",545,9596961] kuni["インド"] = ["ニューデリー",372,3287263] kuni["アメリカ合衆国"] = ["ワシントン",158,9161923] kuni["ロシア"] = ["モスクワ",103,17075200] kuni["日本"] = ["東京",81,377944 ] printf("人口の少ない順に並び替えます。\n") kuni.keys.sort{|jinkou,menseki| kuni[jinkou][1] <=> kuni[menseki][1] #[]を入れ替える }.each{|shuto| printf("「%s」の首都:「%s」 人口:「%d万人」 面積:「%d平方キロメートル」\n", shuto, kuni[shuto][0], kuni[shuto][1], kuni[shuto][2]) } iii.もとにしたプログラムからの変更点 hash_ary_print.rb をもとにした。 変数、配列、 key変数を変えた。 iv.プログラムを実行した結果画面 pan{OGAWA Madoka}% ./hash_ary_sort.rb [~/Ruby] 人口の少ない順に並び替えます。 「日本」の首都:「東京」 人口:「81万人」 面積:「377944平方キロメートル」 「ロシア」の首都:「モスクワ」 人口:「103万人」 面積:「17075200平方キロメートル」 「アメリカ合衆国」の首都:「ワシントン」 人口:「158万人」 面積:「9161923平方キロメートル」 「インド」の首都:「ニューデリー」 人口:「372万人」 面積:「3287263平方キロメートル」 「中国」の首都:「北京」 人口:「545万人」 面積:「9596961平方キロメートル」 v.導き出された結果の考察 人口の少ない順に並べ替えると日本、ロシア、アメリカ、インド、中国の順にな る。プログラムを実行してみると、日本、ロシア、アメリカ、インド、中国の人 口の少ない順に並び替えられていたのでこのプログラムは正しいと言える。 C i.考えた設定 Bで作ったプログラムをもとに、人口の合計を計算するプログラムhash_ary_calc.rb を作成した。 ii.作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 文字コードの設定 kuni = Hash.new # Hash 配列をhanaとする kuni["中国"] = ["北京",545,9596961] kuni["インド"] = ["ニューデリー",372,3287263] kuni["アメリカ合衆国"] = ["ワシントン",158,9161923] kuni["ロシア"] = ["モスクワ",103,17075200] kuni["日本"] = ["東京",81,377944] printf("人口の合計を計算します。\n") sum = 0 for shuto in kuni.keys sum += kuni[shuto][1] #人口を足す end # forを終了する printf("人口の合計は%d万人です。\n", sum) iii.もとにしたプログラムからの変更点 hash_ary_sort.rb をもとにした。 sum を使って、合計を計算するようにした。 iv.プログラムを実行した結果画面 pan{OGAWA Madoka}% ./hash_ary_calc.rb [~/Ruby] 人口の合計を計算します。 人口の合計は1259万人です。 v.導き出された結果の考察 pan{OGAWA Madoka}% bc -l [~] 545+372+158+103+81 1259 計算機を使って計算してみると結果が1259になった。 プログラムの実行結果も1259になり、同じ数値になったのでこのプログラムは正 しいと言える。 3.感想 何度も繰り返す文章で物語が進む例として、わらしべ長者があげられる。 むかしむかし、ある若者が、お寺で観音様(かんのんさま)にお願いをしました。 「どうか、お金持ちになれますように」  すると、観音様が言いました。 「ここを出て、始めにつかんだ物が、お前を金持ちにしてくれるだろう」  喜んだ若者は、お寺を出た途端、石につまずいてスッテンと転びました。  そしてそのひょうしに、一本のわらしべ(→イネの穂の芯)をつかみました。 「観音様がおっしゃった、始めにつかんだ物って、これの事かなあ? とても、これで金持ちになるとは思えないが」  若者が首をひねりながら歩いていると、プーンと一匹のアブが飛んできました。  若者はそのアブを捕まえると、持っていたわらしべに結んで遊んでいました。  すると向こうから立派な牛車(ぎっしゃ)がやって来て、中に乗っている子どもが言いました。 「あのアブが、欲しいよう」 「ああ、いいとも」  若者が子どもにアブを結んだわらしべをあげると、家来の者がお礼にミカンを三つくれました。 「わらしべが、ミカンになったな」  また歩いていると、道ばたで女の人が、喉が渇いたと言って苦しんでいます。 「さあ、水の代わりに、このミカンをどうぞ」  女の人はミカンを食べて、元気になりました。  そしてお礼にと、美しい布をくれました。 「今度は、ミカンが布になったな」  若者がその布を持って歩いていると、ウマが倒れて困っている男の人がいました。 「どうしました?」 「ウマが病気で倒れてしまったのです。町に行って布と交換(こうかん)する予定だったのに。今日中に布を手に入れないと、困るのです」 「では、この布とウマを交換してあげましょうか?」  若者が言うと、男の人は大喜びで布を持って帰りました。  若者がウマに水をやったり体をさすったりすると、ウマはたちまち元気になりました。  よく見ると、大変立派なウマです。 「今度は布が、ウマになったな」  そのウマを連れて、また若者が歩いていると、今度は引っ越しをしている家がありました。  そしてそこの主人が、若者の立派なウマを見て言いました。 「急に旅に出る事になってウマが必要なのじゃが、そのウマをわしの家や畑と交換してもらえないかね」  若者は立派な家と広い畑をもらって、大金持ちになりました。  一本のわらしべから大金持ちになったので、みんなはこの若者を『わらしべ長者(ちょうじゃ)』と呼びました。 一本のわらしべ→アブ→ミカン→布→馬→立派な家と畑という風に繰り返すこと によってお金持ちになる様子が書かれていることから、何度も繰り返す文章で物 語が進む例だと考えられる。 今回のレポート課題は、入力ミスが多々あったりして、ktermで実行しても正常 に作動しないことがあった。でもミスすることによって、なぜ間違えたのかなど 原因を考えたりすることができて勉強になった。 4.参考文献 基礎プログラミングI 第5回 配列の構造 (http://roy.e.koeki-u.ac.jp/~madoka/2011/r1/05/) ・ASCII コード表 (http://roy.e.koeki-u.ac.jp/~madoka/2011/r1/05/r1_05_01_theme_01_asciicode.html) 基礎プログラミングII 第3回 情報の構造を分析しよう (http://roy.e.koeki-u.ac.jp/~madoka/2011/r2/03/) 西村まどか先生 統計局ホームページ (http://www.stat.go.jp/index.htm) ・第2章 人口 (http://www.stat.go.jp/data/sekai/02.htm#h2-01) 総務省 世界各国首都一覧表 (http://www.hyou.net/sa/shuto.htm) 福娘童話集 (http://hukumusume.com/douwa/) ・わらしべ長者 (http://hukumusume.com/douwa/pc/jap/01/15.htm)