決められた商品に対する、支払金額計算プログラムを作ろう。
以下のような、商品と価格の書かれたファイルがある。
price.txt
サーモン 110円 イカゲソ 110円 えんがわ 110円 マグロ 110円 ネギトロ 110円 蛸 110円 赤貝 110円 穴子 110円 鉄火巻 110円 カッパ巻 110円 ハマチ 110円 サヨリ 180円 中トロ 180円 牛トロ 180円 寒ブリ 180円 イクラ 240円 タラバ 240円 大トロ 360円 ウニ 360円
プログラムを起動すると、このファイルを読み込み、その内容をメニュー番 号とともに標準出力に出す。
1 サーモン 110円 2 イカゲソ 110円 3 えんがわ 110円 4 マグロ 110円 5 ネギトロ 110円 6 蛸 110円 7 赤貝 110円 8 穴子 110円 9 鉄火巻 110円 10 カッパ巻 110円 11 ハマチ 110円 12 サヨリ 180円 13 中トロ 180円 14 牛トロ 180円 15 寒ブリ 180円 16 イクラ 240円 17 タラバ 240円 18 大トロ 360円 19 ウニ 360円
ユーザがメニュー番号を順次入力し、最後に qをタイプすると、それまで入力したメニューの価格を全て足した 金額を出力するプログラムを作成してみよう。
まず、price.txt
データファイルから価格リストを読み
込み商品名を配列変数に入れる部分を作ろう。さらにその値段部分を別の
配列変数に入れておこう。前者の配列変数を menu
, 後者の
配列変数を price
としよう。するとプログラム(の一部)は
以下のようになる。
menu = [] name = [] price = [] i = 1 open("price.txt", "r") do |neta| # price.txtを読み込みモードで開く while line = neta.gets # ファイルから1行ずつ読む if /(\w+)\s+(\d+)円/e =~ line # (数字)円 というパターンがあれば menu[i] = $1 # $1 は商品名 price[i] = $2.to_i # $2 が「数字」に当てはまるので整数化 printf "%3d %s", i, line # 商品番号と、読み込んだ行を画面表示 end i += 1 end end
続いてユーザが対話入力で、商品番号を入れるループを作ろう。
sum = 0 while true print "御注文は(番号で入れてね、q で終了)?: " line=gets.chomp! # ユーザの入力を line に入れる if line == "q" # 入力が "q" なら break # 終了 end number = line.to_i # 整数(メニュー番号)にする if number < 1 || number >= i puts "そんなメニューねぇでガス" redo end printf "はぁ〜い、「%s」一丁\n", menu[number] sum += price[number] end
変数 sum
に合計金額が入っているので、これに消費税
をかけて表示して終了する。
print "おあいそでガス\n" printf "全部で %d 円でガス。まいどっ\n", sum*1.05
以上を組み合わせることでプログラムが完成する。
sushi.rb
#!/usr/koeki/bin/ruby sum = 0 menu = [] name = [] price = [] i = 1 open("price.txt", "r") do |neta| # price.txtを読み込みモードで開く while line = neta.gets # ファイルから1行ずつ読む if /(\w+)\s+(\d+)円/e =~ line # (数字)円 というパターンがあれば menu[i] = $1 # $1 は商品名 price[i] = $2.to_i # $2 が「数字」に当てはまるので整数化 printf "%3d %s", i, line # 商品番号と、読み込んだ行を画面表示 end i += 1 end end while true print "御注文は(番号で入れてね、q で終了)?: " line=gets.chomp! # ユーザの入力を line に入れる if line == "q" # 入力が "q" なら break # 終了 end number = line.to_i # 整数(メニュー番号)にする if number < 1 || number >= i puts "そんなメニューねぇでガス" redo end printf "はぁ〜い、「%s」一丁\n", menu[number] sum += price[number] end print "おあいそでガス\n" printf "全部で %d 円でガス。まいどっ\n", sum*1.05
sushi.rb
と
price.txt
を保存し、実際に実行してみ
よう。