From: Ytoba Date: 2007-04-26T00:57:14+09:00 Subject: ax²+bx+c for newbies Here is some very easy code to understand. Since I started learning Ruby 2 years ago, I lacked examples. So if this code can help newbies, the goal will be achieved. Ytoba include Math require 'complex' require 'rational' begin class Eq2 def initialize(a,b,c) @a, @b, @c = Rational(a,1), Rational(b,1), Rational(c,1) end def to_s ch = "" ch += "#{@a}" unless @a == 1 ch += "-" if @a == -1 ch += "x²" ch += "+" unless @b < 0 ch += "#{@b}" unless @b == 1 ch += "-" if @b == -1 ch += "x" ch += "+" unless @c < 0 ch += "#{@c}" unless @c == 1 ch += "-" if @c == -1 ch end def delta @b*@b - Rational(4,1)*@a*@c end def solve dlt = delta puts "delta=#{dlt}" case when dlt > 0 r1 = (-@b - sqrt(delta))/(2*@a).to_f r2 = (-@b + sqrt(delta))/(2*@a).to_f puts "Two distinct roots" puts "r1=#{r1}" puts "r2=#{r2}" when dlt == 0 puts "A double root" r= -@b/(2*@a) puts "r=#{r}" when dlt < 0 puts "delta=#{-delta}i²" puts "Two complex roots" r1 = Complex(-@b/(2*@a).to_f, -sqrt(-delta)/(2*@a).to_f) r2 = Complex(-@b/(2*@a).to_f, sqrt(-delta)/(2*@a).to_f) puts "r1=#{r1}" puts "r2=#{r2}" end end end e = Eq2.new(1,-6,4) puts e e.solve f = Eq2.new(1,2,5) puts f f.solve end -- Posted via http://www.ruby-forum.com/.