我正在尝试通过添加以下功能来更新程序: • 集中趋势的两种度量 - 几何平均值 (GM) 和调和平均值 (HM) • 分散度的一种测量方法 - 均方根 (RMS)
GM = [x(1)⋅x(2)⋅x(3)⋅…⋅x(n)]^(1/n)
HM = n / SR
SR = 1/x(1) + 1/x(2) + … + 1/x(n)
RMS = sqrt(Sx2/n]
Sx2 = x(1)⋅x(1) + x(2)⋅x(2) + … + x(n)⋅x(n)
问题是它说 sqrt 未定义。我想我的编译器只是不接受它。我在 Linux 上使用 cobc (GnuCOBOL) 3.1.2.0。
这是我的代码
IDENTIFICATION DIVISION.
PROGRAM-ID. FileProcessingProgram.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INPUT-FILE ASSIGN TO 'nums.txt'.
SELECT OUTPUT-FILE ASSIGN TO 'output.txt'.
DATA DIVISION.
FILE SECTION.
FD INPUT-FILE.
01 INPUT-VALUE-RECORD.
02 IN-X PIC S9(6)V9(2).
02 FILLER PIC X(72).
FD OUTPUT-FILE.
01 OUTPUT-LINE PIC X(80).
WORKING-STORAGE SECTION.
77 SUM-OF-X-SQR PIC 9(14)V9(2).
77 SUM-OF-X PIC S9(10)V9(2).
77 N PIC S9(4).
77 MEAN PIC S9(6)V9(2).
77 I PIC S9(4).
01 ARRAY-AREA.
02 X PIC S9(6)V9(2) OCCURS 1000 TIMES.
01 OUTPUT-TITLE-LINE.
02 FILLER PIC X(28) VALUE " MEAN AND STANDARD DEVIATION".
01 OUTPUT-UNDERLINE.
02 FILLER PIC X(28) VALUE "----------------------------".
01 OUTPUT-COL-HEADS.
02 FILLER PIC X(10) VALUE SPACES.
02 FILLER PIC X(11) VALUE "DATA VALUES".
01 OUTPUT-DATA-LINE.
02 FILLER PIC X(10) VALUE SPACES.
02 OUT-X PIC -(6)9.9(2).
01 OUTPUT-RESULTS-LINE-1.
02 FILLER PIC X(9) VALUE " MEAN= ".
02 OUT-MEAN PIC -(6)9.9(2).
01 OUTPUT-RESULTS-LINE-2.
02 FILLER PIC X(9) VALUE " STD DEV=".
02 STD-DEVIATION PIC -(6)9.9(2).
01 OUTPUT-RESULTS-LINE-3.
02 FILLER PIC X(9) VALUE " GEOMETRIC MEAN=".
02 GEOMETRIC-MEAN PIC -(6)9.9(2).
01 OUTPUT-RESULTS-LINE-4.
02 FILLER PIC X(9) VALUE " HARMONIC MEAN=".
02 HARMONIC-MEAN PIC -(6)9.9(2).
01 OUTPUT-RESULTS-LINE-5.
02 FILLER PIC X(9) VALUE " ROOT MEAN SQ=".
02 ROOT-MEAN-SQUARE PIC -(6)9.9(2).
PROCEDURE DIVISION.
OPEN INPUT INPUT-FILE, OUTPUT OUTPUT-FILE.
MOVE ZERO TO IN-X.
PERFORM PROC-BODY
UNTIL IN-X IS NOT LESS THAN 999999.99.
PERFORM END-OF-JOB.
PROC-BODY.
WRITE OUTPUT-LINE FROM OUTPUT-TITLE-LINE
AFTER ADVANCING 0 LINES.
WRITE OUTPUT-LINE FROM OUTPUT-UNDERLINE
AFTER ADVANCING 1 LINE.
WRITE OUTPUT-LINE FROM OUTPUT-COL-HEADS
AFTER ADVANCING 1 LINE.
WRITE OUTPUT-LINE FROM OUTPUT-UNDERLINE
AFTER ADVANCING 1 LINE.
MOVE ZERO TO SUM-OF-X.
READ INPUT-FILE INTO INPUT-VALUE-RECORD
AT END PERFORM END-OF-JOB.
PERFORM INPUT-LOOP
VARYING N FROM 1 BY 1
UNTIL N IS GREATER THAN 1000 OR IN-X IS NOT LESS THAN 999999.98.
SUBTRACT 1 FROM N.
DIVIDE N INTO SUM-OF-X GIVING MEAN ROUNDED.
MOVE ZERO TO SUM-OF-X-SQR.
PERFORM SUM-LOOP
VARYING I FROM 1 BY 1
UNTIL I IS GREATER THAN N.
COMPUTE STD-DEVIATION ROUNDED = (SUM-OF-X-SQR / N) ** 0.5.
COMPUTE GEOMETRIC-MEAN ROUNDED = (X(1) * X(2) * X(3) * ... * X(N)) ** (1 / N).
COMPUTE HARMONIC-MEAN ROUNDED = N / (1 / X(1) + 1 / X(2) + ... + 1 / X(N)).
COMPUTE ROOT-MEAN-SQUARE ROUNDED = SQRT(SUM-OF-X-SQR / N).
WRITE OUTPUT-LINE FROM OUTPUT-UNDERLINE
AFTER ADVANCING 1 LINE.
MOVE MEAN TO OUT-MEAN.
WRITE OUTPUT-LINE FROM OUTPUT-RESULTS-LINE-1
AFTER ADVANCING 1 LINE.
WRITE OUTPUT-LINE FROM OUTPUT-RESULTS-LINE-2
AFTER ADVANCING 1 LINE.
WRITE OUTPUT-LINE FROM OUTPUT-RESULTS-LINE-3
AFTER ADVANCING 1 LINE.
WRITE OUTPUT-LINE FROM OUTPUT-RESULTS-LINE-4
AFTER ADVANCING 1 LINE.
WRITE OUTPUT-LINE FROM OUTPUT-RESULTS-LINE-5
AFTER ADVANCING 1 LINE.
INPUT-LOOP.
MOVE IN-X TO X(N), OUT-X.
WRITE OUTPUT-LINE FROM OUTPUT-DATA-LINE
AFTER ADVANCING 1 LINE.
ADD X(N) TO SUM-OF-X.
READ INPUT-FILE INTO INPUT-VALUE-RECORD
AT END PERFORM END-OF-JOB.
SUM-LOOP.
COMPUTE SUM-OF-X-SQR = SUM-OF-X-SQR + (X(I) * X(I)).
END-OF-JOB.
CLOSE INPUT-FILE, OUTPUT-FILE.
STOP RUN.
我尝试添加功能,每次尝试都会出现各种类型的错误。有人可以建议如何添加其中一两个功能吗?
SQRT
是一个内在函数。将单词 FUNCTION
放在 SQRT
之前,或者添加 REPOSITORY
段落来标识所有内在函数,而不使用 FUNCTION
关键字。
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
FUNCTION ALL INTRINSIC.
INPUT-OUTPUT SECTION.
...
另请注意,您正在进行的某些计算有内在函数。请查阅文档。