プロが教える店舗&オフィスのセキュリティ対策術

以下の練習問題をやっているのですが、どうもうまくいきません。

(1)担当名が"end"になる迄、担当名と売上を入力する。
(2)売上合計を求める。
(3)各担当の売上が売上合計の何%になるかの比率の計算を行う。
(4)担当名、売上、比率を表示する。

どこがいけないのがご教授頂けますでしょうか。
よろしくお願い致します。

***********************************

#! ruby -E Windows-31J:utf-8
# coding: utf-8

kensu = 0
uriage = 0
goukei = 0
uriage_t = [20]
tanto = [10]
tanto = [20][10]

puts("担当名がendで終了")
print(kensu = kensu + 1, "人目の担当名は")
tanto = $stdin.gets.chomp!
tanto.gsub!("\n", "")
print("売上")
uriage = $stdin.gets.chomp!.to_i


while tanto != "end"
kensu = kensu
goukei = goukei + uriage
uriage_t = uriage
tanto_t = tanto

print(kensu = kensu + 1, "人目の担当名は")
tanto = $stdin.gets.chomp!
tanto.gsub!("\n", "")
if tanto != "end"
print("売上")
uriage = $stdin.gets.chomp!.to_i
end

end


kensu = kensu + 1
goukei = goukei + uriage
uriage_t = uriage
tanto_t = tanto, "合計"




puts "________________________________________"
puts "  担当      売上  比率  "
puts "________________________________________"

for i in kensu
kensu += i
ritu = uriage * 100 / goukei
puts "担当名は#{tanto} 売上は#{uriage_t}円 比率は#{ritu}%"
end

A 回答 (3件)

何もかもおかしい。

あなたにはその問題は難しすぎます。
とりあえず、
(1) 以下を繰り返す
(2) 数字を入力する。0が入力されたら今までの合計を表示して終わる
(3) 入力された数字を合計する
をやってみてください。
    • good
    • 0

配列の使い方を理解できれば動くようになると思います。


気になる無駄な処理がかなりありますが、それは他人の書いたプログラムを見て勉強すれば徐々に見やすいプログラムを書けるようになると思います。

ぱっと見で分かる範囲で
uriage_t = [20]
tanto = [10]
tanto = [20][10]
同じ変数名が並んでいます、下の方はtanto_tなのでしょうね。

それと配列を確保したいのだと思うのですが、
uriage_t = [20]では20個の要素を確保するのではなく、20という数値1個が入った配列が代入されます。
このような場合は
uriage_t = []
とするのが良いと思います。
先に書いた3行は
uriage_t = []
tanto_t = []
とします。
tanto = [10]は後でtantoに代入されますので必要ありません。

uriage_t に保存したいとすると
uriage_t << uriage
で配列に追加されていきます。

あとは省略しますが、考えてみてください。

Ruby用のデバッガを使えば、一行ずつ実行して結果を確認することができますので、
利用してみてください。
    • good
    • 0

できるだけ質問者様が書かれたソースをもとに作り直してみました。


以下のようにしてください。
----------------------------------------------------
#! ruby -E Windows-31J:utf-8
# coding: utf-8

kensu = 0
goukei = 0
uriage_t = Array.new
tanto_t = Array.new
puts("担当名がendで終了")
while true
print(kensu + 1, "人目の担当名は")
tanto = $stdin.gets.chomp!
tanto.gsub!("\n", "")
if tanto == "end"
break
end
print("売上")
uriage = $stdin.gets.chomp!.to_i
kensu = kensu + 1
goukei = goukei + uriage
uriage_t << uriage
tanto_t << tanto
end
kensu = kensu + 1
uriage_t << goukei
tanto_t << "合計"
puts "________________________________________"
puts "  担当      売上  比率  "
puts "________________________________________"

(0...tanto_t.size).each do |i|
if goukei > 0
ritu = uriage_t[i] * 100 / goukei
else
ritu = 0
end
puts "担当名は#{tanto_t[i]} 売上は#{uriage_t[i]}円 比率は#{ritu}%"
end
---------------------------------------------------------
尚、合計が0円の時に、異常終了しますので、異常終了しないように
プログラムを修正しています。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!