41 lines
1.9 KiB
Text
41 lines
1.9 KiB
Text
begin
|
|
% sets the first n elements of s to the sequences of values specified by start, stop and increment %
|
|
% s( 0 ) is set to the number of elements of s that have been set, in case the sequence ends before n %
|
|
procedure sequence ( integer array s ( * )
|
|
; integer value n, start, stop, increment
|
|
) ;
|
|
begin
|
|
integer sPos;
|
|
for j := 0 until n do s( j ) := 0;
|
|
sPos := 1;
|
|
for j := start step increment until stop do begin
|
|
if sPos > n then goto done;
|
|
s( sPos ) := j;
|
|
s( 0 ) := s( 0 ) + 1;
|
|
sPos := sPos + 1;
|
|
end for_j ;
|
|
done:
|
|
end sequence ;
|
|
% tests the sequence procedure %
|
|
procedure testSequence( integer value start, stop, increment
|
|
; string(48) value legend
|
|
) ;
|
|
begin
|
|
integer array s ( 0 :: 10 );
|
|
sequence( s, 10, start, stop, increment );
|
|
s_w := 0; % set output formating %
|
|
i_w := 4;
|
|
write( legend, ": " );
|
|
for i := 1 until s( 0 ) do writeon( s( i ) )
|
|
end testSequence ;
|
|
% task trest cases %
|
|
testSequence( -2, 2, 1, "Normal" );
|
|
testSequence( -2, 2, 0, "Zero increment" );
|
|
testSequence( -2, 2, -1, "Increments away from stop value" );
|
|
testSequence( -2, 2, 10, "First increment is beyond stop value" );
|
|
testSequence( 2, -2, 1, "Start more than stop: positive increment" );
|
|
testSequence( 2, 2, 1, "Start equal stop: positive increment" );
|
|
testSequence( 2, 2, -1, "Start equal stop: negative increment" );
|
|
testSequence( 2, 2, 0, "Start equal stop: zero increment" );
|
|
testSequence( 0, 0, 0, "Start equal stop equal zero: zero increment" )
|
|
end.
|