2016-09-06 9 views
0

Der Versuch, compute zu verstehen. Wäre es richtig, die Summe der verdienten Kredite mit FSemesterTotal zu berechnen, was ein PIC 99V99 ist? COMPUTE FSemesterTotal = verdient + verdient. Ich denke, dass es einen Zähler in meiner Schleife geben sollte, um zu überprüfen, ob ich den ersten verdienten Wert lese, so dass ich es dem zweiten Wert hinzufügen kann, der nicht sicher ist, wie man das in COBOL erreicht.COBOL COMPUTE Dezimalwerte aus einer Datei

Derzeit meine Eingabe ist wie diese,

CMPS161  ALGORITHM DSGN/IMPLMNT I  A 3.00 
ENGL322  INTRO TO PROF/TECH WRITING  A 3.00 
MATH241  ELEM STATISTICS     B 3.00 
ART 106  SURV WORLD ART HIST II   A 3.00 
BIOL152  GENERAL BIOL LAB I    B 1.00 
CMPS257  DISCRETE STRUCTURE    A 3.00 
CMPS28O  ALGORITHM DSGN/IMPLEM II  B 3.00 
CMPS290  COMPUTER ORGANIZATION   A 3.00 
CMPS390  DATA STRUCTURES     B 3.00 
GBIO153  GENERAL BIOL II     B 3.00 
CMPS294  INTERNET PROGRAMMING   B 3.00 
CMPS315  SYSTEM ADMINISTRATION   A 3.00 
CMPS329  COMPUTER NETWORKING SECURITY A 3.00 
CMPS383  INFORMATION SYSTEMS    A 3.00 
CMPS415  INTERGRATED TECH SYSTEMS  B 3.00 

COBOL CODE

IDENTIFICATION DIVISION. 
PROGRAM-ID.  P2. 
ENVIRONMENT DIVISION. 
INPUT-OUTPUT SECTION. 
FILE-CONTROL. 
    SELECT myInFile ASSIGN TO "P2In.dat". 
    SELECT myOutFile ASSIGN TO "P2Out.dat". 
DATA DIVISION. 
FILE SECTION. 
FD myInFile. 
01 inRecord. 
    02 Course PIC X(13). 
    02 Title PIC X(32). 
    02 Grade PIC X(4). 
    02 Earned PIC 9V99. 
    02 FILLER PIC X(3). 
FD myOutFile. 
01 outRecord. 
    02 myCourse PIC X(13). 
    02 myTitle PIC X(32). 
    02 myGrade PIC X(4). 
    02 myEarned PIC 9.99. 
    02 FILLER PIC X(3). 
WORKING-STORAGE SECTION. 
01 E0F PIC X(3) VALUE "NO ". 
01 NAME-HDR. 
    05 FILLER PIC X(10) VALUE "NAME HERE ". 
01 SCHOOLID-HDR. 
    05 FILLER PIC X(8) VALUE "SCHOOLID" 
01 COLUMN-HDR. 
    05 CCourse PIC X(6) VALUE "COURSE". 
    05 CSpace PIC X(7) VALUE SPACES. 
    05 HTitle PIC X(5) VALUE "TITLE". 
    05 HSpace PIC X(27) VALUE SPACES. 
    05 CGrade PIC XX VALUE "GR". 
    05 CSpace PIC XXX VALUE SPACES. 
    05 CEarned PIC X(6) VALUE "EARNED". 
    05 QSpace PIC X(4) VALUE SPACES. 
    05 Qpts  PIC X(4) VALUE "Qpts". 
01 FOOTER-SMS. 
    05 FSemester  PIC X(28) VALUE "     SEMESTER". 
    05 FSpaces  PIC x(21) VALUE SPACES. 
    05 FSemesterTotal PIC 99V99. 
01 FOOTER-CUMUL. 
    05 FCumulative PIC X(30) VALUE"     CUMULATIVE". 
    05 FSpaces  PIC X(19) VALUE SPACES. 
    05 FCumulTotal PIC 99V99. 
01 QPTS-VAL. 
    05 QSpace PIC X(5) VALUE SPACES. 
    05 QPtsValue PIC 99V99. 
01 GPA. 
    05 GSpace PIC XX VALUE SPACES. 
    05 GpaScore PIC 9.99. 
PROCEDURE DIVISION. 
MAIN-PROGRAM. 
PERFORM HEADER. 
PERFORM FILE-IO. 
PERFORM CLOSING. 
STOP RUN. 
HEADER. 
OPEN INPUT myInFile 
    OUTPUT myOutFile. 
WRITE outRecord FROM NAME-HDR. 
WRITE outRecord FROM SCHOOLID-HDR 
     AFTER ADVANCING 1 LINE. 
WRITE outRecord FROM COLUMN-HDR 
     AFTER ADVANCING 2 LINES. 
MOVE SPACES TO outRecord. 
WRITE outRecord 
     AFTER ADVANCING 1 LINE. 
