Ethiopian multiplication: Difference between revisions

no edit summary
No edit summary
No edit summary
Line 274:
0001 000544 kept
578
 
=={{header|ALGOL-M}}==
<lang algol>
BEGIN
 
INTEGER FUNCTION HALF(I);
INTEGER I;
BEGIN
HALF := I / 2;
END;
 
INTEGER FUNCTION DOUBLE(I);
INTEGER I;
BEGIN
DOUBLE := I * 2;
END;
 
% RETURN 1 IF EVEN, OTHERWISE 0 %
INTEGER FUNCTION EVEN(I);
INTEGER I;
BEGIN
EVEN := 1 - (I - 2 * (I / 2));
END;
 
INTEGER FUNCTION ETHIOPIAN(I, J, SHOW);
INTEGER I, J, SHOW;
BEGIN
INTEGER P, YES;
YES := 1;
P := 0;
WHILE I >= 1 DO
BEGIN
IF EVEN(I) = 1 THEN
BEGIN
IF SHOW = YES THEN WRITE(I," ----", J);
END
ELSE
BEGIN
IF SHOW = YES THEN WRITE(I,J);
P := P + J;
END;
I := HALF(I);
J := DOUBLE(J);
END;
IF SHOW = YES THEN WRITE(" =");
ETHIOPIAN := P;
END;
 
% EXERCISE THE FUNCTION %
INTEGER YES;
YES := 1;
WRITE(ETHIOPIAN(17,34,YES));
 
END</lang>
{{out}}
<pre>
17 34
8 ---- 68
4 ---- 136
2 ---- 272
1 544
= 578
</pre>
 
 
=={{header|ALGOL W}}==
211

edits