決められた商品に対する、支払金額計算プログラムを作ろう。
以下のような、商品と価格の書かれたファイルがある。
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 = []
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 = []
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を保存し、実際に実行してみ
よう。