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>
<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>
<pre> 17 34 kept
8 68 struck
4 136 struck
2 272 struck
1 544 kept
578</pre>


=={{header|ALGOL 68}}==
=={{header|ALGOL 68}}==