Anonymous user
Ethiopian multiplication: Difference between revisions
→{{header|Aime}}
No edit summary |
|||
Line 174:
=={{header|Aime}}==
{{trans|C}}
<lang aime>
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}}
<pre>
8 68 struck
4 136 struck
2 272 struck
1 544 kept
578</pre>
=={{header|ALGOL 68}}==
|