Stefano Crocco
1/5/2007 4:18:00 PM
Alle 16:58, venerdì 5 gennaio 2007, Jay Bornhoft ha scritto:
> I wrote a small program to solve for x using the quadratic formula but
> instead of receiving a + and - result I am getting two identical
> answers...
>
> Is the problem with my math or with my code?
>
> Also, how can I require the input to be a valid rational number?
>
>
> Thanks
>
>
> Code:
> # Name: quadratic-jb.rb
> # Date: January 2006
> # Author: Jason Bornhoft
> # Email: jbornhoft@gmail.com
>
> def sqr(a)
> a * a
> end
>
> def quad_pos(a, b, c)
> (-b + (Math.sqrt( sqr(b) - 4*a*c ))) / 2*a
> end
>
> def quad_neg(a, b, c)
> (-b - (Math.sqrt( sqr(b) - 4*a*c ))) / 2*a
> end
>
> print "
> Solving Quadratic Equations
> ---------------------------\n"
>
> puts "Enter the value of a: "
> a = gets.chomp.to_f
>
> puts "Enter the value of b: "
> b = gets.chomp.to_f
>
> puts " Enter the value of c: "
> c = gets.chomp.to_f
>
> puts "The formula is " + a.to_s + "x^2 + " + b.to_s + "x + " + c.to_s
> puts "and the values of x are:"
> puts quad_pos(a, b, c).to_s + " and " + quad_neg(a, b, c).to_s
Are you sure? I run your program with the values a=1, b=3 and c=1 and got the
correct results. Are you sure you didn't try with the coefficients of the
square of a bynomial (for instance a=1, b=2, c=1)?
As for checking the input, you can use a regexp:
input=gets.chomp
if !input.match /^\d+(.\d*)?$/
puts "This is not a number"
exit
end
By the way, in ruby you can use operator ** to raise to a power, there's no
need to define the sqr method: use b**2.
There's also a better method to print the result:
puts "The formula is #{a} x^2 + #{b} x + #{c}\nand the values of x are: \n#{quad_pos(a,b,c)} and #{quad_neg(a,b,c)}"
Stefano