Would this work to find the mean average and the number of elements greater than the average? # Calculating Avg and # of elements greater than Avg. in Ruby sum = 0.0 n = 0 count = 0 while figure = STDIN.gets.to_f sum += figure n += 1 end average = sum / n puts "Average = #{average}" while figure = STDIN.gets.to_f if figure > average count +=1 end end puts â??Number of elements greater than Avg = #{count}â?

on 2006-03-28 04:21

on 2006-03-28 04:38

I'm not sure how that would work.... you're re-reading the input stream twice. Anyway, here's my version. I could compact it more, but I won't try confusing you too much all at once. =) figures = STDIN.read.split("\n").map { |x| x.to_f } sum = figures.inject { |s, x| s + x } average = sum / figures.size high = figures.select { |x| x > average } puts "Average: #{average}" puts "Count greater than average: #{high.size}"

on 2006-03-28 04:43

There are a few problems. * Your input loop will never exit. On EOF STDIN.gets will return nil and then you call nil.to_f which is 0.0, which is a true value. * Your output needs new lines. Consider ---- input = [] while a = STDIN.gets input << a.to_f end average = input.inject(0) {|m,x| m = m+x} / input.size count = input.count {|x| x > average} print "Average = #{average}\n" print "Number of elements greater than Avg = #{count}\n" ----

on 2006-03-28 04:46

Or even better: ---- input = STDIN.readlines.collect {|x| x.to_f} average = input.inject(0) {|m,x| m = m+x} / input.size count = input.count {|x| x > average} print "Average = #{average}\n" print "Number of elements greater than Avg = #{count}\n" ----