2014-09-02 254 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