Gray code
Karnaugh maps
Create functions to encode a number to and decode a number from Gray code.

Display the normal binary representations, Gray code representations, and decoded Gray code values for all 5-bit binary numbers (0-31 inclusive, leading 0's not necessary).

There are many possible Gray codes. The following encodes what is called "binary reflected Gray code."

Encoding (MSB is bit 0, b is binary, g is Gray code):

if b[i-1] = 1
   g[i] = not b[i]
else
   g[i] = b[i]
Or:

g = b xor (b logically right shifted 1 time)
Decoding (MSB is bit 0, b is binary, g is Gray code):

b[0] = g[0]

for other bits:
b[i] = g[i] xor b[i-1]
Reference
 Converting Between Gray and Binary Codes. It includes step-by-step animations.
' Gray code
PROGRAM "graycode"
VERSION "0.0001"
 
DECLARE FUNCTION Entry()
INTERNAL FUNCTION Encode(v&)
INTERNAL FUNCTION Decode(v&)
 
FUNCTION Entry()
  PRINT "decimal  binary   gray    decoded"
  FOR i& = 0 TO 31
    g& = Encode(i&)
    d& = Decode(g&)
    PRINT FORMAT$("  ##", i&); "     "; BIN$(i&, 5); "   "; BIN$(g&, 5);
    PRINT "   "; BIN$(d&, 5); FORMAT$("  ##", d&)
  NEXT i&
END FUNCTION
 
FUNCTION Encode(v&)
END FUNCTION v& ^ (v& >> 1)
 
FUNCTION Decode(v&)
  result& = 0
  DO WHILE v& > 0
    result& = result& ^ v&
    v& = v& >> 1
  LOOP
END FUNCTION result&
 
END PROGRAM
 