85 lines
2.1 KiB
Text
85 lines
2.1 KiB
Text
100 REM Equilibrium index
|
|
110 DECLARE EXTERNAL SUB PrintArray
|
|
120 DECLARE EXTERNAL SUB PrintIndicesOfTrue
|
|
130 DECLARE EXTERNAL SUB GetIndices
|
|
140 DIM X1(0 TO 6), X1Result(0 TO 6)
|
|
150 FOR I = 0 TO 6
|
|
160 READ X1(I)
|
|
170 NEXT I
|
|
180 DATA -7, 1, 5, 2, -4, 3, 0
|
|
190 CALL GetIndices(X1, X1Result)
|
|
200 DIM X2(0 TO 2), X2Result(0 TO 2)
|
|
210 FOR I = 0 TO 2
|
|
220 READ X2(I)
|
|
230 NEXT I
|
|
240 DATA 2, 4, 6
|
|
250 CALL GetIndices(X2, X2Result)
|
|
260 DIM X3(0 TO 2), X3Result(0 TO 2)
|
|
270 FOR I = 0 TO 2
|
|
280 READ X3(I)
|
|
290 NEXT I
|
|
300 DATA 2, 9, 2
|
|
310 CALL GetIndices(X3, X3Result)
|
|
320 DIM X4(0 TO 6), X4Result(0 TO 6)
|
|
330 FOR I = 0 TO 6
|
|
340 READ X4(I)
|
|
350 NEXT I
|
|
360 DATA 1, -1, 1, -1, 1 ,-1, 1
|
|
370 CALL GetIndices(X4, X4Result)
|
|
380 PRINT "Results:"
|
|
390 PRINT
|
|
400 PRINT "X1:";
|
|
410 CALL PrintArray(X1, 1)
|
|
420 PRINT "Eqs:";
|
|
430 CALL PrintIndicesOfTrue(X1Result, 1)
|
|
440 PRINT
|
|
450 PRINT "X2:";
|
|
460 CALL PrintArray(X2, 1)
|
|
470 PRINT "Eqs:";
|
|
480 CALL PrintIndicesOfTrue(X2Result, 1)
|
|
490 PRINT
|
|
500 PRINT "X3:";
|
|
510 CALL PrintArray(X3, 1)
|
|
520 PRINT "Eqs:";
|
|
530 CALL PrintIndicesOfTrue(X3Result, 1)
|
|
540 PRINT
|
|
550 PRINT "X4:";
|
|
560 CALL PrintArray(X4, 1)
|
|
570 PRINT "Eqs:";
|
|
580 CALL PrintIndicesOfTrue(X4Result, 1)
|
|
590 END
|
|
600 !
|
|
610 EXTERNAL SUB PrintArray(Nums(), NL)
|
|
620 FOR I = LBOUND(Nums) TO UBOUND(Nums)
|
|
630 PRINT Nums(I);
|
|
640 NEXT I
|
|
650 IF NL <> 0 THEN PRINT
|
|
660 END SUB
|
|
670 !
|
|
680 EXTERNAL SUB PrintIndicesOfTrue(Bools(), NL)
|
|
690 FOR I = LBOUND(Bools) TO UBOUND(Bools)
|
|
700 IF Bools(I) <> 0 THEN PRINT I;
|
|
710 NEXT I
|
|
720 IF NL <> 0 THEN PRINT
|
|
730 END SUB
|
|
740 !
|
|
750 EXTERNAL SUB GetIndices(Nums(), Result())
|
|
760 IF (LBOUND(Nums) <> LBOUND(Result)) OR (UBOUND(Nums) <> UBOUND(Result)) THEN
|
|
770 PRINT "Range of indices in both arrays should be the same"
|
|
780 STOP
|
|
790 END IF
|
|
800 LET LeftSum = 0
|
|
810 LET RightSum = 0
|
|
820 FOR I = LBOUND(Nums) TO UBOUND(Nums)
|
|
830 LET RightSum = RightSum + Nums (I)
|
|
840 NEXT I
|
|
850 FOR I = LBOUND(Nums) TO UBOUND(Nums)
|
|
860 LET RightSum = RightSum - Nums (I)
|
|
870 IF LeftSum = RightSum THEN
|
|
880 LET Result(I) = 1
|
|
890 ELSE
|
|
900 LET Result(I) = 0
|
|
910 END IF
|
|
920 LET LeftSum = LeftSum + Nums(I)
|
|
930 NEXT I
|
|
940 END SUB
|