首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在二维表中计算总和?

如何在二维表中计算总和?
EN

Stack Overflow用户
提问于 2019-09-07 01:46:16
回答 1查看 89关注 0票数 0

我仍然是COBOL的新手,并且还在学习二维表。在这里,我遇到了困难,如何累加行的两个值的总和,对于BSIT (1,1) = 100,对于BSCS (2,1) = 200,总共300。

输入文件为: 100200300400500600200300

代码语言:javascript
复制
   IDENTIFICATION DIVISION.
   PROGRAM-ID. TWODIME.
  *AUTHOR..
  *INSTALLATION. MANDALUYONG CITY.
  *DATE-WRITTEN. SEPTEMBER 9, 2019.
  *DATE-COMPILED. SEPTEMBER 10, 2019.
  *SECURITY. .
  *REMARKS.
   ENVIRONMENT DIVISION.
   CONFIGURATION SECTION.
   SOURCE-COMPUTER. ANGELO-PC.
   OBJECT-COMPUTER. ANGELO-PC.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
       SELECT INFILE ASSIGN TO 'VALSTUD.TXT'.
       SELECT OUTFILE ASSIGN TO 'VALOUT.TXT'.
   DATA DIVISION.
   FILE SECTION.
   FD INFILE
       LABEL RECORD IS STANDARD
       DATA RECORD IS INREC.
   01 INREC.
       02 YEAR OCCURS 4 TIMES.
            03 COURSE OCCURS 2 TIMES PIC 999.
       02 TOTALBA PIC 9(5)V99.
   FD OUTFILE
       LABEL RECORD IS OMITTED
       DATA RECORD IS OUTREC.
   01  OUTREC.
       02 FILLER PIC X(80).
   WORKING-STORAGE SECTION.
   01  I PIC 9 VALUE IS 0.
   01  J PIC 9 VALUE IS 0.
   01  EOFSW PIC 9 VALUE IS 0.
   01  TYEAR.
       02 TS PIC 9999 OCCURS 4 TIMES.
   01  HEAD-1.
       02 FILLER PIC X(20) VALUE SPACE.
       02 FILLER PIC X(23) VALUE 'POLYTECHNIC UNIVERSITY '.
       02 FILLER PIC X(18) VALUE 'OF THE PHILIPPINES'.
   01  HEAD-2.
       02 FILLER PIC X(32) VALUE SPACE.
       02 FILLER PIC X(10) VALUE 'STA. MESA,'.
       02 FILLER PIC X(7) VALUE ' MANILA'.
   01  HEAD-3.
       02 FILLER PIC X(31) VALUE SPACE.
       02 FILLER PIC X(7) VALUE 'STUDENT'.
       02 FILLER PIC X(11) VALUE ' POPULATION'.
   01  SUB-1.
       02 FILLER PIC X(3) VALUE SPACE.
       02 FILLER PIC X(10) VALUE 'YEAR LEVEL'.
       02 FILLER PIC X(27) VALUE SPACE.
       02 FILLE PIC X(6) VALUE 'COURSE'.
   01  SUB-2.
       02 FILLER PIC X(20) VALUE SPACE.
       02 FILLER PIC X(4) VALUE 'BSCS'.
       02 FILLER PIC X(16) VALUE SPACE.
       02 FILLER PIC X(4) VALUE 'BSIT'.
       02 FILLER PIC X(16) VALUE SPACE.
       02 FILLER PIC X(5) VALUE 'TOTAL'.
   01  DETAILS.
       02 FILLER PIC X(5) VALUE SPACE.
       02 P-YEAR PIC X(9).
            02 FILLER PIC X(6) VALUE SPACE.
       02 P-TAP OCCURS 2 TIMES.
           03 P-CTR PIC 999.
                   03 FILLER PIC X(17) VALUE SPACE.
       02 P-TSTUDYEAR PIC 99,999.
   01  TOTAL-1.

   SCREEN SECTION.
   01 SCRE.
       02 BLANK SCREEN.
   PROCEDURE DIVISION.
   MAIN-RTN.
       PERFORM INIT-RTN THRU INIT-RTN-END.
       PERFORM PROCESS-RTN UNTIL EOFSW = 1.
       PERFORM FINISH-RTN.
       STOP RUN.
   INIT-RTN. 
       OPEN INPUT INFILE, OUTPUT OUTFILE.
       READ INFILE AT END PERFORM END-RTN.
       PERFORM HEADING-RTN.
   INIT-RTN-END.
   END-RTN.
       MOVE 1 TO EOFSW.
       DISPLAY 'EMPTY FILE' LINE 3 COLUMN 20.
   HEADING-RTN.
       WRITE OUTREC FROM HEAD-1 AFTER PAGE.
       WRITE OUTREC FROM HEAD-2 AFTER 1.
       WRITE OUTREC FROM HEAD-3 AFTER 3.
       WRITE OUTREC FROM SUB-1 AFTER 2.
       WRITE OUTREC FROM SUB-2 AFTER 1.
   PROCESS-RTN.
       DISPLAY SCRE.
       PERFORM ADD-RTN VARYING I FROM 1 BY 1
       UNTIL I > 4 AFTER J FROM 1 BY 1 UNTIL 
       J > 2.
       PERFORM MOVE-RTN VARYING I FROM 1 BY 1 UNTIL
       I > 4.
       READ INFILE AT END MOVE 1 TO EOFSW.
   ADD-RTN.
       ADD COURSE ( I , J ) TO TS ( I ).
   MOVE-RTN.
       IF I = 1 MOVE 'FRESHMEN' TO P-YEAR PERFORM A.
       IF I = 2 MOVE 'SOPHOMORE' TO P-YEAR PERFORM A.
       IF I = 3 MOVE 'JUNIOR' TO P-YEAR PERFORM A. 
       IF I = 4 MOVE 'SENIOR' TO P-YEAR PERFORM A.
   A.
       PERFORM MOVE2-RTN VARYING J FROM 1 BY 1 UNTIL
       J > 2.
       WRITE OUTREC FROM DETAILS AFTER 1.
   MOVE2-RTN.
          MOVE TS ( I ) TO P-TSTUDYEAR.
       MOVE COURSE ( I , J ) TO P-TAP ( J ).
   FINISH-RTN.
       CLOSE INFILE, OUTFILE.
       DISPLAY 'OWARI DA!' LINE 5 COLUMN 20.
