RosettaCodeData/Task/Equilibrium-index/ANSI-BASIC/equilibrium-index.basic

86 lines
2.1 KiB
Text
Raw Permalink Normal View History

2026-04-30 12:34:36 -04:00
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