第5回 基礎プログラミング I レポート課題 氏名:XXXXXXXX 学籍番号:C108XXX 語学クラス:英語XX コース(系):社会 A. プログラム(test.rb)として作成し、実行してみた。 #!/usr/koeki/bin/ruby printf("%c%c%c%c%c%c%c%cに会いたいぞよ\n", 0x6f,0x6b,0x6f,0x72,0x69,0x6e,0x62,0x6f) printf("http://www9.%c%c%c.or.jp/%c%c%c%c%c/%c%c%c%c%c/%c%c%c%c%c/%c%c%c%c%c/%c%c%c.html\n", 0x6e, 0x68, 0x6b, 0x61, 0x6e, 0x69, 0x6d, 0x65, 0x6f, 0x6a, 0x61, 0x72, 0x75, 0x63, 0x68, 0x61, 0x72, 0x61, 0x70, 0x6f, 0x70, 0x75, 0x70, 0x6f, 0x6b, 0x6f) 結果、 pan{c108203}% ./test.rb [~/Ruby] okorinboに会いたいぞよ http://www9.nhk.or.jp/anime/ojaru/chara/popup/oko.html と表示された。 また、確認のためプログラム3行目の 0x6f,0x6b,0x6f,0x72,0x69,0x6e,0x62,0x6 をコード表を見ながら解読したところ o k o r i n b o となった。 したがって瑠美姫の理想の番人(?)は NHKアニメ『おじゃる丸』のキャラクター、オコリン坊 である。 また、プログラムが暴走したときは C-cを押すことで計算を止められる。 B. a. 自己流のやり方で行くと 42以下で最大となる2^xの数は 32 42-32=10 16以下の数字で、足して10になる2^a,2^bの組み合わせは 8 と 2 したがって 32 16 8 4 2 1 1 0 1 0 1 0 となるので、0d42 = 0b101010 一般的なやり方で行くと 10進数を2でわっていき、その余りが2進数となるので 42/2=21あまり0 21/2=10あまり1 10/2=5あまり0 5/2=2あまり1 2/2=1あまり0 1/2=0あまり1 となるので、0d42 = 0b101010 b. 自己流で行くと 52以下で最大となる2^xの数は 32 52-32=20 足して20となる2^a 2^bは 16,4 である。したがって 32 16 8 4 2 1 1 1 0 1 0 0 となるので 0d52 = 0b110100 一般的な方法では 52/2=26あまり0 26/2=13あまり0 13/2=6あまり1 6/2=3あまり0 3/2=1あまり1 1/2=0あまり1 となるので 0d52 = 0b110100 2.A(form_a.rb)を選択。 a.設定 近く(半径1km以内)にあるレストランの種類と、おすすめ商品とその値段、 現在の場所からの距離を教えてくれるプログラムを作成。 b.作成プログラム form_a.rb #!/usr/koeki/bin/ruby i=0 #お店に番号をつける。 res =["うどん屋","牛丼屋","スパゲティ屋","蕎麦屋","ラーメン屋"] #お店の種類。restaurant の略。 food =["わかめうどん","牛丼(並)","ナポリタン","ざるそば","醤油ラーメン"] #そのお店のおすすめ商品、food price =[450,300,650,800,500] #おすすめ商品の値段 distance =[850,210,530,10,1000] #現在地からの距離 while i < res.length #res の配列数と同じ長さになるまで実行 printf("お店 %d: \n",i + 1)#何番目の店か printf("%sさん。おすすめは%sで%s円。 ここから%sメートルのところにあります。\n", res[i],food[i],price[i],distance[i])#結果表示。それぞれ配列のi番目を出す。 i += 1 #お店番号一つずつ増やす。 end #終了。 c.元のプログラムからの変更点 授業内で扱った ary_train.rbを元に作成した。 それぞれの入れ物を res food price distanse という名に設定。 i を店番号とし、店番号が res の要素数と同じになるまで続けるよう指示。 今回の場合は5個目で終了と指示した。 d.実行 roy{c108203}% ./test.rb [~/Ruby] お店 1: うどん屋さん。おすすめはわかめうどんで450円。 ここから850メートルのところにあります。 お店 2: 牛丼屋さん。おすすめは牛丼(並)で300円。 ここから210メートルのところにあります。 お店 3: スパゲティ屋さん。おすすめはナポリタンで650円。 ここから530メートルのところにあります。 お店 4: 蕎麦屋さん。おすすめはざるそばで800円。 ここから10メートルのところにあります。 お店 5: ラーメン屋さん。おすすめは醤油ラーメンで500円。 ここから1000メートルのところにあります。 e.考察 何の店か おすすめ その価格 距離 うどん屋 わかめうどん 450 850 牛丼屋 牛丼(並) 300 210 スパゲティ屋 ナポリタン 650 530 蕎麦屋 ざるそば 800 10 ラーメン屋 醤油ラーメン 500 1000 というものを出したかったので、実行結果は合っていると言える。 また、少し中身を変えて実行してみた。 #!/usr/koeki/bin/ruby $KCODE = 'e' i=0 res =["カレー屋","豚かつ屋","ステーキ屋","バイキングレストラン","焼き肉屋"] food =["トマトカレー","豚かつ定食","ヒレステーキ","90分食べ放題","カルビ"] price =[600,1000,2500,1500,500] distance =[200,300,400,500,600] while i < res.length printf("お店 %d: \n",i + 1) printf("%sさん。おすすめは%sで%s円。 ここから%sメートルのところにあります。\n", res[i],food[i],price[i],distance[i]) i += 1 end 結果 roy{c108203}% ./form_a.rb [~/Ruby] お店 1: カレー屋さん。おすすめはトマトカレーで600円。 ここから200メートルのところにあります。 お店 2: 豚かつ屋さん。おすすめは豚かつ定食で1000円。 ここから300メートルのところにあります。 お店 3: ステーキ屋さん。おすすめはヒレステーキで2500円。 ここから400メートルのところにあります。 お店 4: バイキングレストランさん。おすすめは90分食べ放題で1500円。 ここから500メートルのところにあります。 お店 5: 焼き肉屋さん。おすすめはカルビで500円。 ここから600メートルのところにあります。 となったので、このプログラムは正常に作動していると言える。 f.参考文献 レポートの最後に表記。 感想 今回は前回までの数値をいれ計算させるプログラムでなく、予めデータとして入っ ている値を表示させるものを学習した。 このような仕組みを応用すれば、周囲のお店、飲食店、公共施設などを選ばせ ・そこに何があるか ・ここからどのくらい離れているか といったことを表示できる案内板ができるだろうと考えた。 配列は、今までやってきたことと違うのでだいぶ戸惑った。 また、プログラム作成のときにスペルミスが目立った。 (averageをavarage のように) プログラムはほんのちょっとしたミスでも正常に作動しなくなるので、 落ち着いて、入力したものを見直してから実行しようと思う。 〜課題プログラムform_a.rbについて〜 本当は平均の価格や距離なども表示させたかったのだが、授業で扱ったプログラムを 参考にしてもうまくいかなかったため断念した。もっと配列に関して理解が深まったら、再び挑戦してみようと思う。 参考文献 / webサイト 1.B Webで学ぶ情報処理概論 > 第2章 コンピュータの原理 >10進数から2進数への変換 http://www.infonet.co.jp/ueyama/ip/binary/dec2bin.html 制作者 上山清二 氏 協力者 妹(工業高校2年) 2. 基礎プログラミング I 第5回 講義ノート > 配列の構造 「行先検索ソフト」 http://roy/~madoka/2010/r1/05/05_10_theme_08_ary_train.html 製作者 西村まどか