EN

回答 1

Stack Overflow用户

发布于 2019-09-07 08:06:49

我发现了三个问题:

  1. 示例数据虽然未使用,但不包含TOATLBA的数据。我在测试数据中添加了7个零。
  2. 01 TOTAL-1.没有PICTURE子句。在添加值之前,我将其设置为comment.
  3. TS ( I )不为零。我添加了代码以使用您的样式将数据置零。

代码语言:javascript
复制
   IDENTIFICATION DIVISION.
   PROGRAM-ID. TWODIME.
  *AUTHOR..
  *INSTALLATION. MANDALUYONG CITY.
  *DATE-WRITTEN. SEPTEMBER 9, 2019.
  *DATE-COMPILED. SEPTEMBER 10, 2019.
  *SECURITY.
  *REMARKS.
   ENVIRONMENT DIVISION.
   CONFIGURATION SECTION.
   SOURCE-COMPUTER. ANGELO-PC.
   OBJECT-COMPUTER. ANGELO-PC.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
       SELECT INFILE ASSIGN TO 'VALSTUD.TXT'.
       SELECT OUTFILE ASSIGN TO 'VALOUT.TXT'.
   DATA DIVISION.
   FILE SECTION.
   FD INFILE
       LABEL RECORD IS STANDARD
       DATA RECORD IS INREC.
   01 INREC.
       02 YEAR OCCURS 4 TIMES.
            03 COURSE OCCURS 2 TIMES PIC 999.
       02 TOTALBA PIC 9(5)V99.
   FD OUTFILE
       LABEL RECORD IS OMITTED
       DATA RECORD IS OUTREC.
   01  OUTREC.
       02 FILLER PIC X(80).
   WORKING-STORAGE SECTION.
   01  I PIC 9 VALUE IS 0.
   01  J PIC 9 VALUE IS 0.
   01  EOFSW PIC 9 VALUE IS 0.
   01  TYEAR.
       02 TS PIC 9999 OCCURS 4 TIMES.
   01  HEAD-1.
       02 FILLER PIC X(20) VALUE SPACE.
       02 FILLER PIC X(23) VALUE 'POLYTECHNIC UNIVERSITY '.
       02 FILLER PIC X(18) VALUE 'OF THE PHILIPPINES'.
   01  HEAD-2.
       02 FILLER PIC X(32) VALUE SPACE.
       02 FILLER PIC X(10) VALUE 'STA. MESA,'.
       02 FILLER PIC X(7) VALUE ' MANILA'.
   01  HEAD-3.
       02 FILLER PIC X(31) VALUE SPACE.
       02 FILLER PIC X(7) VALUE 'STUDENT'.
       02 FILLER PIC X(11) VALUE ' POPULATION'.
   01  SUB-1.
       02 FILLER PIC X(3) VALUE SPACE.
       02 FILLER PIC X(10) VALUE 'YEAR LEVEL'.
       02 FILLER PIC X(27) VALUE SPACE.
       02 FILLE PIC X(6) VALUE 'COURSE'.
   01  SUB-2.
       02 FILLER PIC X(20) VALUE SPACE.
       02 FILLER PIC X(4) VALUE 'BSCS'.
       02 FILLER PIC X(16) VALUE SPACE.
       02 FILLER PIC X(4) VALUE 'BSIT'.
       02 FILLER PIC X(16) VALUE SPACE.
       02 FILLER PIC X(5) VALUE 'TOTAL'.
   01  DETAILS.
       02 FILLER PIC X(5) VALUE SPACE.
       02 P-YEAR PIC X(9).
            02 FILLER PIC X(6) VALUE SPACE.
       02 P-TAP OCCURS 2 TIMES.
           03 P-CTR PIC 999.
                   03 FILLER PIC X(17) VALUE SPACE.
       02 P-TSTUDYEAR PIC 99,999.
  *01  TOTAL-1.

   SCREEN SECTION.
   01 SCRE.
       02 BLANK SCREEN.
   PROCEDURE DIVISION.
   MAIN-RTN.
       PERFORM INIT-RTN THRU INIT-RTN-END.
       PERFORM PROCESS-RTN UNTIL EOFSW = 1.
       PERFORM FINISH-RTN.
       STOP RUN.
   INIT-RTN. 
       OPEN INPUT INFILE, OUTPUT OUTFILE.
       READ INFILE AT END PERFORM END-RTN.
       PERFORM HEADING-RTN.
   INIT-RTN-END.
   END-RTN.
       MOVE 1 TO EOFSW.
       DISPLAY 'EMPTY FILE' LINE 3 COLUMN 20.
   HEADING-RTN.
       WRITE OUTREC FROM HEAD-1 AFTER PAGE.
       WRITE OUTREC FROM HEAD-2 AFTER 1.
       WRITE OUTREC FROM HEAD-3 AFTER 3.
       WRITE OUTREC FROM SUB-1 AFTER 2.
       WRITE OUTREC FROM SUB-2 AFTER 1.
   PROCESS-RTN.
       DISPLAY SCRE.
       PERFORM ZERO-RTN VARYING I FROM 1 BY 1
       UNTIL I > 4.
       PERFORM ADD-RTN VARYING I FROM 1 BY 1
       UNTIL I > 4 AFTER J FROM 1 BY 1 UNTIL
       J > 2.
       PERFORM MOVE-RTN VARYING I FROM 1 BY 1 UNTIL
       I > 4.
       READ INFILE AT END MOVE 1 TO EOFSW.
   ZERO-RTN.
       MOVE ZERO TO TS ( I ).
   ADD-RTN.
       ADD COURSE ( I , J ) TO TS ( I ).
   MOVE-RTN.
       IF I = 1 MOVE 'FRESHMEN' TO P-YEAR PERFORM A.
       IF I = 2 MOVE 'SOPHOMORE' TO P-YEAR PERFORM A.
       IF I = 3 MOVE 'JUNIOR' TO P-YEAR PERFORM A. 
       IF I = 4 MOVE 'SENIOR' TO P-YEAR PERFORM A.
   A.
       PERFORM MOVE2-RTN VARYING J FROM 1 BY 1 UNTIL
       J > 2.
       WRITE OUTREC FROM DETAILS AFTER 1.
   MOVE2-RTN.
          MOVE TS ( I ) TO P-TSTUDYEAR.
       MOVE COURSE ( I , J ) TO P-TAP ( J ).
   FINISH-RTN.
       CLOSE INFILE, OUTFILE.
       DISPLAY 'OWARI DA!' LINE 5 COLUMN 20.

请注意,MOVE-RTN的效率很低。最好将文本值放在一个表中,并且只移动条目( I ) TO P-YEAR

同样,MOVE TS ( I ) TO P-TSTUDYEAR.也会执行两次。该语句可以移到WRITE OUTREC ...之前。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57826523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档