FILE-IO. 
    READ myInFile 
     AT END 
      MOVE "YES" TO EOF. 
    DISPLAY NAME-HDR. 
    DISPLAY SCHOOLID-HDR. 
    DISPLAY SPACES. 
    DISPLAY SPACES. 
    DISPLAY "FALL 2014" 
    DISPLAY COLUMN-HDR. 
    PERFORM PROCESS-RECORD 
    UNTIL EOF = "YES". 
PROCESS-RECORD. 
    MOVE Course to myCourse. 
    MOVE Title to myTitle. 
    MOVE Grade to myGrade. 
    MOVE Earned to myEarned. 
    WRITE outRecord 
     AFTER ADVANCING 1 LINE. 
    READ myInFile 
     AT END 
      MOVE "YES" TO EOF. 
     NOT AT END 
      IF myCourse = "ART 106  " THEN 
       DISPLAY FOOTER-SMS, QPTS-VAL, GPA 
       DISPLAY FOOTER-CUMUL, QPTS-VAL, GPA 
       DISPLAY SPACES. 
       DISPLAY "SPRING 2015" 
      END-IF. 
      IF myCourse = "CMPS285  " THEN 
       DISPLAY FOOTER-SMS, QPTS-VAL, GPA 
       DISPLAY FOOTER-CUMUL, QPTS-VAL, GPA 
       DISPLAY SPACES. 
       DISPLAY "FALL 2015" 
      END-IF. 
      IF myCourse = "CMPS294  " THEN 
       DISPLAY FOOTER-SMS, QPTS-VAL, GPA 
       DISPLAY FOOTER-CUMUL, QPTS-VAL, GPA 
       DISPLAY SPACES. 
       DISPLAY "SPRING 2016" 
      END-IF. 
CLOSING. 
    DISPLAY FOOTER-SMS, QPTS-VAL, GPA. 
    DISPLAY FOOTER-CUMUL, QPTS-VAL, GPA. 
    CLOSE myInFile 
      myOutFile. 
+2

'COMPUTE FSemesterTotal = FSemesterTotal + Earned', sicher? Unklar, was Sie fragen, aber das ist eine Frage über Business-Logik, nicht COMPUTE. – EJP

+2

Sind Sie sicher, dass ist keine frühe Version des Codes? Dieses Beispiel wird nicht kompiliert. E-Zero-F anstelle von EOF, kein Vollstopp auf FILLER nach SCHOOLID-HDR, und vorsichtig mit Vollstopps bei END-IF im READ, Perioden sind Anweisungs-Terminatoren, nicht nur Phrasen-Terminatoren. –

+0

Sorry, ich hätte vielleicht ein paar Dinge im Transkribieren von Nano verpasst. – CoryC

Antwort

3

Die Frage lautete: "Kann ich COMPUTE nutzen auf diese Weise?" Die Antwort lautet: Ja, aber Sie möchten wahrscheinlich einen ON SIZE ERROR hinzufügen, um einen möglichen Größenüberlauf zu berücksichtigen, nur für den Fall, dass Ihre Eingabedaten zu viele Einträge haben.

Wenn die Frage hinter der Frage steht: "Wird das Programm funktionieren?" Die Antwort lautet: Trotz der Probleme, auf die Brian bereits hingewiesen hat, müssen Sie die Daten von 9.99 (4 Bytes, nicht verwendbar für Arithmetik) auf 9v99 (3 Bytes, verwendbar für Arithmetik) ändern .

und wenn Sie nicht über eine ISAM-Datei verwenden, die von der Laufzeit überprüft wird. immer Datei-Eingabe bestätigen (falsche Ergebnisse wahrscheinlich nicht wollen, zu abend oder produzieren die Datei gebrochen werden kann und Sie)

+0

Danke, werde versuchen, mein Bild anzupassen, ich bekam seltsame Ergebnisse mit dem Rechner, wo es auf eine Zahl oder eine Dezimalstelle an den Ausgang heften würde. Ich weiß, V ist eine angenommene Dezimalzahl, die zum Ausgang übertragen werden würde, oder müsste ich die Antwort in ein Bild wie 9,99 setzen? – CoryC

+0

@CoryC: Ich würde persönlich die validierte Nummer verschieben [die einfachste Option kann 'FUNCTION NUMVAL' sein, um mögliche Fehler zu überspringen] zu einem' PIC 9v99' Element. Dann mach was du willst und gib es wieder aus (entweder direkt wenn du den Wert speichern willst oder 'MOVE' es um' PIC 9.99' um eine bearbeitete Ausgabe zu erhalten. Beweist das die Antwort? –

+0

Nun, was ich verwundete Tun Sie das als 9V99, indem Sie einen compute auf die Summe zu einem 99v99 und dann MOVE zu einem Z99.99 Ich lese meine Ergebnisse kamen aus dem Lesen vs aus, so dass ich nicht berücksichtigt, den zusätzlichen Raum, aus denen genereated wurde von einem Z9.99 zu einem 9v99 gehen. – CoryC