氏名: summerflower 学籍番号: c116040 クラス: F2 ○どの問題を選択したか 3番 ○作成したプログラム本体 #!/usr/koeki/bin/ruby # coding: utf-8 require "./kprintf.rb" if ARGV[0] == nil STDERR.print "データファイルを指定して下さい。\n" STDERR.print "人気順で出力 % ./kadai5.rb chuka5.txt\n" STDERR.print "カロリー順で出力 % ./kadai5.rb -a chuka5.txt\n" STDERR.print "価格が安い順に出力 % ./kadai5.rb -b chuka5.txt\n" exit(1) end sortby = 0 choice = 0 while /^-/ =~ ARGV[0] if ARGV[0] == "-a" choice = 1 elsif ARGV[0] == "-b" choice = 2 else break end ARGV.shift end chuka = Hash.new while line = gets if /(\S+)\s+(\d+)\s+(\d+)\s+(\d+)/=~line o = $2.to_i k = $3.to_i p = $4.to_i chuka[$1] = [o,k,p] end end print "--メニュー--+-人気-----+-カロリー-----+-値段---\n" for menu in chuka.keys.sort { |x,y| chuka[x][choice] <=> chuka[y][choice] } osusume = chuka[menu][0] karori = chuka[menu][1] price = chuka[menu][2] printf("%-5s %5d番目 %10dキロカロリー %10d円\n",menu,osusume,karori,price) end ○プログラムの説明(データ処理の部分の詳説) このプログラムは中華屋のメニューをカロリー順、値段順に並び替えをするプロ グラムである。 このプログラムはユーザーによって並び替え基準を決めてもらうため [ARGV]を用いてコマンドラインと情報のやりとりを行う。 -aが入力されたときはchoice=1となりカロリー順での並べ替えになる。 -bが入力されるとchoice=2となり安い順での並べ替えを行う。 ここで注意するべき点はデータの最初、このプログラムで言う 「人気順」はデフォルトのソートのため 予めchoice=0を用意しておき[ARGV]に何も入力されなかった場合に 人気順に並べ替えられるようにしておく。 今回利用したソートはちいさい順での並べ替えなので もし大きい順で並べ替えを行うときは for menu in chuka.keys.sort { |x,y| chuka[y][choice] <=> chuka[x][choice] } と、xとyを逆にする。 ○実行結果 sime{ONODERA Natsuka}% ./kadai05.rb kadai005.txt [~/Ruby] --メニュー--+-人気-----+-カロリー-----+-値段--- 味噌コーンラーメン 1番目 940キロカロリー 900円 味噌バターラーメン 2番目 1020キロカロリー 970円 チャーシューメン 3番目 1200キロカロリー 750円 冷やし中華 4番目 620キロカロリー 750円 味噌ラーメン 5番目 900キロカロリー 850円 味噌タンタン麺 6番目 1100キロカロリー 950円 醤油ラーメン 7番目 830キロカロリー 500円 ねぎ味噌ラーメン 8番目 950キロカロリー 860円 塩ラーメン 9番目 800キロカロリー 830円 チャーハン 10番目 420キロカロリー 700円 つけめん 11番目 620キロカロリー 750円 やさいラーメン 12番目 760キロカロリー 800円 餃子 13番目 290キロカロリー 350円 ライス 14番目 340キロカロリー 150円 sime{c116040}% ./kadai05.rb -a kadai005.txt [~/Ruby] --メニュー--+-人気-----+-カロリー-----+-値段--- 餃子 13番目 290キロカロリー 350円 ライス 14番目 340キロカロリー 150円 チャーハン 10番目 420キロカロリー 700円 冷やし中華 4番目 620キロカロリー 750円 つけめん 11番目 620キロカロリー 750円 やさいラーメン 12番目 760キロカロリー 800円 塩ラーメン 9番目 800キロカロリー 830円 醤油ラーメン 7番目 830キロカロリー 500円 味噌ラーメン 5番目 900キロカロリー 850円 味噌コーンラーメン 1番目 940キロカロリー 900円 ねぎ味噌ラーメン 8番目 950キロカロリー 860円 味噌バターラーメン 2番目 1020キロカロリー 970円 味噌タンタン麺 6番目 1100キロカロリー 950円 チャーシューメン 3番目 1200キロカロリー 750円 ○参考文献 版表示なし 広瀬雄二.Ruby基礎プログラミング.技術評論社,2006,311p. 広瀬雄二."#05 配列とハッシュの応用".2017年度 基礎プログラミングII. http://roy/~yuuji/2017/pf2/05/index.html, (参照 2017-10-30). 株式会社 くるまやラーメン."くるまやラーメン メニュー". くるまやラーメン.http://www.kurumayaramen.co.jp/menu.htm ,(参照 2017-06-22). 株式会社 幸楽苑ホールディングス ."メニュー「幸楽苑」". 幸楽苑 . http://www.kourakuen.co.jp/products/menu.html ,(参照 2017-06-22). ●今回のデータファイルは前期で作ったプログラムで用いたものを利用しました。 上記2つのサイトはそのデータファイルを作る際に参考にしたものです。 ○感想 今回の課題はいつもよりも時間がかかってしまいギリギリでした。 最初のデータ[人気順]のところはデフォルトでソートになっていることが理解 できずにchoice = 0を入力しないでいたことで そこでてこずってしまいました。 次回からまたどんどん難しくなっていくと思うので 授業についていけるように今までの部分をきちんと理解し 自分でプログラムをつくる時に生かしていけるようにしたいと思います。 データとプログラムの添付忘れだったので 再度提出します。すみません。