RosettaCodeData/Task/Ethiopian-multiplication/S-BASIC/ethiopian-multiplication.basic
2023-07-01 13:44:08 -04:00

45 lines
900 B
Text

$constant true = 0FFFFH
$constant false = 0
function half(n = integer) = integer
end = n / 2
function twice(n = integer) = integer
end = n + n
rem - return true (-1) if n is even, otherwise false
function even(n = integer) = integer
var one = integer
one = 1 rem - only variables are compared bitwise
end = ((n and one) = 0)
rem - return i * j, optionally showing steps
function ethiopian(i, j, show = integer) = integer
var p = integer
p = 0
while i >= 1 do
begin
if even(i) then
begin
if show then print i;" ---";j
end
else
begin
if show then print i;" ";j;"+"
p = p + j
end
i = half(i)
j = twice(j)
end
if show then
begin
print "----------"
print " =";
end
end = p
rem - exercise the function
print "Multiplying 17 times 34"
print ethiopian(17,34,true)
end