Nearest Number
Blitz3D Forums/Blitz3D Beginners Area/Nearest Number
| ||
| I am scratching my head again :-) I have two numbers, X and Y, and know that X is greater than Y. I have a third number NUM that I know is somewhere between X and Y (it could also equal X or Y). What is the best way of seeing which of the two numbers X and Y NUM is nearest to? |
| ||
| difference=(X-NUM-Y) If difference>(X-Y/2) then Print "Closer to Y" If difference<=(X-Y/2) then Print "Closer to X" (I think - bit tired) |
| ||
| Thank you, Kind sir! |
| ||
| Try it first :) I cannot test it as I am at work right now! |
| ||
| Hi Malice, it doesn't quite work I think. I put together a simple test programme as follows: While Not KeyHit(57) X=Input("What is the high number?") Y=Input("What is the low number?") NUM=Input("what is the middle number?") difference=(X-NUM-Y) If difference>(X-Y/2) Then Print NUM+" is closer to "+Y+" than "+X If difference<=(X-Y/2) Then Print NUM+" is closer to "+X+" than "+Y Print "" Print "" Print "" Wend and it tends to default to the bigger number. |
| ||
| Okay - sorry got them wrong way round... Also added the equals part!
While Not KeyHit(57)
X=Input("What is the high number?")
Y=Input("What is the low number?")
NUM=Input("what is the middle number?")
difference=(X-NUM-Y)
If difference>(Y-X/2) Then Print NUM+" is closer to "+Y+" than "+X
If difference<(Y-X/2) Then Print NUM+" is closer to "+X+" than "+Y
If difference=(Y-X/2) Then Print NUM+" is exactly between "+X+" and "+Y
Print ""
Print ""
Print ""
Wend
|
| ||
| Oh and it breaks if : X-Y=1 and NUM=Y |
| ||
Isn't it just...
While Not KeyHit(1)
x=Input("High Number ")
y=Input("Low Number ")
num=Input("Middle Number ")
If (x-num<num-y) Then Print "X is nearer"
If (x-num>num-y) Then Print "Y is nearer"
If (x-num=num-y) Then Print "They are both as close"
Print
Wend
and use floats if you want it to not break when x-y=1 |
| ||
This returns the number that 'NUM' is nearest to, or 0 if the difference between each number and NUM is equal:Function NearestTo(X,Y,NUM) If Abs(x-num) < Abs(y-num) Result = X ElseIf Abs(x-num) > Abs(y-num) Result = Y ElseIf Abs(x-num) = Abs(y-num) Result = 0 EndIf Return result End Function |
| ||
| Thanks to both Malice and Shambler. Job done! :-) |
| ||
A little variation based on finding the midpoint and then seeing which side of it NUM lies on...
While Not KeyHit(57)
X=Input("What is the high number?")
Y=Input("What is the low number?")
NUM=Input("what is the middle number?")
difference=(X-NUM-Y)
midpoint# = (X + Y)/2.0
ComparePosition# = midpoint#-NUM
If ComparePosition<0 Then
Print NUM+" is closer to "+Y+" than "+X
Else
If ComparePosition > 0 Then
Print NUM+" is closer to "+X+" than "+Y
Else
Print NUM+" is exactly between "+X+" and "+Y
EndIf
EndIf
Print ""
Print ""
Print ""
Wend
|