One problem, if something is greater than 8 then you miss it completely.
One problem, if something is greater than 8 then you miss it completely.
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
Ability to Fly:
Hurling yourself towards the ground, and missing.
Engineers that Contribute to flying:
Both optimists and pessimists contribute to the society. The optimist invents the aeroplane, the pessimist the parachute
Pilots that are Flying:
Those who know their limitations, and respect the green side of the grass...
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.
Hi Dynamo,
Here is another way of expressing the same thing.
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.Code:If x => 5 And x <= 8 Then [do something code here] Endif
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.
Hint: Compile all the examples to see the differences in program space required.Code: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
I hope that answers all your questions,
Last edited by mytekcontrols; - 29th June 2005 at 01:48.
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.
should fix itCode:If (x > 4) And (x < 9) Then [do something code here] Endif![]()
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
I will give it a try and see how it effects my code size.
Thanks for all the help so far![]()
You can test various comparison equations with something like this. Just
compile each one separately.
Code:X CON 10 Main: IF (X=5) or (X<=8) THEN ' 30 words @ nop ENDIFThen you could do something like this to save yet a few more words.Code:X CON 10 Main: IF X => 5 THEN IF X < 9 THEN ' 11 words @ nop ENDIF ENDIF
Just place some heavy-duty comments in there so you don't forget what theCode: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
heck it's doing down-the-road...;o]
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!
Bruce you rock. Between Bruce and Melanie they are PICBasic sages.
Bookmarks