RosettaCodeData/Task/Equilibrium-index/ANSI-BASIC/equilibrium-index.basic
2026-04-30 12:34:36 -04:00

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