Jump to content


KCBRITO

Member Since 27/03/2012
Offline Last Active 18/09/2012, 16:44
-----

Topics I've Started

[Ajuda] Programação Cobol

27/03/2012, 13:19

Este código abaixo é o programa que estou fazendo para que ele leia 3 arquivos e guarde os dados ordenadamente no 4º arquivo. Mas de acordo o arquivo LST do COBOL, o código tem problemas nos IF's mas ja que sou um leigo e não conheço tão bem esta linguagem.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. PROGR3.
      *
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       DECIMAL-POINT IS COMMA.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT ARQ1 ASSIGN TO DISK
             ORGANIZATION IS SEQUENTIAL
             ACCESS MODE IS SEQUENTIAL.
           SELECT ARQ2 ASSIGN TO DISK
             ORGANIZATION IS SEQUENTIAL
             ACCESS MODE IS SEQUENTIAL.
           SELECT ARQ3 ASSIGN TO DISK
             ORGANIZATION IS SEQUENTIAL
             ACCESS MODE IS SEQUENTIAL.
           SELECT ARQ4 ASSIGN  TO DISK
             ORGANIZATION IS SEQUENTIAL
             ACCESS MODE IS SEQUENTIAL.

      *
       DATA DIVISION.
       FILE SECTION.
       FD ARQ1
         LABEL RECORD IS STANDARD
         VALUE OF FILE-ID IS "ARQ1.DAT".
       01 REG1.
         02 COD1 PIC 9(5).
         02 NOM1 PIC x(30).
         02 VR1 PIC 9(12)V99.
       FD ARQ2
         LABEL RECORD IS STANDARD
         VALUE OF FILE-ID IS "ARQ2.DAT".
       01 REG2.
         03 COD2 PIC 9(5).
         03 NOM2 PIC X(30).
         03 VR2 PIC 9(12)v99.
       FD ARQ3
         LABEL RECORD IS STANDARD
         VALUE OF FILE-ID IS "ARQ3.DAT".
       01 REG3.
         02 COD3 PIC 9(5).
         02 NOM3 PIC x(30).
         02 VR3 PIC 9(12)V99.
       FD ARQ4
         LABEL RECORD IS STANDARD
         VALUE OF FILE-ID IS "ARQ4.DAT".
       01 REG4.
         02 COD4 PIC 9(5).
         02 NUM4 PIC x(30).
         02 VR4 PIC 9(12)V99.
       WORKING-STORAGE SECTION.
       01 CT1 PIC 9.
       01 CT2 PIC 9(1).
       01 CT3 PIC 9(1).
	
       PROCEDURE DIVISION.
       INICIO.
       	    OPEN INPUT ARQ1 ARQ2 ARQ3.
      	    OPEN OUTPUT ARQ4.
       	    MOVE 0 TO CT1 CT2 CT3.
       R5.
             IF CT1 = 0 THEN
               READ ARQ1 AT END
                 MOVE 9 TO CT1
                 MOVE 99999 TO COD1
                 GO TO R2.
                 MOVE 1 TO CT1.
       R2.
             IF CT2 = 0 THEN
               READ ARQ2 AT END
                 MOVE 9 TO CT2
                 MOVE 99999 TO COD2
                 GO TO R3.
                 MOVE 1 TO CT2.
       R3.
             IF CT3 = 0 THEN
               READ ARQ3 AT END
                 MOVE 9 TO CT3
                 MOVE 99999 TO COD3
                 GO TO R4.
                 MOVE 1 TO CT3.
       R4.
             IF CT1 = 9 OR CT2 = 9 OR CT3 = 9 THEN
                 EXIT PROGRAM.
             ELSE
                 IF COD1 = COD2 AND COD1 = COD3 THEN
                   MOVE COD1 TO COD4
                   MOVE NOM1 TO NUM4
                   COMPUTE VR4 = VR1 + VR2 + VR3
                   WRITE REG4
                   MOVE 0 TO CT1 CT2 CT3
                 ELSE
                   IF COD1 = COD2  THEN
                     MOVE COD1 TO COD4
                     MOVE NOM1 TO NUM4
                     COMPUTE VR4 = VR1 + VR2 
                     WRITE REG4
                     MOVE 0 TO CT1 CT2 
                   ELSE 
                     IF COD1 = COD3  THEN
                       MOVE COD1 TO COD4
                       MOVE NOM1 TO NUM4
                       COMPUTE VR4 = VR1 + VR3 
                       WRITE REG4
                       MOVE 0 TO CT1 CT3
                     ELSE
                       IF COD2 = COD3  THEN
                         MOVE COD1 TO COD4
                         MOVE NOM1 TO NUM4
                         COMPUTE VR4 = VR2 + VR3 
                         WRITE REG4
                         MOVE 0 TO CT2 CT3
                       ELSE
                         IF COD1 = COD3 THEN
                           MOVE COD1 TO COD4
                           MOVE NOM1 TO COD4
                           COMPUTE VR4 = VR1 + VR3
                           WRITE REG4
                           MOVE 0 TO CT1 CT3
                         ELSE
                           IF COD1 = COD2 AND COD2 = COD3 THEN
                             MOVE COD1 TO COD4
                             MOVE NOM1 TO NUM4
                             COMPUTE VR4 = VR1 + VR2 + VR3
                             MOVE 0 TO CT1 CT2 CT3
                           ELSE
                             IF COD1 < COD2 THEN
                               IF COD3 < COD1 THEN
                                 MOVE COD3 TO COD4
                                 MOVE NOM3 TO NUM4
                                 MOVE VR3 TO VR4
                                 WRITE REG4
                                 MOVE 0 TO CT3
                               ELSE
                                 MOVE COD1 TO COD4
                                 MOVE NOM1 TO NUM4
                                 MOVE VR1 TO VR4
                                 WRITE REG4
                                 MOVE 0 TO CT1
                                 END-IF
                               ELSE
                                 IF COD2 < COD3 THEN
                                   MOVE COD2 TO COD4
                                   MOVE NOM2 TO NUM4
                                   MOVE VR2 TO VR4
                                   WRITE REG4
                                   MOVE 0 TO CT2
                                 ELSE
                                   MOVE COD3 TO COD4
                                   MOVE NOM3 TO NUM4
                                   MOVE VR3 TO VR4
                                   WRITE REG4
                                   MOVE 0 TO CT3
                                 END-IF.
                               END-IF.
                               GO TO R5.



