如何计算二维表中的总数?

时间:2019-09-06 17:46:16

标签: helper cobol

我还是COBOL的新手,正在学习二维表。在这里,我很难解决如何在SOPHOMORE行中对BSIT累积两个值的总和(BSIT为(1,1)= 100,而BSCS为(2,1)= 200,总计300)。

输入文件为:100200300400500600200300

Output File Display

   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.

1 个答案:

答案 0 :(得分:0)

我发现了三个问题:

  1. 示例数据虽然未使用,但不包含TOATLBA的数据。我在测试数据中添加了七个零。

  2. 项目01 TOTAL-1.没有PICTURE子句。我发表了评论。

  3. TS ( I )在添加值之前不为零。我添加了代码以使用您的样式将数据归零。


Displayed Output


   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 ...之前。

相关问题