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