Abaixo está o código LST:




 B.COB                                   Fri Mar 23 13:05:45 2012    Page   1
 line number source line   Microsoft COBOL                       Version 2.20

   1         IDENTIFICATION DIVISION.
   2         PROGRAM-ID. PROGR3.
   3        *
   4         ENVIRONMENT DIVISION.
   5         CONFIGURATION SECTION.
   6         DECIMAL-POINT IS COMMA.
   7         INPUT-OUTPUT SECTION.
   8         FILE-CONTROL.
   9             SELECT ARQ1 ASSIGN TO DISK
  10               ORGANIZATION IS SEQUENTIAL
  11               ACCESS MODE IS SEQUENTIAL.
  12             SELECT ARQ2 ASSIGN TO DISK
  13               ORGANIZATION IS SEQUENTIAL
  14               ACCESS MODE IS SEQUENTIAL.
  15             SELECT ARQ3 ASSIGN TO DISK
  16               ORGANIZATION IS SEQUENTIAL
  17               ACCESS MODE IS SEQUENTIAL.
  18             SELECT ARQ4 ASSIGN  TO DISK
  19               ORGANIZATION IS SEQUENTIAL
  20               ACCESS MODE IS SEQUENTIAL.
  21    
  22        *
  23         DATA DIVISION.
  24         FILE SECTION.
  25         FD ARQ1
  26           LABEL RECORD IS STANDARD
  27           VALUE OF FILE-ID IS "ARQ1.DAT".
  28         01 REG1.
  29           02 COD1 PIC 9(5).
  30           02 NOM1 PIC x(30).
  31           02 VR1 PIC 9(12)V99.
  32         FD ARQ2
  33           LABEL RECORD IS STANDARD
  34           VALUE OF FILE-ID IS "ARQ2.DAT".
  35         01 REG2.
  36           03 COD2 PIC 9(5).
  37           03 NOM2 PIC X(30).
  38           03 VR2 PIC 9(12)v99.
  39         FD ARQ3
  40           LABEL RECORD IS STANDARD
  41           VALUE OF FILE-ID IS "ARQ3.DAT".
  42         01 REG3.
  43           02 COD3 PIC 9(5).
  44           02 NOM3 PIC x(30).
  45           02 VR3 PIC 9(12)V99.
  46         FD ARQ4
  47           LABEL RECORD IS STANDARD
  48           VALUE OF FILE-ID IS "ARQ4.DAT".
  49         01 REG4.
  50           02 COD4 PIC 9(5).
  51           02 NUM4 PIC x(30).
  52           02 VR4 PIC 9(12)V99.
  53         WORKING-STORAGE SECTION.
  54         01 CT1 PIC 9.
  55         01 CT2 PIC 9(1).
  56         01 CT3 PIC 9(1).
  57    

 B.COB                                   Fri Mar 23 13:05:45 2012    Page   2
 line number source line   Microsoft COBOL                       Version 2.20

  58         PROCEDURE DIVISION.
  59         INICIO.
  60              OPEN INPUT ARQ1 ARQ2 ARQ3.
  61              OPEN OUTPUT ARQ4.
  62              MOVE 0 TO CT1 CT2 CT3.
  63         R5.
  64               IF CT1 = 0 THEN
  65                 READ ARQ1 AT END
  66                   MOVE 9 TO CT1
  67                   MOVE 99999 TO COD1
  68                   GO TO R2.
  69                   MOVE 1 TO CT1.
  70         R2.
  71               IF CT2 = 0 THEN
  72                 READ ARQ2 AT END
  73                   MOVE 9 TO CT2
  74                   MOVE 99999 TO COD2
  75                   GO TO R3.
  76                   MOVE 1 TO CT2.
  77         R3.
  78               IF CT3 = 0 THEN
  79                 READ ARQ3 AT END
  80                   MOVE 9 TO CT3
  81                   MOVE 99999 TO COD3
  82                   GO TO R4.
  83                   MOVE 1 TO CT3.
  84         R4.
  85               IF CT1 = 9 OR CT2 = 9 OR CT3 = 9 THEN
  86                   EXIT PROGRAM.
  87               ELSE
  88                   IF COD1 = COD2 AND COD1 = COD3 THEN
  89                     MOVE COD1 TO COD4
  90                     MOVE NOM1 TO NUM4
  91                     COMPUTE VR4 = VR1 + VR2 + VR3
  92                     WRITE REG4
  93                     MOVE 0 TO CT1 CT2 CT3
  94                   ELSE
  95                     IF COD1 = COD2  THEN
  96                       MOVE COD1 TO COD4
  97                       MOVE NOM1 TO NUM4
  98                       COMPUTE VR4 = VR1 + VR2
  99                       WRITE REG4
 100                       MOVE 0 TO CT1 CT2
 101                     ELSE
 102                       IF COD1 = COD3  THEN
 103                         MOVE COD1 TO COD4
 104                         MOVE NOM1 TO NUM4
 105                         COMPUTE VR4 = VR1 + VR3
 106                         WRITE REG4
 107                         MOVE 0 TO CT1 CT3
 108                       ELSE
 109                         IF COD2 = COD3  THEN
 110                           MOVE COD1 TO COD4
 111                           MOVE NOM1 TO NUM4
 112                           COMPUTE VR4 = VR2 + VR3
 113                           WRITE REG4
 114                           MOVE 0 TO CT2 CT3

 B.COB                                   Fri Mar 23 13:05:45 2012    Page   3
 line number source line   Microsoft COBOL                       Version 2.20

 115                         ELSE
 116                           IF COD1 = COD3 THEN
 117                             MOVE COD1 TO COD4
 118                             MOVE NOM1 TO COD4
 119                             COMPUTE VR4 = VR1 + VR3
 120                             WRITE REG4
 121                             MOVE 0 TO CT1 CT3
 122                           ELSE
 123                             IF COD1 = COD2 AND COD2 = COD3 THEN
 124                               MOVE COD1 TO COD4
 125                               MOVE NOM1 TO NUM4
 126                               COMPUTE VR4 = VR1 + VR2 + VR3
 127                               MOVE 0 TO CT1 CT2 CT3
 128                             ELSE
 129                               IF COD1 < COD2 THEN
 130                                 IF COD3 < COD1 THEN
 131                                   MOVE COD3 TO COD4
 132                                   MOVE NOM3 TO NUM4
 133                                   MOVE VR3 TO VR4
 134                                   WRITE REG4
 135                                   MOVE 0 TO CT3
 136                                 ELSE
 137                                   MOVE COD1 TO COD4
 138                                   MOVE NOM1 TO NUM4
 139                                   MOVE VR1 TO VR4
 140                                   WRITE REG4
 141                                   MOVE 0 TO CT1
 142                                   END-IF
 143                                 ELSE
 144                                   IF COD2 < COD3 THEN
 145                                     MOVE COD2 TO COD4
 146                                     MOVE NOM2 TO NUM4
 147                                     MOVE VR2 TO VR4
 148                                     WRITE REG4
 149                                     MOVE 0 TO CT2
 150                                   ELSE
 151                                     MOVE COD3 TO COD4
 152                                     MOVE NOM3 TO NUM4
 153                                     MOVE VR3 TO VR4
 154                                     WRITE REG4
 155                                     MOVE 0 TO CT3
 156                                   END-IF.
 157                                 END-IF.
 158                                 GO TO R5.
