PDA

View Full Version : If Then Range



DynamoBen
- 28th June 2005, 21:18
I have run into this a number of times but have yet to come up with a good solution.

I would like to do the following:

If Variable= 5 thru 8 then
...do stuff here
endif

I have tried the AND, OR route with some success but I wasn't sure if that was my only option.

Thoughts on the best way to do this?

mytekcontrols
- 28th June 2005, 21:34
I would suggest the following:


If x => 5 Then
If x <= 8 Then
[do something code here]
Endif
Endif


Of course there are probably other possibilities.

DynamoBen
- 28th June 2005, 21:50
One problem, if something is greater than 8 then you miss it completely.

Dwayne
- 28th June 2005, 21:55
Hello Dynamo

Mytechs code:

If x => 5 Then
If x <= 8 Then
[do something code here]
Endif
Endif


Dynamo>>One problem, if something is greater than 8 then you miss it completely<<

If X is greather than 8, It will still work.

Lets suppose X is 9.

The first X statement says if X >= 5 do the next step.... it is, right?

So the next step is "If X<=8" And it isn't... so it will fall through that iff statement and fall out of the primary If statement (if X >=5).

Unless you have accidently left something out of your question??


Dwayne

DynamoBen
- 28th June 2005, 22:06
You are correct, didn't think through it completely.

I can do it that way if need be...I was just looking for a "cleaner" solution.

mytekcontrols
- 29th June 2005, 00:36
Hi Dynamo,

Here is another way of expressing the same thing.


If x => 5 And x <= 8 Then
[do something code here]
Endif

This does give a simpler look to your basic source code, but unfortunately it will cause PBP to compile it fatter (in otherwords it will take more program space in your PIC chip). Any time you use "And" in your If...Then statements you run this risk. The first code sample I gave you circumvents this problem, but does take a little getting used to.

Go ahead and try both examples, compiling each, and see the difference in the amount of bytes used.

edit: I just realized that you can save a heck of a lot more bytes by eliminating the "=>" and "<=" and replacing them with ">" and "<" (see examples below). Of course you will need to adjust your range values to compensate, but I think this would be well worth it for the greatly reduced program space needed.



If x > 4 Then
If x < 9 Then
[do something code here]
Endif
Endif

' -or-

If x > 4 And x < 9 Then
[do something code here]
Endif


Hint: Compile all the examples to see the differences in program space required.

I hope that answers all your questions,

DynamoBen
- 29th June 2005, 03:44
I did try your second example prior to posting. What I found was it includes everything leading up to 8. I think this has to do with the second condition in the statement. It was very odd to see.

mister_e
- 29th June 2005, 03:54
If (x > 4) And (x < 9) Then
[do something code here]
Endif


should fix it ;)

DynamoBen
- 29th June 2005, 03:56
I will give it a try and see how it effects my code size.

Thanks for all the help so far :D

Bruce
- 29th June 2005, 04:57
You can test various comparison equations with something like this. Just
compile each one separately.


X CON 10

Main:
IF (X=5) or (X<=8) THEN ' 30 words
@ nop
ENDIF


X CON 10

Main:
IF X => 5 THEN
IF X < 9 THEN ' 11 words
@ nop
ENDIF
ENDIF
Then you could do something like this to save yet a few more words.


X CON 10

' Upper boundary # = 8
' Lower boundary # = 5
' Range = 4 (5,6,7,8)

' IF unknown value (X - lower range #) < range, it's in range.

Main:
IF (X-5) < 4 THEN ' 8 words
@ nop
ENDIF
Just place some heavy-duty comments in there so you don't forget what the
heck it's doing down-the-road...;o]

mytekcontrols
- 29th June 2005, 14:30
Hey Bruce,

Wow I had to look at that last example a couple times before it sunk in! But sure enough it does the trick with the least amount of code required. Bravo!

DynamoBen
- 29th June 2005, 14:33
Bruce you rock. Between Bruce and Melanie they are PICBasic sages.