teratail header banner
teratail header banner
質問するログイン新規登録
Ruby

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

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

1838閲覧

ruby 配列の平均値

pinope

総合スコア9

Ruby

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

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2019/08/04 08:59

編集2019/08/04 09:27

0

1

実現したいこと:配列の平均値を出力

プログラム初心者です。
ar=[12,89,56,49,28,56,48,20,34,52] の平均値を出力するプログラムをfor文を使って書きたいのですが、エラーになってしまいます。

どなたかご教授頂けたらありがたいです。

ar= [12,89,56,49,28,56,48,20,34,52]
n=ar.size;s=0
for i in 1..n
s=s+ar[i]
end
puts s / ar.size
エラーメッセージ
rb:4:non float value (TypeError)
ちなみに、
ar= [12,89,56,49,28,56,48,20,34,52]
n=ar.size;s=0
for i in 1..ar[n]
s=s+i
end
puts s / ar.size

forの範囲をar[n]にすると、
ArgumentError:bad value for range

とエラーメッセージが出ます。

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

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

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

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

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

takasima20

2019/08/04 09:02

i じゃなくて ar[i] を足しましょう
pinope

2019/08/04 09:24

ご指摘ありがとうございます。 ar= [12,89,56,49,28,56,48,20,34,52] n=ar.size;s=0 for i in 1..n s=s+ar[i] end puts s / ar.size こちらでよろしいでしょうか。
guest

回答2

0

つぎのコードを研究してみてください。
a.rb

ruby

1ar= [12, 89, 56, 49, 28, 56, 48, 20, 34, 52] 2 3total = 0 4for i in 0..(ar.size - 1) 5 total += ar[i] 6end 7puts "#{1.0 * total / ar.size}, #{total}" 8 9total = 0 10ar.size.times {|i| total += ar[i]} 11puts "#{1.0 * total / ar.size}, #{total}" 12 13total = 0 14ar.each {|x| total += x} 15puts "#{1.0 * total / ar.size}, #{total}" 16 17total = ar.inject(0){|x, memo| memo += x} 18puts "#{1.0 * total / ar.size}, #{total}" 19 20total = ar.each_with_object([0]){|x, memo| memo[0] += x}[0] 21puts "#{1.0 * total / ar.size}, #{total}" 22 23total = ar.sum

投稿2019/08/04 13:08

katoy

総合スコア22328

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

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

pinope

2019/08/04 17:20

複数の回答ありがとうございます。 試してみます。
guest

0

ベストアンサー

以下のようにしてください。
配列の添え字は1から始まるのではなく0から始まります。
そのためfor i in 1..最後 ではなく
for i in 0..最後から-1引いた値 とします。
また、合計値は整数なので整数/整数の結果は、整数になります。(1未満は切り捨てされます)
これを防止するためには、実数/整数の形にします。(どちらかが実数ならOK)
そのためにs/ar.sizeでなくs.to_f/ar.size にします。

Ruby

1ar= [12,89,56,49,28,56,48,20,34,52] 2n=ar.size-1;s=0 3for i in 0..n 4s=s+ar[i] 5end 6puts s.to_f / ar.size

投稿2019/08/04 10:02

tatsu99

総合スコア5540

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

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

pinope

2019/08/04 10:25

ありがとうございます。 無事プログラミングが動きました。 配列の添え字は0からと覚えておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問