0006:Area A violation; resumption at next paragraph/section/division/verb. IS
0064:Statement deleted due to erroneous syntax. THEN
0071:Statement deleted due to erroneous syntax. THEN
0078:Statement deleted due to erroneous syntax. THEN
0085:Statement deleted due to erroneous syntax. THEN
0087:A paragraph declaration is required here. ELSE
0087:Unrecognizable element is ignored.  ELSE
0088:Statement deleted due to erroneous syntax. THEN
0094:Unrecognizable element is ignored.  ELSE
0095:Statement deleted due to erroneous syntax. THEN
0101:Unrecognizable element is ignored.  ELSE
0102:Statement deleted due to erroneous syntax. THEN
0108:Unrecognizable element is ignored.  ELSE

 B.COB                                   Fri Mar 23 13:05:45 2012    Page   4
 line number source line   Microsoft COBOL                       Version 2.20

0109:Statement deleted due to erroneous syntax. THEN
0115:Unrecognizable element is ignored.  ELSE
0116:Statement deleted due to erroneous syntax. THEN
0122:Unrecognizable element is ignored.  ELSE
0123:Statement deleted due to erroneous syntax. THEN
0128:Unrecognizable element is ignored.  ELSE
0129:Statement deleted due to erroneous syntax. THEN
0130:Statement deleted due to erroneous syntax. THEN
0136:Unrecognizable element is ignored.  ELSE
0142:Unrecognizable element is ignored.  END-IF
0143:Unrecognizable element is ignored.  ELSE
0144:Statement deleted due to erroneous syntax. THEN
0150:Unrecognizable element is ignored.  ELSE
0156:Unrecognizable element is ignored.  END-IF
0157:Unrecognizable element is ignored.  END-IF
0001:/F/File never closed. 
0002:/F/File never closed. 
0003:/F/File never closed. 
0004:/F/File never closed. 

   32 errors or warnings

   Data area size =   924
   Code area size =  1142


IPB Skin By Virteq