第3回 情報の構造を分析しよう レポート課題 氏名:土屋哲平 学籍番号:c1111085 語学クラス:中国語3 コース:政策マネジメント 1.筆記問題 A 自分の名前をアルファベットで表すとtsuchiya teppei となる。これをASCIIコードで表すと Ox74,Ox73,Ox75,Ox63,Ox68,Ox69,Ox79,Ox61 #名字 Ox74,Ox65,Ox70,Ox70,Ox65,Ox69 #名前 と表すことが出来る。 ---参考文献--- webサイト http://roy/~naoya/ruby/9.html 神田直弥 基礎プログラミングI 16進数・ASCIIコード B "あるみかんのうえにあるみかん" あるみかん の うえに ある みかん(アルミカンの上に有る蜜柑) あるみかん の うえに あるみかん (アルミカンの上にアルミカン) ある みかん の うえに ある みかん(ある蜜柑の上に有る蜜柑) "おいてかれていく" おいてかれていく(置いてかれていく) おいて かれていく(老いて枯れていく) "ねこのぱんつくった" ね この ぱん つくった(ね この パン 作った) ねこ の ぱん つくった(猫 の パン 作った) ね こ のぱんつ くった(ね、このパンツ 食った?) ねこ の ぱんつ くった(猫 の パンツ 食った) C プロ野球選手の情報をhash配列baseballとした。 baseballのkeyとvalueは選手名に対して 球団、背番号、ポジション、年齢をとった。 1.key「阿部愼之介」に対してvalue["巨人","10","捕手","33"] 2.key「浅尾拓也」に対してvalue["中日","41","投手","28"] 3.key「宮本慎也」に対してvalue["ヤクルト","6","遊撃手","41"] 4.key「堂林翔太」に対してvalue["広島","21","三塁手","13"] 5.key「藤川球児」に対してvalue["阪神","22","投手","32"] 6.key「渡辺直人」に対してvalue["横浜","2","二塁手","31"] これらをhash配列で表すと baseball["阿部愼之介"] = "巨人",10,"捕手",33 baseball["浅尾拓也"] = "中日",41,"投手",28 baseball["宮本慎也"] = "ヤクルト",6,"遊撃手",41 baseball["堂林翔太"] = "広島",13,"三塁手",21 baseball["藤川球児"] = "阪神",22,"投手",32 baseball["渡辺直人"] = "横浜",2,"二塁手",31 もう1つの方法で表すと {"阿部愼之介"=>"巨人",10,"捕手",33 "浅尾拓也"=>"中日",41,"投手",28 "宮本慎也"=>"ヤクルト",6,"遊撃手",41 "堂林翔太"=>"広島",13,"三塁手",21 "藤川球児"=>"阪神",22,"投手",32 "渡辺直人"=>"横浜",2,"二塁手",31} となる。 2.プログラム問題 A a.考えた設定 プロ野球セ・リーグの各球団の選手の名前、所属球団、背番号、ポジション、年 齢を表示するプログラムを作成した。 b.作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp baseball = Hash.new #変数をbaseballとし、Hashを使う print("☆セ・リーグの選手情報☆\n\n") baseball["阿部愼之介"] = "巨人",10,"捕手",33 baseball["浅尾拓也"] = "中日",41,"投手",28 baseball["宮本慎也"] = "ヤクルト",6,"遊撃手",41 baseball["堂林翔太"] = "広島",21,"三塁手",13 baseball["藤川球児"] = "阪神",22,"投手",32 baseball["渡辺直人"] = "横浜",2,"二塁手",31 for date in baseball.keys #for キー名 in ハッシュ配列 printf("%s\tは%s所属の選手。背番号[%d]、ポジション[%s]、年齢%d歳。\n", date,baseball[date][0],baseball[date][1],baseball[date][2], baseball[date][3]) #ハッシュ配列の[0]番目から[3]番目まで表示する end c.もとにしたプログラムからの変更点 前回の講義で作成したhash_for.rbを参考にプログラムを作成した。 野球に関するプログラムを作成したのでHash配列をbaseballに、 配列の要素を球団、背番号、ポジション、年齢に変更した。 d.実行画面 pan{c111108}% ./hash_ary_print.rb [~/Ruby] ---セ・リーグの選手情報--- 阿部愼之介 は巨人所属の選手。背番号[10]、ポジション[捕手]、年齢33歳。 浅尾拓也 は中日所属の選手。背番号[41]、ポジション[投手]、年齢28歳。 宮本慎也 はヤクルト所属の選手。背番号[6]、ポジション[遊撃手]、年齢41歳。 堂林翔太 は広島所属の選手。背番号[21]、ポジション[三塁手]、年齢13歳。 藤川球児 は阪神所属の選手。背番号[22]、ポジション[投手]、年齢32歳。 渡辺直人 は横浜所属の選手。背番号[2]、ポジション[二塁手]、年齢31歳。 e.考察 作成したプログラムと同じように各選手とも対が正しく表示された。 なのでこのプログラムは正しく動作したと言える。 f.参考文献 webサイトhttp://roy/~madoka/2012/r2/03/r2_03_02_review_02_hash.html 西村まどか 2012年度基礎プログラミングII 講義ノート 情報の構造を分析しよう 「Hashの作りかた」 B a.考えた設定 前問で作成したプロ野球選手のデータに関するプログラムの年齢の部分に着目し、 年齢の若い選手順に並べ替えるプログラムを作成した。 b.作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp baseball = Hash.new #変数をbaseballとし、Hashを使う baseball["阿部愼之介"] = "巨人",10,"捕手",33 baseball["浅尾拓也"] = "中日",41,"投手",28 baseball["宮本慎也"] = "ヤクルト",6,"遊撃手",41 baseball["堂林翔太"] = "広島",13,"三塁手",21 baseball["藤川球児"] = "阪神",22,"投手",32 baseball["渡辺直人"] = "横浜",2,"二塁手",31 for date in baseball.keys printf("%s\tは%s所属の選手\t背番号[%d] ポジション[%s] 年齢 %d歳\n", date,baseball[date][0],baseball[date][1],baseball[date][2], baseball[date][3]) #valueの[0]番目から[3]番目まで表示する end print("\n") print("選手を若い順に並べます\n") print("\n") baseball.keys.sort{|yang,old| baseball[yang][3]<=>baseball[old][3] }.each{|date| #sortoで並び変えを行う。並び変えるのは4番目のvalue #eachでvalueを1つずつ取り出す。 printf("%sの%s選手は%d歳です\n",baseball[date][0],date,baseball[date][3]) } c.もとにしたプログラムからの変更点 前問で作成したプログラムHash_ary_print.rbと前回の講義で使用した Hash_sesame.rbを参考にプログラムを作成した。 Hash_sesame.rbで使用した並び変えにeachを加え、年齢の若い順に 並べ替える部分を作った。 d.実行画面 pan{c111108}% ./hash_ary_sort.rb [~/Ruby] ---セ・リーグの選手情報--- 阿部愼之介 は巨人所属の選手 背番号[10] ポジション[捕手] 年齢 33歳 浅尾拓也 は中日所属の選手 背番号[41] ポジション[投手] 年齢 28歳 宮本慎也 はヤクルト所属の選手 背番号[6] ポジション[遊撃手] 年齢 41歳 堂林翔太 は広島所属の選手 背番号[13] ポジション[三塁手] 年齢 21歳 藤川球児 は阪神所属の選手 背番号[22] ポジション[投手] 年齢 32歳 渡辺直人 は横浜所属の選手 背番号[2] ポジション[二塁手] 年齢 31歳 ---選手を若い順に並べます--- 広島の堂林翔太選手は21歳です 中日の浅尾拓也選手は28歳です 横浜の渡辺直人選手は31歳です 阪神の藤川球児選手は32歳です 巨人の阿部愼之介選手は33歳です ヤクルトの宮本慎也選手は41歳です e.考察 sortで[3]に入っている年齢を若い順に並び替え、eachで1つずつ切り出して 表示するのがこのプログラムの目的であった。 実行した結果、プログラムで指定した通り、年齢の若い順に表示することができた。 なのでこのプログラムは正しく動作したといえる。 f.参考文献 webサイト http://roy/~madoka/2012/r2/03/r2_03_04_review_04_each.html 西村まどか 2012年度 基礎プログラミングII 講義ノート 第3回 情報の構造を分析しよう 「一つずつ取り出すには / 並べ替えを詳しく行うには」 webサイト http://roy/~madoka/2012/r2/03/r2_03_05_review_05_valueasary.html 西村まどか 2012年度 基礎プログラミングII 講義ノート 第3回 情報の構造を分析しよう 「Valueに配列が入る場合の処理」 C a.考えた設定 前問で作成したプログラムに、選手の年齢の合計する部分と年齢の平均を 計算する部分を加えたプログラムを作成した。 b.作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp baseball = Hash.new #変数をbaseballとし、Hashを使う print("---セ・リーグの選手情報---\n\n") baseball["阿部愼之介"] = "巨人",10,"捕手",33 baseball["浅尾拓也"] = "中日",41,"投手",28 baseball["宮本慎也"] = "ヤクルト",6,"遊撃手",41 baseball["堂林翔太"] = "広島",13,"三塁手",21 baseball["藤川球児"] = "阪神",22,"投手",32 baseball["渡辺直人"] = "横浜",2,"二塁手",31 for date in baseball.keys printf("%s選手は%s所属の選手\t背番号[%d] ポジション[%s] 年齢 %d歳\n", date,baseball[date][0],baseball[date][1],baseball[date][2], baseball[date][3]) #valueの[0]番目から[3]番目まで表示する end print("\n") print("---選手を若い順に並べます---\n") print("\n") baseball.keys.sort{|yang,old| baseball[yang][3]<=>baseball[old][3] }.each{|date| #sortoで並び変えを行う。並び変えるのは4番目のvalue #eachでvalueを1つずつ取り出す。 printf("%sの%s選手は%d歳です\n",baseball[date][0],date,baseball[date][3]) } print("\n") print("---選手の年齢を合計し、平均年齢を求めます---\n") total = 0 #合計の初期値は0 heikin = 0 #平均の初期値は0 #p baseball.length for date in baseball.keys #for キー名 in ハッシュ配列 total += baseball[date][3] #合計は4番目の年齢の部分を全て足した数 heikin = total / baseball.length #平均は合計を人数で割った数 end printf("全選手の年齢を合計すると%d歳になります\n",total) printf("年齢を平均すると%2.1f歳です\n",heikin) c.もとにしたプログラムからの変更点 全問で作成したhash_ary_calc.rbを参考にプログラムを作成した。 変更点は年齢の部分の合計と平均を表示するようにしたところである。 d.実行画面 pan{c111108}% ./hash_ary_calc.rb [~/Ruby] ---セ・リーグの選手情報--- 阿部愼之介選手は巨人所属の選手 背番号[10] ポジション[捕手] 年齢 33歳 浅尾拓也選手は中日所属の選手 背番号[41] ポジション[投手] 年齢 28歳 宮本慎也選手はヤクルト所属の選手 背番号[6] ポジション[遊撃手] 年齢 41歳 堂林翔太選手は広島所属の選手 背番号[13] ポジション[三塁手] 年齢 21歳 藤川球児選手は阪神所属の選手 背番号[22] ポジション[投手] 年齢 32歳 渡辺直人選手は横浜所属の選手 背番号[2] ポジション[二塁手] 年齢 31歳 ---選手を若い順に並べます--- 広島の堂林翔太選手は21歳です 中日の浅尾拓也選手は28歳です 横浜の渡辺直人選手は31歳です 阪神の藤川球児選手は32歳です 巨人の阿部愼之介選手は33歳です ヤクルトの宮本慎也選手は41歳です ---選手の年齢を合計し、平均年齢を求めます--- 全選手の年齢を合計すると186歳になります 年齢を平均すると31.0歳です e.考察 対の表示と並び替えをして若い順に並べるのは正しく表示されている。 選手の年齢と平均が正しいかbc -lで計算して確かめる。 pan{c111108}% bc -l [~/Ruby] 21+28+31+32+33+41 186 186/6 31.00000000000000000000 実行結果と計算結果が一致した。 なのでこのプログラムは正しく動作したといえる。 始め平均を出すための割る数をdate.lemgthとしてしまい、計算結果が合わなかっ た。だが、dateはvalueの数であると気付き、修正したことで正しいプログラム を作成することが出来た。 f.参考文献 webサイト http://roy/~madoka/2012/r2/02/r2_02_13_appendix_05_valueasary.html 西村まどか 2012年度 基礎プログラミングII 講義ノート 第2回 なになにといえばこれこれ 「keyを叩いてvalueの一部を取り出すには」 3.感想 私はよくアマゾンで買い物をするのだが、本日のオススメ商品の覧を見ると、 購入したことのある作家の本、一度チェックした商品と同じような商品、など 商品に関連する単語を読みこんでオススメ商品として表示されているようである。 また、動画共有サイトなどでは、ある一つの動画にTAGというキーワードが複数設定 されていて、ユーザーが検索するとき入力した単語に当てはまるTAGが設定され ていれば検索にひっかかるという機能もある。 例えばとあるドラマの主題歌には、曲名、アーティスト名、ドラマ名、 歌詞の一部、ジャンルといったような複数のキーワードを設定しておけば 検索にひっかかりやすくなる。これも関連するものを出力させる仕組みなのでは ないかと私は思った。日常生活の中にもよく考えてみると、プログラミングの授 業で学んだことの応用が存在していることに気付かされた。 それに気付いたことで、プログラミングを学ぶことが面白く感じられたので、 これからも頑張って授業に臨みたいと思った。 共同学習者:佐藤咲