【发布时间】:2015-12-02 17:08:48
【问题描述】:
我正在学习 COBOL,但我很难弄清楚如何对该表进行排序。我认为我什至没有正确实现这个表,所以任何关于如何改进这个代码的帮助都会很棒。我迷失和困惑。
IDENTIFICATION DIVISION.
PROGRAM-ID. STUDENT.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CLASSROOM-TABLE.
05 STUDENT OCCURS 5 TIMES.
10 STUDENT1.
15 STUDENT1-N PIC A(25).
15 STUDENT1-A PIC 99.
10 STUDENT2.
15 STUDENT2-N PIC A(25).
15 STUDENT2-A PIC 99.
10 STUDENT3.
15 STUDENT3-N PIC A(25).
15 STUDENT3-A PIC 99.
10 STUDENT4.
15 STUDENT4-N PIC A(25).
15 STUDENT4-A PIC 99.
10 TEMP-STUDENT.
15 STUDENT-N PIC A(25).
FIND.
END-METHOD.
15 STUDENT-A PIC 99.
01 I PIC 9 VALUE 0.
01 J PIC 9 VALUE 1.
PROCEDURE DIVISION.
MAIN-PARA.
MOVE "MICHAELA" TO STUDENT (1) (1:25).
MOVE 21 TO STUDENT (1) (26:2).
MOVE "KEVIN" TO STUDENT (2) (1:25).
MOVE 25 TO STUDENT (2) (26:2).
MOVE "KENNY" TO STUDENT (3) (1:25).
MOVE 16 TO STUDENT (3) (26:2).
MOVE "ANDREA" TO STUDENT (4) (1:25).
MOVE 18 TO STUDENT (4) (26:2).
PERFORM PUT-ORDER.
PERFORM PRINT.
STOP RUN.
PUT-ORDER.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 4
ADD 1 TO J
IF STUDENT(I)(26:2) > STUDENT(J)(26:2)
ADD 1 TO I
DISPLAY "INSIDE SORT"
MOVE STUDENT(I)(26:2) TO STUDENT(5)(26:2)
MOVE STUDENT(J)(26:2) TO STUDENT(I)(26:2)
MOVE STUDENT(5)(26:2) TO STUDENT(J)(26:2)
END-IF
END-PERFORM.
DISPLAY "SORT IS DONE".
END-METHOD.
PRINT.
DISPLAY STUDENT (1).
DISPLAY STUDENT (2).
DISPLAY STUDENT (3).
DISPLAY STUDENT (4).
END-METHOD.
我知道代码正在排序,因为它在排序内部打印并且排序完成。但是当它再次打印表格时,一切都是一样的。我认为我没有正确地遍历表格,但我尝试过的所有其他方式都会给我错误。
【问题讨论】:
-
你为什么要做 STUDENT(I)(26:2) ????,你应该只做 Student-Name(I)
标签: loops sorting iteration cobol