第3回 基礎プログラミング II レポート課題 氏名: 横山 広樹 学籍番号: C109149A 語学クラス: 英語 1 コース(系): 環境サイエンス 1. A yokoyama hiroki これを ASCII コード表を見ながら直していく。横にある数字と縦にある数字と 文字を組み合わせて 0x xx のように表現する。xx のところに組み合わせたも のが入る。y は 横にある数字で 7 のところにある。縦は 9のところにある。こ れを組み合わせ 0x 79 となる。ほかのアルファベットも同じように直していく。 o = 0x 6f k = 0x 6b o = 0x 6f y = 0x 79 a = 0x 61 m = 0x 6d a = 0x 61 h = 0x 68 i = 0x 69 r = 0x 72 o = 0x 6f k = 0x 6b i = 0x 69 よって 0x79,0x6f,0x6b,0x6f,0x79,0x61,0x68,0x69,0x72,0x6f,0x6b,0x69 とな る。 これを 10 進数に直してみる。まずアルファベットの部分を数字に直す。直すと きは表を見ながらする。 2 進数 10 進数 16 進数 0001 1 1 0010 2 2 0011 3 3 0100 4 4 0101 5 5 0110 6 6 0111 7 7 1000 8 8 1001 9 9 1010 10 a 1011 11 b 1100 12 c 1101 13 d 1110 14 e 1111 15 f a = 10,b = 11,c = 12,d = 13,e = 14,f = 15 一の位には 16 の 0 乗を掛け、十の位には 16 の 1 乗を掛けて足す。 0x79 = 7*16^1+9*16^0 = 121 0x6 15 = 6*16^1+15*16^0 = 111 0x6 11 = 6*16^1+11*16^0 = 107 0x6 15 = 6*16^1+15*16^0 = 111 0x79 = 7*16^1+9*16^0 = 121 0x61 = 6*16^1+1*16^0 = 97 0x68 = 6*16^1+8*16^0 = 104 0x69 = 6*16^1+9*16^0 = 105 0x72 = 7*16^1+2*16^0 = 114 0x6 15 = 6*16^1+15*16^0 = 111 0x6 11 = 6*16^1+11*16^0 = 107 0x69 = 6*16^1+9*16^0 = 105 よって 121,111,107,111,121,97,104,105,114,111,107,105 となる。 B "しきする" しきする (式する) しきする (指揮する) しきする (死期する) C 漢字の読み方を Hash 配列名 yomi とした。 key には読み方 value には漢字、訓読み、画数 key 「え」 value 「絵、え、12」 key 「えき」 value 「駅、えき、14」 key 「ほん」 value 「本、ほん、5」 key 「えん」 value 「円、えん、4」 key 「せき」 value 「席、せき、9」 これらを Hash 配列で表すと yomi = { "え" => ["絵","え","12"], "えき" => ["駅","えき","14"], "ほん" => ["本","ほん","5"], "えん" => ["円","えん","4"], "せき" => ["席","せき","9"] } もう一つの表し方は yomi["え"] = "絵","え","12" yomi["えき"] = "駅","えき","14" yomi["ほん"] = "本","ほん","5" yomi["えん"] = "円","えん","4" yomi["せき"] = "席","せき","9" 2 A 1.考えた設定 漢字、訓読み、画数が表示されるようにプログラムを組んだ。 2.作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 文字コードの設定。この場合は EUC コードで漢字 yomi = Hash.new # Hash.new で新しく Hash を作る yomi = { "え" => ["絵","え",12], # Hash の設定をする "えき" => ["駅","えき",14], "ほん" => ["本","ほん",5], "えん" => ["円","えん",4], "せき" => ["席","せき",9] } for kanji in yomi.keys # すべての Hash の対を表示させる # for kanji()in yomi.keys() printf("%s と読む漢字は %s 訓読みは %s 画数は %d 画\n",kanji, yomi[kanji][0], yomi[kanji][1], yomi[kanji][2]) # 表示させたい文章をカッコとダブルコーテーションで囲み、一つ目の %s # には kanji が入る。そのあとは、value の中に入っている 0番目の文字 # 1番目の文字、2番目の文字。 end # for に対する end 3.もとにしたプログラムからの変更点 Hash 配列名を変えて、value にいくつかつけ足した。 4.実行結果 pan{c109149}% ./hash_ary_print.rb [~/Ruby] せき と読む漢字は 席 訓読みは せき 画数は 9 画 えき と読む漢字は 駅 訓読みは えき 画数は 14 画 ほん と読む漢字は 本 訓読みは ほん 画数は 5 画 えん と読む漢字は 円 訓読みは えん 画数は 4 画 え と読む漢字は 絵 訓読みは え 画数は 12 画 5.考察 Hash の中に入っている通りに実行され表示されたのでこのプログラムは正しく 実行されたといえる。 B 1.考えた設定 漢字の画数の小さい順に表示されるようにした 2.作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 文字コードの設定。この場合は EUC コードで漢字 yomi = Hash.new # Hash.new で新しく Hash を作る yomi = { "え" => ["絵 ","え ",12], # Hash の設定をする "えき" => ["駅 ","えき ",14], "ほん" => ["本 ","ほん ",5], "えん" => ["円 ","えん ",4], "せき" => ["席 ","せき ",9 ] } yomi.keys.sort{|on, kun| yomi[on][2] <=> yomi[kun][2] }.each{|kanji| # Hash の key の 3 番目にあるものを小さい順に並び変える。sort を on と kun # という名前に置き換える。yomi の中にあるものがなくなるまで繰り返す。 printf("漢字の画数の順序: %s %s %s画\n",kanji, yomi[kanji][0], yomi[kanji][2]) # 表示させたい文章をカッコとダブルコーテーションで囲む。一つ目の %s には kanji # が入り、二つ目の %s には yomi[ksnji][2] が入る。 } 3.もとにしたプログラムからの変更点 for 文を使わずに、each を使い繰り返して printf 文を実行させた。 each 文の名前を kanji に変更した。 4.実行結果 pan{c109149}% ./hash_ary_sort.rb [~/Ruby] 漢字の画数の順序: えん 円 4画 漢字の画数の順序: ほん 本 5画 漢字の画数の順序: せき 席 9画 漢字の画数の順序: え 絵 12画 漢字の画数の順序: えき 駅 14画 5.考察 プログラムで "え" => ["絵 ","え ",12] "えき" => ["駅 ","えき ",14] "ほん" => ["本 ","ほん ",5] "えん" => ["円 ","えん ",4] "せき" => ["席 ","せき ",9 ] となっていて実行結果では 3 つ目が小さい順になっているためこのプログラミ ングは正しく実行されているといえる。 3.感想 桃太郎でおともと交渉するとき xx はおこしにつけたきび団子をくださいという 文を繰り返して物語が進んでいる。 4.参考文献 基礎プログラミング I 第 5 回 「配列の構造」ASCII コード表 http://roy/~madoka/2010/r1/05/05_01_theme_01_asciicode.html 西村まどか先生 基礎プログラミング II 第 2 回 「なになにといえばこれこれ」要素の一部分を使って入れ替えをするには http://roy/~madoka/2010/r2/02/02_15_theme_14_sorthasharraycomp.html 西村まどか先生 5.共同学習者 青木千紗 大島藍 久保田瑛一郎 6.添付