- 締切済み
Ruby初心者です。
以下の練習問題をやっているのですが、どうもうまくいきません。 (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
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- tatsu99
- ベストアンサー率52% (391/751)
できるだけ質問者様が書かれたソースをもとに作り直してみました。 以下のようにしてください。 ---------------------------------------------------- #! 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円の時に、異常終了しますので、異常終了しないように プログラムを修正しています。
- ki073
- ベストアンサー率77% (491/634)
配列の使い方を理解できれば動くようになると思います。 気になる無駄な処理がかなりありますが、それは他人の書いたプログラムを見て勉強すれば徐々に見やすいプログラムを書けるようになると思います。 ぱっと見で分かる範囲で 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用のデバッガを使えば、一行ずつ実行して結果を確認することができますので、 利用してみてください。
- notnot
- ベストアンサー率47% (4900/10361)
何もかもおかしい。あなたにはその問題は難しすぎます。 とりあえず、 (1) 以下を繰り返す (2) 数字を入力する。0が入力されたら今までの合計を表示して終わる (3) 入力された数字を合計する をやってみてください。