質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

3回答

1649閲覧

入力した値の平均を出したい

ivrpocari

総合スコア23

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

1グッド

2クリップ

投稿2019/06/06 07:06

#問題点
1つ目の入力が母数。それ以降の入力を合計して母数で割った、つまり平均を出力したいです。
下記のコードだと、numbersが宣言されてませんというエラーが出ます。ご指摘お願いします。

ruby

1input_line = gets.to_i 2input_line.times do |numbers| 3 numbers = gets.to_i 4end 5sum_of_number = 0 6numbers.each do |number| 7 sum_of_number = sum_of_number + number 8end 9puts sum_of_number / input_line
DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mather

2019/06/06 11:17

既に回答がついていますが、質問をするときは表示されたエラーもコピーして質問に追加してください。 エラーメッセージをしっかり読むとわかると思うのですが、「numbersが宣言されてません」とはどの行のnumbersのことなのかが書かれているはずです。自分で原因を調べるための足がかりにしてください。
ivrpocari

2019/06/11 03:47

これだと相手に伝わりにくい質問ですね。次から、エラーを載せる癖をつけます。 ご指摘ありがとうございます。
guest

回答3

0

自分があまりtimesやeachを使わないので備忘録代わりに纏めてみる。
できるだけシンプルに書いたつもり。

3.times do |numbers| p numbers numbers = 777 p numbers end # p numbers #この行を有効にするとエラーになる(主さんのプログラムはこの状態)
0 777 1 777 2 777

まとめ
・timesの『|●●|』の中で宣言した変数(この場合numbers)はそのtimesループの中でのみ有効。
end以降でnumbersを参照しようとするとエラーになる。
・timesの『|●●|』の中で宣言した変数(この場合numbers)にはループ毎に『勝手に値が入ってくる』。ループ中でnumbersに値を入れる事は可能だが、ループの最初に戻るとまた次の値が勝手に入ってくる。
・この場合 numbers は変数であり、『配列ではない』。
この場合の配列はtimesの前の『3』(実質 [0,1,2] )に当たる。

投稿2019/06/06 08:20

torisan

総合スコア678

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

numbersが宣言されてません

おそらく6行目で出たエラーだと思います。
たしかに2行目で

input_line.times do |numbers|

と、numbersが使われているのですが、
これはループ内で宣言されたnumbersなので、ループ内でしか使えません。

ループ後でも使用したい場合はループ前に宣言しておきましょう。


ついでにいうと

input_line.times do |numbers| numbers = gets.to_i end

この処理は現状無意味です。

ループ内で宣言された変数に読み込んできた値を代入しているだけなので、
実質入力された値をそのまま捨てているのと変わりありません。

配列に足していくか、入力を読み取ったと同時に合計値として足していくかのどちらかでしょう。

投稿2019/06/06 07:21

dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

a.rb として保存

input_line = [*1..gets.to_i]# 要素 input_line.length.times do |i| i = gets.to_i end input_line.length # 要素の合計(ここでは5) sum_of_number = 0 # 合計値用の変数の定義 input_line.each do |number| sum_of_number = sum_of_number + number # 順番に足す end puts sum_of_number / input_line.length # => 3

ruby a.rb
5の入力の後に
1
2
3
4
5をそれぞれ入力すると
3が出力されます。

参考

  • Rubyで配列の要素の平均値を求める方法を現役エンジニアが解説【初心者向け】 | TechAcademyマガジン

https://techacademy.jp/magazine/19683

まずは愚直に書いてみましょう。

numbers = [1, 2, 3, 4, 5] # 要素 numbers.length # 要素の合計(ここでは5) sum_of_number = 0 # 合計値用の変数の定義 numbers.each do |number| sum_of_number = sum_of_number + number # 順番に足す end puts sum_of_number / numbers.length # => 3"
  • Rubyの実行環境はMacでは最初から用意されている件 - アラサーからのプログラマー

https://utina.yoshitokamizato.com/entry/2016/04/14/214506

で、その後に「ruby (さっき保存したテキストファイルの名前)」を入れます。

 

この記事の場合は「ruby ruby.rb」です。単語と単語の間は半角スペースで!これも間違うと動きません!

投稿2019/06/07 11:22

DrqYuto

総合スコア432

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DrqYuto

2019/06/08 08:58

すみません、間違えました。こっちが正しいです。 ``` input_line =Array.new(gets.to_i)# 要素 input_line.length.times do |i| i = gets.to_i input_line << i end input_line.compact! input_line.length # 要素の合計(ここでは5) sum_of_number = 0 # 合計値用の変数の定義 input_line.each do |number| sum_of_number = sum_of_number + number # 順番に足す end puts sum_of_number / input_line.length # => 3 ``` 参考 - new (Array) - Rubyリファレンス https://ref.xaio.jp/ruby/classes/array/new > Array.new(4) - 要素が「nil」のものを取り除く - 配列(Array)クラス - Ruby入門 https://www.javadrive.jp/ruby/array_class/index9.html "また「compact」メソッドには「compact!」メソッドも用意されています。 > Arrayオブジェクト.compact! 「compact!」メソッドの場合には新しい配列を返すのではなく、対象の配列自身を「nil」要素を取り除いた配列に変更します。" - 平均の意味と計算方法 | 全人類がわかる統計学 https://to-kei.net/basic/glossary/average/ > Aさん,Bさん,Cさん,Dさん,Eさんのテストの数学の得点がそれぞれ以下のようになりました。 名前 得点 Aさん 90点 Bさん 80点 Cさん 40点 Dさん 60点 Eさん 90点 この場合、平均の得点は、 90+80+40+60+905=72 となり、72点であることが分かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問