第5回 基礎プログラミング I レポート課題 氏名:XXXXXXXX 学籍番号:c109XXX 語学クラス:英語1 コース:社会福祉 筆記問題 A okorinboに会いたいぞよ http://www9.nhk.or.jp/anime/ojaru/chara/popup/oko.html ASCIIコード表を用いる。 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 nul soh stx eox eot enq ack bel bs ht lf vt ff cr so si 1 dle dc1 dc2 dc3 dc4 nak syn etb can em sub esc fs gs rs us 2 ! " # $ % & ' ( ) * + , - . / 3 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 4 @ A B C D E F G H I J K L M N O 5 P Q R S T U V W X Y Z [ 円 ] ^ _ 6 ` a b c d e f g h i j k l m n o 7 p q r s t u v w x y z { | } ~ del イ ↓ ↓ 使い方 ↓ 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 nul soh stx eox eot enq ack bel ↓ ht lf vt ff cr so si 1 dle dc1 dc2 dc3 dc4 nak syn etb can em sub esc fs gs rs us ロ→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→ハ 例 ASCIIコード表で0x18を調べる。 矢印で明確に表示させるため0x08は↓とし てある。 イ 横軸の「1」をさがす(→ で表記) ロ 縦軸の「8」をさがす(↓で表記) ハ 手順イとロでさがした交点をみる ニ よってcanがさがせる。 この要領でまとめたものを表にする 16進数 日本語 0x6f o 0x6b k ox6f o 0x72 r 0x69 i 0x6e n 0x62 b ox6f o ox6e n 0x68 h 0x6d k 0x65 a 0x6f n 0x6a i 0x61 m 0x72 e 0x75 o 0x63 j 0x68 a 0x61 r 0x72 u 0x61 c 0x70 h 0x6f h 0x70 a 0x75 r 0x70 a 0x6f o 0x6b k 0x6f o よって,okorinboに会いたいぞよ http://www9.nhk.or.jp/anime/ojaru/chara/popup/oko.html となる. また暴走させたプログラムを止めるには、ctrlを押しながらcを押す これを証明するプログラム0518_bousou.rbを作成した 作成したプログラム #!/usr/koeki/bin/ruby day = 0 kazu = 0 while true printf("%d日目\t%d個\n",day =+ 1,kazu =+ 1) end 実行結果 pan{c109058}% ./0518_bousou.rb [~/Ruby] 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 1日目 1個 ^C ./0518_bousou.rb:5: Interrupt なお、結果が長いため途中、省略してあるが結果の質は同等である。 B 10進数を「2」進数に変換するので「2」で割るが、以下の表記について説明す る。 例 2 / 7 / 3---1 7を2で割ったら3あまり1である。「----- 数字」は余りを示す。 a 2/42 2/21---0↑ 2/10---1↑ 2/5----0↑ ア 2/2----1↑ 1----0↑ →→→→ ア 矢印の方向に余りを読んでいく. よって0b101010となる。 この結果をbinary.rbで試算する pan{c109058}% ./binary.rb [~/Ruby] 1桁目の数はいくつ:0 2桁目の数はいくつ:1 3桁目の数はいくつ:0 4桁目の数はいくつ:1 5桁目の数はいくつ:0 6桁目の数はいくつ:1 7桁目の数はいくつ:0 8桁目の数はいくつ:q 10進数に直すと42になります よってこの結果の根拠が示される。 B 2 /51 2/25---1 2/12---1 2/6----0 2/3----0 ア 1----1 ア 全問と同じ要領で読んでいく よって0b110011となる この結果をbinary.rbで試算する pan{c109058}% ./binary.rb [~/Ruby] 1桁目の数はいくつ:1 2桁目の数はいくつ:1 3桁目の数はいくつ:0 4桁目の数はいくつ:0 5桁目の数はいくつ:1 6桁目の数はいくつ:1 7桁目の数はいくつ:q 10進数に直すと51になります よってこの結果の根拠が示される。 プログラム問題 B選択 a 考えた設定 現代は、日本航空の経営低迷、静岡空港開港など日本の航空業界が一変している が、今回は第1種空港についての基本データを表示するfrom_b.rbとそのデータと なるplan.datを作成した。 b もとにしたプログラム train.datやany_standin.rbをもととしている。変数を変え、配列の内容を変え、 要素も追加させた。 c 作成したプログラム plan.dat 成田国際空港 成田空港 成田国際空港株式会社 成田国際空港株式会社 NRT RJAA 32016338 中部国際空港 中部空港 中部国際空港株式会社 中部国際空港株式会社 NGO RJGG 11721673 関西国際空港 関西空港 関西国際空港株式会社 関西国際空港株式会社 KIX RJBB 16448234 東京国際空港 羽田空港 国土交通大臣 日本航空ビルデング株式会社と東京国際空港株式会社 HND RJTT 66883129 大坂国際空港 伊丹空港 国土交通大臣 大坂国際空港ターミナル株式会社 ITM RJOO 16842868 #1つ目の文字列(要素)は空港の正式名称を示す #2つ目の文字列(要素)は空港の通称を示す #3つ目の文字列(要素)は空港設置管理者を示す #4つ目の文字列(要素)は空港の運営主体を示す #5つ目の文字列(要素)は空港の3レターコードを示す #6つ目の文字列(要素)は空港の4レターコードを示す #7つ目の文字列(要素)は空港の平成18年度の空港乗客数を示す from_b.rb #!/usr/koeki/bin/ruby #インタプリタであることを宣言 $KCODE = "e" #文字化け防止 airport = Array.new #あとで外部からデータを取って来てそれをairportとする。 call = Array.new #あとで外部からデータを取って来てcallとする。 biginmanagement = Array.new #あとで外部からデータを取って来てそれをbiginmanagementとする。 management= Array.new #あとで外部からデータを取って来てそれをamanagementとする。 threecord = Array.new #あとで外部からデータを取って来てそれをthreecordとする。 fourcord = Array.new #あとで外部からデータを取って来てそれをfourcordとする。 kyakusuu = Array.new #あとで外部からデータを取って来てそれをkyakusuuとする。 n = 0 #nは配列数(ここでは表示する空港数)を示す totalkyakusuu = 0 #合計を求めるときに使用 avg = 0 #平均を求めるときに使用 kyakusuua = 0 # いったん乗客数の数値を入れておくところ while plan = gets #planに外部からデータを入れることを繰り返す if/(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\d+)/ =~plan #もし外部データの内容が文字→空白→文字→空白→文字→空白→文字→空白文字→空白→文字→空白→文字だったら airport[n] = $1 #airportは外部データの1つ目の文字列(要素)とする 空港の正式名称を示す call[n] = $2 #callは外部データの2つ目の文字列(要素)とする)空港の通称を示す biginmanagement[n] = $3 #biginmanegementは外部データの3つ目の文字列(要素)とする 空港の設置管理者を示す management[n] = $4 #manegementは外部データの4つ目の文字列(要素)とする 空港の運営主体を示す threecord[n] = $5 #threecordは外部データの5つ目の文字列(要素)とする 空港の3レターコードを示す fourcord[n] = $6 #fourcordは外部データの6つ目の文字列(要素)とする 空港の4レターコードを示す kyakusuu[n] = $7 #kyakusuuは外部データの7つ目の文字列(要素)とする 空港の乗客奢数を示す printf("%sは、通称%sと呼ばれ、空港設置管理者は%sで、運営主体は%sとなっている。\n3レターコードは%sであり、4レターコードは%sである。\nなお平成18年度乗客奢数は%d人となっている。\n\n",airport[n],call[n],biginmanagement[n],management[n],threecord[n],fourcord[n],kyakusuu[n]) #結果表示 kyakusuua = kyakusuu[n].to_f #10進数と見なし,小数に変換したものをkyakusuuaに入れる totalkyakusuu +=kyakusuua #kykusuuaのなかに入った数値を足し合計を求める n += 1 #nを一つ足すことで次の空港のデータを表示する end #whileの終わり end #ifの終わり avg =totalkyakusuu / n #合計を空港数で割って平均を求める printf("平成18年代1種空港乗客数は合計で%d人です\n",totalkyakusuu) #結果表示 printf("平均乗客数は%9.1f人です\n",avg) #結果表示 d 実行結果 an{c109058}% ./from_b.rb plan.dat [~/Ruby] 成田国際空港は、通称成田空港と呼ばれ、空港設置管理者は成田国際空港株式会社で、運営主体は成田国際空港株式会社となっている。 3レターコードはNRTであり、4レターコードはRJAAである。 なお平成18年度乗客奢数は32016338人となっている。 中部国際空港は、通称中部空港と呼ばれ、空港設置管理者は中部国際空港株式会社で、運営主体は中部国際空港株式会社となっている。 3レターコードはNGOであり、4レターコードはRJGGである。 なお平成18年度乗客奢数は11721673人となっている。 関西国際空港は、通称関西空港と呼ばれ、空港設置管理者は関西国際空港株式会社で、運営主体は関西国際空港株式会社となっている。 3レターコードはKIXであり、4レターコードはRJBBである。 なお平成18年度乗客奢数は16448234人となっている。 東京国際空港は、通称羽田空港と呼ばれ、空港設置管理者は国土交通大臣で、運営主体は日本航空ビルデング株式会社と東京国際空港株式会社となっている。 3レターコードはHNDであり、4レターコードはRJTTである。 なお平成18年度乗客奢数は66883129人となっている。 大坂国際空港は、通称伊丹空港と呼ばれ、空港設置管理者は国土交通大臣で、運営主体は大坂国際空港ターミナル株式会社となっている。 3レターコードはITMであり、4レターコードはRJOOである。 なお平成18年度乗客奢数は16842868人となっている。 平成18年代1種空港乗客数は合計で143912242人です 平均乗客数は28782448.4人です e 考察 bc -lで試算する pan{c109058}% bc -l [~/Ruby] 32016338+11721673+66883129+16842868+16448234 143912242 143912242/5 28782448.40000000000000000000 quit 試算の結果によってこのプログラムの正確性が証明された. 数値の最高値のデータを表示させるソースの作成を、 http://roy.e.koeki-u.ac.jp/~madoka/2010/r1/05/05_16_appendix_04_summary.html とhttp://roy.e.koeki-u.ac.jp/~madoka/2010/r1/05/05_17_appendix_05_plan.html を参照しながらこれらに書かれているのは「最低値」であるので、逆のソースを 作成することで表示させることを試みたがうまく作成することができなかった。 f 感想 日常生活においてこの原理が用いられているものは、家電量販店において商品監 理をする際に、メーカー 商品型番 値段 仕入れ日 払出日の一覧表示させること があるだろう。 ちなみに、4レターコードは国債民間航空機関が定めているコードのことを指し、 3レターコードとは国際航空運送機関が定めているコードを指す。 今回は私の興味のあることを題材に作成した。したがって、作成中も楽しかった。 第2種空港以降も余力があれば作成してみたい。今後もより技術を高めたい。 g 参考文献 西村 まどか 2010講義ノート 基礎プログラミング I データとプログラムの分離 http://roy.e.koeki-u.ac.jp/~madoka/2010/r1/05/05_11_theme_09_ary_stdin.html 西村 まどか 2010講義ノート 基礎プログラミング I 第5回 ASCIIコード表 http://roy.e.koeki-u.ac.jp/~madoka/2010/r1/05/05_01_theme_01_asciicode.html 西村 まどか 2010講義ノート 基礎プログラミング I 第5回 最低運賃を表示させ るには ttp://roy.e.koeki-u.ac.jp/~madoka/2010/r1/05/05_16_appendix_04_summary.html 西村 まどか 2010講義ノート 基礎プログラミング I 第5回 最低運賃のプラン表 するには ttp://roy.e.koeki-u.ac.jp/~madoka/2010/r1/05/05_17_appendix_05_plan.html Japanese Airport 日本の空港一覧 http://www.h3.dion.ne.jp/~t_yamaz/aviation/avtn013.htm 国土交通省航空局 『平成18年空港監理協調査』 http://www.mlit.go.jp/koku/04_outline/10_data/index.html 『プログラミングの手引き』 西村組 TA一同 4頁 wikipadia 空港コード http://ja.wikipedia.org/wiki/%E7%A9%BA%E6%B8%AF%E3%82%B3%E3%83%BC%E3%83%89 NHK おじゃる丸 キャラクター オコリン坊 http://www9.nhk.or.jp/anime/ojaru/chara/popup/oko.html 協力してくれた先輩: 大沼 拓海 先輩/五代儀 公大 先輩/工藤 智也 先輩 共同学習者: 横山広樹/青木 千紗/大島 藍