RosettaCodeData/Task/Loops-With-multiple-ranges/ALGOL-W/loops-with-multiple-ranges.alg
2023-07-01 13:44:08 -04:00

31 lines
2.1 KiB
Text

begin
% translation of task PL/1 code, with minimal changes, semicolons required by %
% PL/1 but redundant in Algol W retained ( technically they introduce empty %
% statements after the "if" in the loop body and before the final "end" ) %
% Note that in Algol W, the loop counter is a local variable to the loop and %
% the value of j is not available outside the loops %
procedure loopBody ( integer value j ); %(below) ** is exponentiation: 4**3=64 %
begin sum := sum + abs(j); %add absolute value of J.%
if abs(prod)<2**27 and j not = 0 then prod := prod*j; %PROD is small enough & J%
% ABS(n) = absolute value%
end; %not 0, then multiply it.%
%SUM and PROD are used for verification of J incrementation.%
integer prod, sum, x, y, z, one, three, seven;
prod := 1; %start with a product of unity. %
sum := 0; % " " " sum " zero. %
x := +5;
y := -5;
z := -2;
one := 1;
three := 3;
seven := 7;
for j := -three step three until round( 3**3 ) do loopBody( j );
for j := -seven step x until +seven do loopBody( j );
for j := 555 until 550 - y do loopBody( j );
for j := 22 step -three until -28 do loopBody( j );
for j := 1927 until 1939 do loopBody( j );
for j := x step z until y do loopBody( j );
for j := round( 11**x ) until round( 11**x ) + one do loopBody( j );
write(s_w := 0, " sum= ", sum); %display strings to term.%
write(s_w := 0, "prod= ", prod); % " " " " %
end.