Order two numerical lists: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (syntax highlighting fixup automation) |
(Added XPL0 example.) |
||
Line 2,553: | Line 2,553: | ||
</pre> |
</pre> |
||
=={{header|XPL0}}== |
|||
{{trans|ALGOL W}} |
|||
<syntaxhighlight lang "XPL0"> \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. |
|||
function ILT ( A, ALB, AUB, B, BLB, BUB ); |
|||
integer A, ALB, AUB, B, BLB, BUB; |
|||
integer APos, BPos, Equal; |
|||
begin |
|||
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 |
|||
return A( APos ) < B( BPos ) |
|||
else \all elements are Equal or one list is shorter |
|||
\A is < B if A has fewer elements |
|||
return APos > AUB and BPos <= BUB |
|||
end; \ILT |
|||
\Tests A < B has the expected result |
|||
procedure Test ( AName, A, ALB, AUB, BName, B, BLB, BUB, Expected ); |
|||
integer AName, A, ALB, AUB, BName, B, BLB, BUB, Expected; |
|||
integer IsLt; |
|||
begin |
|||
IsLt := ILT( A, ALB, AUB, B, BLB, BUB ); |
|||
Text(0, AName); |
|||
Text(0, if IsLt then " < " else " >= "); |
|||
Text(0, BName); |
|||
Text(0, if IsLt = Expected then " " else ", NOT as expected"); |
|||
CrLf(0); |
|||
end; \test |
|||
integer List1, List2, List3, List4, List5, List6, List7, List8; |
|||
begin |
|||
\test cases as in the BBC basic sample |
|||
List1 := [0, 1, 2, 1, 5, 2]; |
|||
List2 := [0, 1, 2, 1, 5, 2, 2]; |
|||
List3 := [0, 1, 2, 3, 4, 5]; |
|||
List4 := [0, 1, 2, 3, 4, 5]; |
|||
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 |
|||
List5 := [0, 9, 0, 2, 1, 0]; |
|||
List6 := [0, 4, 0, 7, 7]; |
|||
List7 := [0, 4, 0, 7]; |
|||
List8 := [0, 0]; |
|||
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</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
List1 < List2 |
|||
List2 < List3 |
|||
List3 >= List4 |
|||
List5 >= List6 |
|||
List6 >= List7 |
|||
List7 >= List8 |
|||
List8 < List7 |
|||
</pre> |
|||
=={{header|Yabasic}}== |
=={{header|Yabasic}}== |
||
Line 2,588: | Line 2,659: | ||
Igual que la entrada de BBC BASIC. |
Igual que la entrada de BBC BASIC. |
||
</pre> |
</pre> |
||
=={{header|zkl}}== |
=={{header|zkl}}== |