The following warnings occurred:
Warning [2] Undefined array key 0 - Line: 1677 - File: showthread.php PHP 8.2.31 (Linux)
File Line Function
/inc/class_error.php 157 errorHandler->error
/showthread.php 1677 errorHandler->error_callback
/showthread.php 916 buildtree




Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Logical operators bugged? (*solved*)
#2
Code:
dim i as uByte FUNCTION CONTRAST (colour as uByte) as uByte IF colour <=3 then return 7: END IF return 0 END FUNCTION FOR i = 0 to 7 PRINT "SENT ";i;" GOT ";CONTRAST(i) NEXT i

This comes back with:
Code:
Sent 0 Got 0 Should be Sent 0 got 7 Sent 1 Got 0 Should be Sent 1 got 7 Sent 2 Got 0 Should be Sent 2 got 7 Sent 3 Got 7 Should be Sent 3 got 7 Sent 4 Got 7 Should be Sent 4 got 0 Sent 5 Got 7 Should be Sent 5 got 0 Sent 6 Got 7 Should be Sent 6 got 0 Sent 7 Got 7 Should be Sent 7 got 0

Okay... with "<=3" at least 3 should be the same as 2...yes? And why do 0,1,2 get a return of 0 when they should get a return of 7?

Things get weirder:

Assuming that it was some weird return issue, I decided to return a variable instead:
Code:
dim i as uByte FUNCTION CONTRAST (colour as uByte) as uByte DIM rt as uByte IF colour <=3 then rt=7: END IF IF colour >=4 then rt=0: END IF return rt END FUNCTION FOR i = 0 to 7 PRINT "SENT ";i;" GOT ";CONTRAST(i) NEXT i

This gave me:

This comes back with:
Code:
Sent 0 Got 0 Sent 1 Got 0 Sent 2 Got 0 Sent 3 Got 7 Sent 4 Got 0 Sent 5 Got 0 Sent 6 Got 0 Sent 7 Got 0

I mean. SRSLY? My opinion of what that code does is clearly disagreeing with zxb's version..

Perhaps it's because we didn't initialise rt?

Code:
dim i as uByte FUNCTION CONTRAST (colour as uByte) as uByte DIM rt as uByte rt=9 IF colour <=3 then rt=7: END IF IF colour >=4 then rt=0: END IF return rt END FUNCTION FOR i = 0 to 7 PRINT "SENT ";i;" GOT ";CONTRAST(i) NEXT i

Gives us a little bit of a clearer picture:
Code:
Sent 0 Got 9 Sent 1 Got 9 Sent 2 Got 9 Sent 3 Got 7 Sent 4 Got 0 Sent 5 Got 0 Sent 6 Got 0 Sent 7 Got 0



So. We seem to have a complete logic failure.

0 <= 3 is FALSE and under certain circumstances 7<=3 is TRUE.

I am so going to bed. I've programmed myself into something psychedelic.

Incidentally:

Code:
FUNCTION CONTRAST (colour as uByte) as uByte DIM rt as uByte IF colour <4 then LET rt = 7: END IF IF colour >3 then let rt = 0: END IF return rt END FUNCTION

Seems to be working.

I suppose just asking for PAPER 9 and INK 9 to work is out of the question?
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: 1 Guest(s)