2014-09-02 210 views
0

我完全地新编程和这个论坛。今天,我写我的第一个剧本,它到目前为止的工作:红宝石小数

def deltay(y2, y1) 
    #puts "Delta y=#{y2 - y1}" 
    y2 - y1 
end 

def deltax(x2, x1) 
    #puts "Delta x=#{x2- x1}" 
    x2-x1 
end 

def m(vardeltay, vardeltax) 
    #puts "m=#{vardeltay/vardeltax}" 
    vardeltay/vardeltax 
end 

def n(gradient, varx, vary) 
vary-gradient*varx 
end 

#activate the lines 21-25, when n is given. 
#puts "Welcome to my linear function script. Please start with telling me your n:" 

#print "> " ; n=STDIN.gets.to_i 

#puts "So your n is #{n}." 


puts "The first thing I need is your m.Please input your y2 then press RETURN and enter your y1:" 
print "> " ; vary2=STDIN.gets.to_i ; vary1=STDIN.gets.to_i ; deltay(vary2, vary1) 

puts "Now, please input your x2 then press RETURN and enter your x1:" 
print "> " ; varx2=STDIN.gets.to_i ; varx1=STDIN.gets.to_i ; deltax(varx2, varx1) 

puts "\n" 

puts "Your m equals #{m(deltay(vary2, vary1), deltax(varx2, varx1))}" 

varm=m(deltay(vary2, vary1), deltax(varx2, varx1)) 

puts "So, now we need n. Your current equalation looks like this:y=#{varm}m+n" 
puts "Lets insert your point, you gave me earlier : P(#{varx2}, #{vary2})" 
puts "So, that is:" 
puts "#{vary2}=#{varm*varx2}+n \nNow we going to perform |-#{varm*varx2}. And that equals #{n(varm, varx2, vary2)}" ; n=n(varm, varx2, vary2) #{#{vary2-(varm*varx2)}=n" ; n=vary2-(varm*varx2)} 

puts "So this is our equation so far:" 
puts "f(x)=#{varm}x+#{n}" 

puts "Now let's get to y, okay? So I need a value for x:" 
print "> " ; varx=STDIN.gets.to_i ; puts "y=#{varm*varx+n}" 

的问题是,如果我插入了Y2,Y1,X2或X1负整数(-1)/小数(1,2) ,它将无法正常工作。也许我的问题真的很愚蠢,但我没有找到任何帮助我解决问题的方法。

+0

欢迎计算器!请定义为什么此代码无法正常工作。提供你的输入,你想要的输出和错误的*输出,以更好地理解你的需求。否则,这个问题将会被视为不明确或不正确的话题。 – 2014-09-02 19:14:19

+0

定义“将无法正常工作”。 – 2014-09-02 19:15:16

+0

我以为我说得很清楚。例如,当你给他y2 = 1,2;或y2 = -3。即使只有一个整数有“”或为负,该脚本将不工作:[http://puu.sh/biFO9/8ea61c593f.png] 另外,我只注意到它不会工作时(X2-X1) >(Y2-Y1)。 @Define“无法正常工作”。 那么,m将被计算为假,因此整个均衡得到错误。 – Kaiton 2014-09-02 19:18:46

回答

2

看起来至少有两个问题在你的代码:使用to_i

  1. 您解析数字。此方法只返回整数(“整数”),并且任何小数部分被截断。您可以改用to_f。 (或者to_d如果你决定使用BigDecimal的,而不是浮点数)
  2. 它看起来像您使用逗号(,)作为小数点分隔符输入十进制数。您必须改用点(。)。

PS:它可以帮助你整理你的代码一点点。计算和字符串插值的混合使得代码难以理解。这同样适用于将多条语句在一行...

例如,这是难以阅读,特别是如果你没有智能语法高亮:

puts "Your m equals #{m(deltay(vary2, vary1), deltax(varx2, varx1))}" 

这是更好的:

value_of_m = m(deltay(vary2, vary1), deltax(varx2, varx1)) 
puts "Your m equals #{value_of_m}" 
+0

非常感谢你,工作。是的,我同意,这很匆忙,因为我很急。当我回到家时,我做了它,我还需要一个小时才能再次出发。该语言也是德语。 我只是不明白这与“计算和串iterpolations混合”的部分是什么excactly你的意思是,你能举个例子吗? – Kaiton 2014-09-02 19:30:24

+0

添加了一个示例 – 2014-09-02 19:41:27