Non-decimal radices/Convert: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (Add PL/M) |
Not a robot (talk | contribs) (Add BCPL) |
||
Line 564: | Line 564: | ||
101111111 (base 2) -> 383 (decimal) |
101111111 (base 2) -> 383 (decimal) |
||
</pre> |
</pre> |
||
=={{header|BCPL}}== |
|||
<lang bcpl>get "libhdr"; |
|||
// Reverse a string |
|||
let reverse(str) = valof |
|||
$( let i = 1 |
|||
let j = str%0 |
|||
while i<j |
|||
$( let c = str%i |
|||
str%i := str%j |
|||
str%j := c |
|||
i := i+1 |
|||
j := j-1 |
|||
$) |
|||
resultis str |
|||
$) |
|||
// Convert number to string given base |
|||
let itoa(n, base, buf) = valof |
|||
$( let digitchar(n) = |
|||
n < 10 -> n + '0', |
|||
(n - 10) + 'A' |
|||
buf%0 := 0 |
|||
$( buf%0 := buf%0 + 1 |
|||
buf%(buf%0) := digitchar(n rem base) |
|||
n := n / base |
|||
$) repeatuntil n<=0 |
|||
resultis reverse(buf) |
|||
$) |
|||
// Convert string to number given base |
|||
let atoi(str, base) = valof |
|||
$( let digitval(d, base) = |
|||
'0' <= d <= '9' -> d - '0', |
|||
'A' <= d <= 'Z' -> (d - 'A') + 10, |
|||
'a' <= d <= 'z' -> (d - 'a') + 10, |
|||
0 |
|||
let result = 0 |
|||
for i=1 to str%0 do |
|||
result := result * base + digitval(str%i, base) |
|||
resultis result |
|||
$) |
|||
// Examples |
|||
let start() be |
|||
$( let buffer = vec 64 |
|||
writes("1234 in bases 2-36:*N") |
|||
for base=2 to 36 do |
|||
writef("Base %I2: %S*N", base, itoa(1234, base, buffer)) |
|||
writes("*N*"25*" in bases 10-36:*N") |
|||
for base=10 to 36 do |
|||
writef("Base %I2: %N*N", base, atoi("25", base)) |
|||
$)</lang> |
|||
{{out}} |
|||
<pre style='height:50ex;'>1234 in bases 2-36: |
|||
Base 2: 10011010010 |
|||
Base 3: 1200201 |
|||
Base 4: 103102 |
|||
Base 5: 14414 |
|||
Base 6: 5414 |
|||
Base 7: 3412 |
|||
Base 8: 2322 |
|||
Base 9: 1621 |
|||
Base 10: 1234 |
|||
Base 11: A22 |
|||
Base 12: 86A |
|||
Base 13: 73C |
|||
Base 14: 642 |
|||
Base 15: 574 |
|||
Base 16: 4D2 |
|||
Base 17: 44A |
|||
Base 18: 3EA |
|||
Base 19: 37I |
|||
Base 20: 31E |
|||
Base 21: 2GG |
|||
Base 22: 2C2 |
|||
Base 23: 27F |
|||
Base 24: 23A |
|||
Base 25: 1O9 |
|||
Base 26: 1LC |
|||
Base 27: 1IJ |
|||
Base 28: 1G2 |
|||
Base 29: 1DG |
|||
Base 30: 1B4 |
|||
Base 31: 18P |
|||
Base 32: 16I |
|||
Base 33: 14D |
|||
Base 34: 12A |
|||
Base 35: 109 |
|||
Base 36: YA |
|||
"25" in bases 10-36: |
|||
Base 10: 25 |
|||
Base 11: 27 |
|||
Base 12: 29 |
|||
Base 13: 31 |
|||
Base 14: 33 |
|||
Base 15: 35 |
|||
Base 16: 37 |
|||
Base 17: 39 |
|||
Base 18: 41 |
|||
Base 19: 43 |
|||
Base 20: 45 |
|||
Base 21: 47 |
|||
Base 22: 49 |
|||
Base 23: 51 |
|||
Base 24: 53 |
|||
Base 25: 55 |
|||
Base 26: 57 |
|||
Base 27: 59 |
|||
Base 28: 61 |
|||
Base 29: 63 |
|||
Base 30: 65 |
|||
Base 31: 67 |
|||
Base 32: 69 |
|||
Base 33: 71 |
|||
Base 34: 73 |
|||
Base 35: 75 |
|||
Base 36: 77</pre> |
|||
=={{header|Bracmat}}== |
=={{header|Bracmat}}== |