RosettaCodeData/Task/Cumulative-standard-deviation/ANSI-BASIC/cumulative-standard-deviation.basic
2026-04-30 12:34:36 -04:00

37 lines
1.2 KiB
Text

100 REM Cumulative standard deviation
110 DECLARE EXTERNAL SUB Init
120 DECLARE EXTERNAL SUB Add
130 DECLARE EXTERNAL FUNCTION Deviation
140 DIM TestData(1 TO 8)
150 FOR I = 1 TO 8
160 READ TestData(I)
170 NEXT I
180 DATA 2, 4, 4, 4, 5, 5, 7, 9
190 CALL Init(N, Sum, SumOfSquares)
200 PRINT "N ITEM AVG STDDEV"
210 FOR I = LBOUND(TestData) TO UBOUND(TestData)
220 CALL Add(N, Sum, SumOfSquares, TestData(I))
230 PRINT USING "# ": I;
240 PRINT USING " # ": TestData(I);
250 PRINT USING "#.### ": Sum / I;
260 PRINT USING " #.###": Deviation(N, Sum, SumOfSquares)
270 NEXT I
280 END
290 !
300 EXTERNAL SUB Init(N, Sum, SumOfSquares)
310 REM The parameters N, Sum, SumOfSquares are passed by reference. So, the arguments must be variables.
320 LET N = 0
330 LET Sum = 0.0
340 LET SumOfSquares = 0.0
350 END SUB
360 !
370 EXTERNAL SUB Add(N, Sum, SumOfSquares, P)
380 REM The parameters N, Sum, SumOfSquares are passed by reference. So, the arguments must be variables.
390 LET N = N + 1
400 LET Sum = Sum + P
410 LET SumOfSquares = SumOfSquares + P ^ 2
420 END SUB
430 !
440 EXTERNAL FUNCTION Deviation (N, Sum, SumOfSquares)
450 LET Deviation = SQR(SumOfSquares / N - (Sum / N) ^ 2)
460 END FUNCTION