Order two numerical lists: Difference between revisions
Content added Content deleted
m (→{{header|ALGOL 68}}: removed unused declaration) |
(Added Algol W) |
||
Line 276: | Line 276: | ||
END</lang> |
END</lang> |
||
{{out}} |
|||
<pre> |
|||
list1 < list2 |
|||
list2 < list3 |
|||
list3 >= list4 |
|||
list5 >= list6 |
|||
list6 >= list7 |
|||
list7 >= list8 |
|||
list8 < list7 |
|||
</pre> |
|||
=={{header|ALGOL W}}== |
|||
{{Trans|ALGOL 68}} |
|||
<lang algolw>begin % compare lists (rows) of integers % |
|||
% returns TRUE if there is an element in a that is < the corresponding % |
|||
% element in b and all previous elements are equal, FALSE otherwise % |
|||
% the bounds of a and b should aLb :: aUb and bLb :: bUb % |
|||
logical procedure iLT ( integer array a ( * ) |
|||
; integer value aLb, aUb |
|||
; integer array b ( * ) |
|||
; integer value bLb, bUb |
|||
) ; |
|||
begin |
|||
integer aPos, bPos; |
|||
logical equal; |
|||
aPos := aLb; |
|||
bPos := bLb; |
|||
equal := true; |
|||
while aPos <= aUb and bPos <= bUb and equal do begin |
|||
equal := a( aPos ) = b( bPos ); |
|||
if equal then begin |
|||
aPos := aPOs + 1; |
|||
bPos := bPos + 1 |
|||
end if_equal |
|||
end while_more_elements_and_equal ; |
|||
if not equal |
|||
then % there is an element in a and b that is not equal % |
|||
a( aPos ) < b( bPos ) |
|||
else % all elements are equal or one list is shorter % |
|||
% a is < b if a has fewer elements % |
|||
aPos > aUb and bPos <= bUb |
|||
end iLT ; |
|||
% tests a < b has the expected result % |
|||
procedure test ( string(5) value aName |
|||
; integer array a ( * ) |
|||
; integer value aLb, aUb |
|||
; string(5) value bName |
|||
; integer array b ( * ) |
|||
; integer value bLb, bUb |
|||
; logical value expected |
|||
) ; |
|||
begin |
|||
logical isLt; |
|||
isLt := iLT( a, aLb, aUb, b, bLb, bUb ); |
|||
write( aName, if isLt then " < " else " >= ", bName |
|||
, if isLt = expected then "" else ", NOT as expected" |
|||
) |
|||
end test ; |
|||
integer array list1, list3, list4 ( 1 :: 5 ); |
|||
integer array list2 ( 1 :: 6 ); |
|||
integer array list5 ( 1 :: 5 ); |
|||
integer array list6 ( 1 :: 4 ); |
|||
integer array list7 ( 1 :: 3 ); |
|||
integer array list8 ( 1 :: 1 ); |
|||
integer aPos; |
|||
% test cases as in the BBC basic sample % |
|||
aPos := 1; for i := 1, 2, 1, 5, 2 do begin list1( aPos ) := i; aPos := aPos + 1 end; |
|||
aPos := 1; for i := 1, 2, 1, 5, 2, 2 do begin list2( aPos ) := i; aPos := aPos + 1 end; |
|||
aPos := 1; for i := 1, 2, 3, 4, 5 do begin list3( aPos ) := i; aPos := aPos + 1 end; |
|||
aPos := 1; for i := 1, 2, 3, 4, 5 do begin list4( aPos ) := i; aPos := aPos + 1 end; |
|||
test( "list1", list1, 1, 5, "list2", list2, 1, 6, true ); |
|||
test( "list2", list2, 1, 6, "list3", list3, 1, 5, true ); |
|||
test( "list3", list3, 1, 5, "list4", list4, 1, 5, false ); |
|||
% additional test cases % |
|||
aPos := 1; for i := 9, 0, 2, 1, 0 do begin list5( aPos ) := i; aPos := aPos + 1 end; |
|||
aPos := 1; for i := 4, 0, 7, 7 do begin list6( aPos ) := i; aPos := aPos + 1 end; |
|||
aPos := 1; for i := 4, 0, 7 do begin list7( aPos ) := i; aPos := aPos + 1 end; |
|||
test( "list5", list5, 1, 5, "list6", list6, 1, 4, false ); |
|||
test( "list6", list6, 1, 4, "list7", list7, 1, 3, false ); |
|||
test( "list7", list7, 1, 3, "list8", list8, 1, 0, false ); |
|||
test( "list8", list8, 1, 0, "list7", list7, 1, 3, true ) |
|||
end.</lang> |
|||
{{out}} |
{{out}} |
||
<pre> |
<pre> |