[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Newbie Question

Christian Rubio

2/25/2008 2:18:00 PM

Help I am completely new to ruby and to OO programming. Why-does my code
not compile??

class Quadratic

def findroots()
b = (ARGV[0])
c = (ARGV[1])
$stdout.print("You entered " , ARGV[1], ARGV[0], "\n")
discriminant = b * b - 4.0 * c
sqroot = Math.sqrt(discriminant)

root1 = (-b + sqroot) / 2.0
root2 = (-b - sqroot) / 2.0

$stdout.print(root1)
$stdout.print(root2)
end

end

if __FILE__ == $0
qf = Quadratic.new
qf.findroots
end


5 Answers

Jano Svitok

2/25/2008 2:33:00 PM

0

On Mon, Feb 25, 2008 at 3:18 PM, Christian Rubio
<chris.rubio.osv@fedex.com> wrote:
> Help I am completely new to ruby and to OO programming. Why-does my code
> not compile??
>
> class Quadratic
>
> def findroots()
> b = (ARGV[0])
> c = (ARGV[1])
> $stdout.print("You entered " , ARGV[1], ARGV[0], "\n")
> discriminant = b * b - 4.0 * c
> sqroot = Math.sqrt(discriminant)
>
> root1 = (-b + sqroot) / 2.0
> root2 = (-b - sqroot) / 2.0
>
> $stdout.print(root1)
> $stdout.print(root2)
> end
>
> end
>
> if __FILE__ == $0
> qf = Quadratic.new
> qf.findroots
> end

Hi,

First, please, next time post the exact error message. You'll save
people that want to help you some investigation.

If the folowing message is similar to your error:
W:/var/x.rb:7:in `*': can't convert String into Integer (TypeError)
from W:/var/x.rb:7:in `findroots'
from W:/var/x.rb:21

then you're trying to multiply numbers by strings.
Replace
> b = (ARGV[0])
> c = (ARGV[1])
by
b = ARGV[0].to_f
c = ARGV[1].to_f
to_f will convert string to float. For more info, read the docs of
String#to_f and possibly the whole String class
(e.g. using RI or http://ruby-doc...)

If the message is different, please post it and will see.

Jano

Christian Rubio

2/25/2008 2:53:00 PM

0

Jano Svitok wrote:
> On Mon, Feb 25, 2008 at 3:18 PM, Christian Rubio
> <chris.rubio.osv@fedex.com> wrote:
>
>> Help I am completely new to ruby and to OO programming. Why-does my code
>> not compile??
>>
>>
> Replace
>
>> b = (ARGV[0])
>> c = (ARGV[1])
>>
> by
> b = ARGV[0].to_f
> c = ARGV[1].to_f
> to_f will convert string to float. For more info, read the docs of
> String#to_f and possibly the whole String class
> (e.g. using RI or http://ruby-doc...)
>
> If the message is different, please post it and will see.
>
> Jano
>
>
Hi Thanks for your help and directions. I made the above substitutions
and now I get the following error

% ruby quadratic.rb 1.0 1.0
You entered 1.0 1.0
quadratic.rb:17:in `sqrt': Numerical argument out of domain - sqrt
(Errno::EDOM)
from quadratic.rb:17:in `findroots'
from quadratic.rb:30
Here is my program,

#!/usr/bin/env ruby

###########################
##
## program that solve quadratic equation
##
###########################

class Quadratic

def findroots()
b = (ARGV[0].to_f)
c = (ARGV[1].to_f)
$stdout.print("You entered " , ARGV[1]," ", ARGV[0], "\n")
discriminant = b * b - 4.0 * c
sqroot = Math.sqrt(discriminant)

root1 = (-b + sqroot) / 2.0
root2 = (-b - sqroot) / 2.0

$stdout.print(root1)
$stdout.print(root2)
end

end

if __FILE__ == $0
qf = Quadratic.new
qf.findroots
end



Jano Svitok

2/25/2008 3:01:00 PM

0

On Mon, Feb 25, 2008 at 3:53 PM, Christian Rubio
<chris.rubio.osv@fedex.com> wrote:
> Jano Svitok wrote:
> > On Mon, Feb 25, 2008 at 3:18 PM, Christian Rubio
> > <chris.rubio.osv@fedex.com> wrote:
> >
> >> Help I am completely new to ruby and to OO programming. Why-does my code
> >> not compile??
> >>
> >>
>
> > Replace
> >
> >> b = (ARGV[0])
> >> c = (ARGV[1])
> >>
> > by
> > b = ARGV[0].to_f
> > c = ARGV[1].to_f
> > to_f will convert string to float. For more info, read the docs of
> > String#to_f and possibly the whole String class
> > (e.g. using RI or http://ruby-doc...)
> >
> > If the message is different, please post it and will see.
> >
> > Jano
> >
> >
> Hi Thanks for your help and directions. I made the above substitutions
> and now I get the following error
>
> % ruby quadratic.rb 1.0 1.0
> You entered 1.0 1.0
> quadratic.rb:17:in `sqrt': Numerical argument out of domain - sqrt
> (Errno::EDOM)
> from quadratic.rb:17:in `findroots'
> from quadratic.rb:30

That means you passed a number that has no real square root, for example -1.
Refresh your high school math and check the discriminant before you
call Math.sqrt ;-)
Otherwise, require 'complex' ;-)

Jano

Sebastian Hungerecker

2/25/2008 3:03:00 PM

0

Christian Rubio wrote:
> quadratic.rb:17:in `sqrt': Numerical argument out of domain - sqrt
> (Errno::EDOM)
> =A0 =A0 =A0 =A0 from quadratic.rb:17:in `findroots'
> =A0 =A0 =A0 =A0 from quadratic.rb:30

This means that your argument to sqrt is negative.
What values for b and c did you supply?


HTH,
Sebastian
=2D-=20
NP: Anathema - Cries On The Wind
Jabber: sepp2k@jabber.org
ICQ: 205544826

Christian Rubio

2/25/2008 3:15:00 PM

0

Sebastian Hungerecker wrote:
> Christian Rubio wrote:
>
>> quadratic.rb:17:in `sqrt': Numerical argument out of domain - sqrt
>> (Errno::EDOM)
>> from quadratic.rb:17:in `findroots'
>> from quadratic.rb:30
>>
>
> This means that your argument to sqrt is negative.
> What values for b and c did you supply?
>
>
> HTH,
> Sebastian
>
Thanks all for your replies. The input was invalid. I need to check for
legal input.
But I am new and just learning. Still trying to figure out whats going
on here.
The docs are hard to understand. So I am programming very basically.

Thanks so much
Chris