Gray code: Difference between revisions

Add Cowgol
(Add PL/M)
(Add Cowgol)
Line 1,727:
32 100000%2 110000%2
</pre>
 
=={{header|Cowgol}}==
<syntaxhighlight lang="cowgol">include "cowgol.coh";
 
sub gray_encode(n: uint8): (r: uint8) is
r := n ^ n >> 1;
end sub;
 
sub gray_decode(n: uint8): (r: uint8) is
r := n;
while n > 0 loop
n := n >> 1;
r := r ^ n;
end loop;
end sub;
 
sub print_binary(n: uint8) is
var buf: uint8[9];
var ptr := &buf[8];
[ptr] := 0;
loop
ptr := @prev ptr;
[ptr] := (n & 1) + '0';
n := n >> 1;
if n == 0 then break; end if;
end loop;
print(ptr);
end sub;
 
sub print_row(n: uint8) is
print_i8(n);
print(":\t");
print_binary(n);
print("\t=>\t");
var gray_code := gray_encode(n);
print_binary(gray_code);
print("\t=>\t");
var decoded := gray_decode(gray_code);
print_i8(decoded);
print_nl();
end sub;
 
var i: uint8 := 0;
while i <= 31 loop
print_row(i);
i := i + 1;
end loop;</syntaxhighlight>
{{out}}
<pre>0: 0 => 0 => 0
1: 1 => 1 => 1
2: 10 => 11 => 2
3: 11 => 10 => 3
4: 100 => 110 => 4
5: 101 => 111 => 5
6: 110 => 101 => 6
7: 111 => 100 => 7
8: 1000 => 1100 => 8
9: 1001 => 1101 => 9
10: 1010 => 1111 => 10
11: 1011 => 1110 => 11
12: 1100 => 1010 => 12
13: 1101 => 1011 => 13
14: 1110 => 1001 => 14
15: 1111 => 1000 => 15
16: 10000 => 11000 => 16
17: 10001 => 11001 => 17
18: 10010 => 11011 => 18
19: 10011 => 11010 => 19
20: 10100 => 11110 => 20
21: 10101 => 11111 => 21
22: 10110 => 11101 => 22
23: 10111 => 11100 => 23
24: 11000 => 10100 => 24
25: 11001 => 10101 => 25
26: 11010 => 10111 => 26
27: 11011 => 10110 => 27
28: 11100 => 10010 => 28
29: 11101 => 10011 => 29
30: 11110 => 10001 => 30
31: 11111 => 10000 => 31</pre>
 
=={{header|Crystal}}==
2,093

edits