第 3 回 情報の構造を分析しよう レポート課題 氏名:菊池綾 学籍番号:c1100644 語学クラス:英語6 コース(系):政策マネジメント 1.筆記問題 A.Kikuchi Aya を ASCIIコードで表記する。 コード表を用いて16進数表記すると、 k … 0x4b i … 0x49 k … 0x4b u … 0x55 c … 0x43 h … 0x48 i … 0x49 a … 0x41 y … 0x59 a … 0x41 このようになる。 さらにこれを10進数に変換する。 k … 0x4b = 16**1 * 4 + 16**0 * b(11) = 64 + 11 = 75 i … 0x49 = 64 + 16**0 * 9 = 64 + 9 = 73 k … 0x4b = 75 u … 0x55 = 16**1 * 5 + 16**0 * 5 = 80 + 5 = 85 c … 0x43 = 64 + 3 = 67 h … 0x48 = 64 + 8 = 72 i … 0x49 = 73 a … 0x41 = 64 + 1 = 65 y … 0x59 = 80 + 9 = 89 a … 0x41 = 65 B.そこにわたしはいった(6例) 1)そこに わたしは いった(そこに 私は 行った) 2)そこに わたし はいった(そこに 私 入った) 3)そこに わたしは いった(そこに 私は 言った) 4)そこに わたしは いった(底に 私は 行った) 5)そこに わたし はいった(底に 私 入った) 6)そこに わたしは いった(底に 私は 言った) C.授業の情報を hash 配列 class とする。 jugyo の key と value は key … 授業名 value … 曜日、時間[限]、教室 ととることにした。 その1:key「基礎プログラミングII」に対して value は「月、3、101」 その2:key「情報処理基礎論a」に対して value は「火、1、102」 その3:key「英語VII リスニング」に対して value は「水、3、208」 その4:key「理論経済学」に対して value は「木、1、301」 その5:key「政策マネジメントと公益」に対して value は「金、4、103」 これらを hash 配列で表記すると、 jugyo{ "基礎プログラミングII"=>["月", 3, 101], "情報処理基礎論a" =>["火 ", 1, 102], "英語VII リスニング"=>["水", 3, 208], "理論経済学 "=>["木", 1, 301], "政策マネジメントと公益"=>["金", 4, 103] } となる。 別の表記の仕方で表すと、 jugyo["基礎プログラミングII"] = ["月",3,101] jugyo["情報処理基礎論a"] = ["火",1,101] jugyo["英語VII リスニング"] = ["水",3,208] jugyo["理論経済学"] = ["木",1,301] jugyo["政策マネジメントと公益"] = ["金",4,103] となる。 2.プログラム問題 B i. 考えた設定 登録しておいた対のデータを、全表示(出力の際指定なし)と並べ替え(2パターン)で 表示するプログラム。 ii. 作成したプログラム(hash_ary_sort.rb) #!/usr/koeki/bin/ruby -Ke #-Ke で日本語コードに設定 jugyo = Hash.new #新しくhash配列として jugyo を作成 jugyo["基礎プログラミングII"] = ["月",3,101] jugyo["情報処理基礎論a "] = ["火",1,101] jugyo["英語VII リスニング"] = ["水",3,208] jugyo["理論経済学 "] = ["木",1,301] jugyo["政策マネジメントと公益"] = ["金",4,103] #hash配列名["key"] = ["value1","value2","value3"] #hash配列 jugyo の key に value を3つ入れた #文字は "" でくくり、数値はくくらないようにした p jugyo #全てのデータが配列に入っているかどうかの確認に使用 print"●全てのデータを表示する。\n" #タイトルを printメソッド で表示 #\n は改行 print"------------------------------------------------\n" for name, detail in jugyo printf("%-12s\t … %s曜日 %d限 %d教室\n", name, detail[0], detail[1], detail[2]) end #for key, value in hash配列名 # 繰り返したい処理 #end #この書き方でhash配列を1行ずつ読みこみ、 #printfメソッドで中のデータを代入しながら出力。 #\t はタブ1つ分のスペース #%s … 空白以外、%d … 数字 #detail[0] … detail(value部分)の配列の1つ目の要素 print"------------------------------------------------\n" #p name #授業名が全てnameで表示されるかの確認に使用 print"\n●授業時間の早い順に並べ替える。\n" print"------------------------------------------------\n" jugyo.keys.sort{|a,b| jugyo[a][1]<=>jugyo[b][1]}.each{|name| printf("%s\tの 授業時間 … %d限(%s曜日、%d教室)\n",name ,jugyo[name][1] ,jugyo[name][0] ,jugyo[name][2]) } #sortメソッドは{}でどこを並べ替えるのか指定することが出来る #配列.sort{|変数A, 変数B| # 変数Aを使って並べ替えに使用する部分を表す<=>変数Bを使って(以下同じ)} #昇順:配列.sort{|a,b| a<=>b} … (| |内と後ろのabの順が同じ) #降順:配列.sort{|a,b| b<=>a} … (| |内と後ろのabの順が異なる) #keys で、hash配列からkeyを取り出すことが出来る #eachメソッドを使うと、一つずつ取り出して動作を行う #配列.each{|配列の要素を代入する内部変数| # 内部変数に入った文字列について実行したい動作} #ここではeachメソッドで一つずつprintfメソッドで代入したものを #sortメソッドで並べ替えた print"------------------------------------------------\n" print"\n●教室番号の小さい順に並べ替える。\n" print"------------------------------------------------\n" jugyo.keys.sort{|a,b| jugyo[a][2]<=>jugyo[b][2]}.each{|name| printf("%s\tの 教室 … %d教室(%s曜日、%d限)\n",name ,jugyo[name][2] ,jugyo[name][0] ,jugyo[name][1]) } print"------------------------------------------------\n" #並べ替えや代入に使うインデックスの数字を動かして内容を変えた iii. もとにしたプログラムからの変更点 プログラム問題A(hash_ary_print.rb)の出力する際の設定を新たに加えた。 <加えたもの> ・sortメソッド ・eachメソッド iv. プログラムを実行した結果画面 pan{KIKUCHI Aya}% ./hash_ary_sort.rb [~/Ruby] ●全てのデータを表示する。 ------------------------------------------------ 理論経済学 … 木曜日 1限 301教室 政策マネジメントと公益 … 金曜日 4限 103教室 英語VII リスニング … 水曜日 3限 208教室 基礎プログラミングII … 月曜日 3限 101教室 情報処理基礎論a … 火曜日 1限 101教室 ------------------------------------------------ ●授業時間の早い順に並べ替える。 ------------------------------------------------ 理論経済学 の 授業時間 … 1限(木曜日、301教室) 情報処理基礎論a の 授業時間 … 1限(火曜日、101教室) 英語VII リスニング の 授業時間 … 3限(水曜日、208教室) 基礎プログラミングII の 授業時間 … 3限(月曜日、101教室) 政策マネジメントと公益 の 授業時間 … 4限(金曜日、103教室) ------------------------------------------------ ●教室番号の小さい順に並べ替える。 ------------------------------------------------ 情報処理基礎論a の 教室 … 101教室(火曜日、1限) 基礎プログラミングII の 教室 … 101教室(月曜日、3限) 政策マネジメントと公益 の 教室 … 103教室(金曜日、4限) 英語VII リスニング の 教室 … 208教室(水曜日、3限) 理論経済学 の 教室 … 301教室(木曜日、1限) ------------------------------------------------ v. 導き出された結果の考察 並べ替えが1パターンの場合、偶然並んだと言うことも出来るため2つの要素を使 用して実行した。 今回は両方とも同じ昇順で並び替えた。 どちらも昇順に数値を並べることができ、またその対になるkeyや他のvalueも同 時に表示された。 よって、このプログラムは合っていると言える。 曜日についても並び替えを試みたが、文字の場合順番を設定する必要があるのか 並び替えることが出来ず断念した。 3.感想 赤ずきんの一部で、 赤ずきん「どうしておばあさんの◯◯は××なの?」 おおかみ「それはね、お前の□□を〜〜するためだよ。」 というやりとりに、繰り返しが使えると考えた。 参考文献 基礎プログラミングII 第4回「ハッシュ[2]」 神田直弥 http://roy/~naoya/rubyII/4.html 基礎プログラミングII 第3回「一つずつ取り出すには / 並べ替えを詳しく行う には」 西村まどか http://roy/~madoka/2011/r2/03/r2_03_04_review_04_each.html ------------------------------- 東北公益文科大学 公益学部 公益学科 2年 菊池綾 c110064@f.koeki-u.ac.jp