Ethiopian multiplication: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 174: | Line 174: | ||
=={{header|Aime}}== |
=={{header|Aime}}== |
||
{{trans|C}} |
{{trans|C}} |
||
<lang aime> |
<lang aime>oid |
||
halve(integer &x) |
|||
{ |
|||
x >>= 1; |
|||
} |
|||
void |
|||
double(integer &x) |
|||
{ |
|||
x <<= 1; |
|||
} |
|||
integer |
|||
iseven(integer x) |
|||
{ |
|||
return (x & 1) == 0; |
|||
} |
|||
integer |
|||
ethiopian(integer plier, integer plicand, integer tutor) |
|||
{ |
|||
integer result; |
|||
result = 0; |
|||
if (tutor) { |
|||
o_text("ethiopian multiplication of "); |
|||
o_integer(plier); |
|||
o_text(" by "); |
|||
o_integer(plicand); |
|||
o_text("\n"); |
|||
} |
|||
while (plier >= 1) { |
|||
if (iseven(plier)) { |
|||
if (tutor) { |
|||
o_winteger(4, plier); |
|||
o_space(1); |
|||
o_winteger(6, plicand); |
|||
o_text(" struck\n"); |
|||
} |
|||
} else { |
|||
if (tutor) { |
|||
o_winteger(4, plier); |
|||
o_space(1); |
|||
o_winteger(6, plicand); |
|||
o_text(" kept\n"); |
|||
} |
|||
result += plicand; |
|||
} |
|||
halve(plier); |
|||
double(plicand); |
|||
} |
|||
return result; |
|||
} |
|||
integer |
|||
main(void) |
|||
{ |
|||
o_integer(ethiopian(17, 34, 1)); |
|||
o_byte('\n'); |
|||
return 0; |
|||
}</lang> |
|||
{{out}} |
{{out}} |
||
<pre> |
<pre> 17 34 kept |
||
8 68 struck |
|||
4 136 struck |
|||
2 272 struck |
|||
1 544 kept |
|||
578</pre> |
|||
=={{header|ALGOL 68}}== |
=={{header|ALGOL 68}}== |