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

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

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

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

Q&A

1回答

683閲覧

配列データを選別して平均する(each版)

sun_earth__

総合スコア12

Ruby

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

1グッド

1クリップ

投稿2019/05/18 07:04

編集2019/05/18 07:20

数値データが配列に格納されていて、今その値の一例は次のようであるとする。
-7.1,9.8,23.7,5.6,3.0,30.8,27.3,23.6,39.1,-8.9,24.0,-6.1,21.3,16.0,-2.6,22.3,4.4,2.2,9.3,24.5,-2.0,-8.7,0.0,15.5,4.2
ここには全部で25個の数値があるが、負の数は誤ったデータであると考えられるので、除外して集計するものとする。
そしてその集計結果は次のような形で集計したい。いずれの行の最後にも改行があることに注意。

有効なデータの数 = 19
平均値 = 16.14

これと同じ動作をするプログラムを、以下の方針で作りなさい

・あらかじめ配列 nums に複数のデータが格納される処理が, プログラムの最初で行われているものとする。 その部分については書く必要はない。
・ただし,nums に格納されたデータのうち負のものは,誤りを含んだデータなので 集計しないようにしたい。
・each イテレータを使って 配列の要素を読み込んでいく,
・その要素がゼロ以上の値を持つデータであれば,データの数を数え上げるとともに, データを加算していく。
・ループが終了したら,上の例のように出力する。いずれの行の最後にも改行がある。
・プログラムのおよその構成は下の不完全なソースのようになっているので, 適当に補いなさい。

nums = [
30.2,32.6,5.5,34.7,8.4,30.0,38.4,3.2,-0.6,44.3,0.0,16.0,44.8,41.7,10.8,
26.2,40.4,22.5,-2.0,17.1,1.3,31.9,13.7,34.8,24.8,41.8,-1.7,34.8,24.2,32.2,
14.8,18.5,38.4,10.3,11.0,24.5,30.5,42.1,7.6,41.0,19.3,31.2,22.6,34.0,29.2,
30.6,29.9,18.9,18.8,13.8,20.0,-2.5,39.3,23.3,27.4,42.6,40.5,-2.5,38.0,9.5,
9.2,32.5,31.4,36.6,28.9,29.7,-4.3,5.4,38.9,4.3,40.1,18.6,18.3,26.4,23.2,
4.1,29.5,13.8,3.9,23.7,-1.0,38.0,-2.5,40.8,3.6,37.6,37.3,29.2,-3.7,17.7,
24.7,21.8,0.2,26.4,39.8,0.7,6.3,7.4,34.6,34.6]
#この上にある配列 nums の定義については省略すること。
#以下の部分を適当に補って作成して,下のフォームに記入しなさい。
count = 0
sum = 0.0
#each を使って nums から要素を取り出して ブロック変数 num に渡していく。
#ここで if を使ってデータを調べ, count, sum を足しこむ。
end
puts ??????
puts ??????

この回の授業を休んでしまい、まったくわかりません。
以下に私が試した結果を記します。
count = 0
sum = 0.0
nums.each do |num|
sum = sum + k
if nums >= 0
end
end
print ar
puts
puts "有効なデータの数 = #{count}"
puts "平均値 = #{sum / count}"

DrqYuto👍を押しています

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

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

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

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

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

otn

2019/05/18 10:16

何が分からないのですか? 質問じゃなくて、命令?
guest

回答1

0

・その要素がゼロ以上の値を持つデータであれば,データの数を数え上げるとともに, データを加算していく。

なので

ruby

1nums.each do |num| 2 if num >= 0 3 # countを1増やす 4 # sumをnumだけ増やす 5 end 6end

ですね


余談として「以下の方針で」以下をまるごと無視すると

ruby

1nums = [] # 省略 2filtered = nums.reject(&:negative?) 3count = filtered.size 4sum = filtered.sum 5avg = sum.fdiv(count) # sum / countでは、sumが整数の時に整数除算されてしまう 6 7puts "有効なデータの数 = #{count}" 8puts "平均値 = #{avg}" unless count.zero?

こんな感じ

投稿2019/05/18 08:57

編集2019/05/18 08:59
asm

総合スコア15147

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問