第2回 基礎プログラミングII 演習問題 氏名:久保田 瑛一郎 学籍番号:c109058 語学クラス:英語1 コース:社会福祉 ●一度にしらべるには? a 考えた設定 一度に沢山調べることを、繰り返すことだと考え、繰り返すプログラム hash_exe2_date.rbを作成した。 b元にしたプログラム ベースは授業中に作成したhash_date.rbである。繰り返すのでwhile tureを追加 した。 c 作成したプログラム #!/usr/koeki/bin/ruby #インタプリタであることを宣言する $KCODE="e" #文字コードがEUCであることを教える 文字化け防止 shop=Hash.new #shopはhash(事前に登録してあるデータを入れておくところ)である shop={ "押し麦"=>250, "あわ"=>180 } #事前登録内容 hash →商品は●●円 shop["ひえ"]=130 shop["きび"]=210 #事前登録内容 hash →商品は●●円 while true #永遠に繰り返す STDERR.print("購入する品物(終了はq:") #購入する品物を聞く item=gets.chomp #それを取り込み、改行文字を取り除く if item=="q" break end if shop.key?(item)==true #もしその取り込まれたものが、key(ハッシュ=事前に登録してあるもの)と一緒だったら STDERR.print("購入する質量:") #購入する質量を聞く weight=gets.to_f #それを取り込み、改行文字を取り除き、小数に変換 printf("%s\t100グラム当たり%d円\t%10.1f\t代金%d円\n",item,shop[item],weight,shop[item]*weight/100) #結果表示 else print("表にありません") #その他は end #ifのおわり end #whileの終わり d実行結果 pan{c109058}% ./hash_exe2_date.rb [~/Ruby] 購入する品物(終了はq:押し麦 購入する質量:100 押し麦 100グラム当たり250円 100.0 代金250円 購入する品物(終了はq:ひえ 購入する質量:20 ひえ 100グラム当たり130円 20.0 代金26円 購入する品物(終了はq:q e 考察 きちんと繰り返されている、すなわちいくつかの品物が調べられるので、このプ ログラムは正しい ●単価が150円の品物があるか? a考えた設定 商品名を検索対象とするのではなく、値段を検索対象とするプログラムである hash_exe2_2_date.rbを作成した た。 bもとにしたプログラム 基本的にはhash_date.rbを元としたが参照程度である c作成したプログラム #!/usr/koeki/bin/ruby #インタプリタであることを宣言する $KCODE="e" #文字コードがEUCであることを教える 文字化け防止 yasai=Hash.new #yasaiは配列である yasai["にんじん "]=100 yasai["かぼちゃ "]=150 yasai["しいたけ "]=200 yasai["オリーブ "]=130 yasai["米 "]=2000 yasai["ピーマン "]=100 #ハッシュの内容(内容を登録する) ●●は◯◯円である STDERR.print("購入する商品の値段を入力してください:") #値段の入力を促す kounyuu=gets.chomp.to_i #入力された数字を取り込み、改行文字を取り、10進数に変換 if yasai.value?(kounyuu)==true #もし入力された内容がValue(これこれの部分=値段)のyasaiのハッシュ(事前登録内容)と合致したら print("取扱っています\n") #結果表示 else #それ以外は print("取扱っていません\n") #結果表示 end #ifの終わり d実行結果 パターン1 pan{c109058}% ./hash_exe2_2_date.rb [~/Ruby] 購入する商品の値段を入力してください:150 取扱っています パターン2 an{c109058}% ./hash_exe2_2_date.rb [~/Ruby] 購入する商品の値段を入力してください:10 取扱っていません パターン3 購入する商品の値段を入力してください:米 取扱っていません e 考察 実際に何が100円の商品に波あるのかという内容も表示させるべく、 yasai[kounyuu]やkeyの時と逆なので、kounyuu[yasai]も試してみたが表示され なかった。 とりあえず取扱っているかどうかだけは表示させることが出来た。 ●同じ内容を2回入力した場合 hash_pair.rbを用いる きび 500円 ひえ 20円 ./hash_pair.rb:38: undefined method `reverse' for 20:Fixnum (NoMethodError) from ./hash_pair.rb:37:in `sort' from ./hash_pair.rb:37 エラーも出ているがソートの間違いである。 結果は最初に入れた値段が上書きされ、最新の内容が表示される。 ●reverseとかsoatとか 実行結果 pan{c109058}% ./hash_exe2_3.rb [~/Ruby] 商品と価格を入力してください(Ctrl-D で終了) 商品を入力してください: パソコン 価格を入力: 600 商品を入力してください: スキャナ 価格を入力: 200 商品を入力してください: プリンタ 価格を入力: 20 商品を入力してください: 入力終了 [20, 200, 600] プリンタ20円 パソコン 600円 スキャナ 200円 プリンタ 20円 スキャナ 200円 パソコン 600円 ["プリンタ\241", "パソコ\245\363", "スキャ\245\312"] [20, 600, 200] [20, 200, 600] [600, 200, 20] 考察 p shop.keysでは入力されたkeyが全て表示される p shop.valuesでは入力されたvalueが全て表示される p shop.values.sortは数字が小さい順に表示され、p shop.values.sort.reverse は数字が大きい順に、表示される。 感想 これ以降の問題についても解いてはみたが、なかなか分からなかった。でも少な からず自分の実にはなっていると思うし、「途中まででもなにか難しいことをやっ てみる」という力にはなった。 その意味では、この演習問題も意味のあるものだった。 だがこれ以上やると他の教科に影響しそうなのでひとまずこのぐらいにしておく。