[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Would this be possible?

Craig Schweitzer

3/28/2006 12:22:00 AM

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}â?

--
Posted via http://www.ruby-....


4 Answers

matthew.moss.coder

3/28/2006 12:39:00 AM

0

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}"


Chris Alfeld

3/28/2006 12:44:00 AM

0

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 3/27/06, Craig Schweitzer <cschweitzer@cfl.rr.com> wrote:
> 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}"
>
> --
> Posted via http://www.ruby-....
>
>


Chris Alfeld

3/28/2006 12:46:00 AM

0

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"
----


dblack

3/28/2006 1:29:00 AM

0