products/Sources/formale Sprachen/Cobol/verschiedene-Autoren/Judson-McClendon/getnum image not shown  

Quellcode-Bibliothek

© Kompilation durch diese Firma

[Weder Korrektheit noch Funktionsfähigkeit der Software werden zugesichert.]

Datei: getnum.cob   Sprache: Cobol

Original von: verschiedene©

       IDENTIFICATION DIVISION.
      *
       PROGRAM-ID.    GETNUMT.
      *
       DATE-WRITTEN.  04/04/90.
      *
      *    MODIFIED   10/18/97.
      *
      *        *******************************
      *        *                             *
      *        *     Judson D. McClendon     *
      *        *     Sun Valley Systems      *
      *        *     329 37th Court N.E.     *
      *        *     Birmingham, AL 35215    *
      *        *        205-853-8440         *
      *        *                             *
      *        *******************************
      *
       ENVIRONMENT DIVISION.
      *
       CONFIGURATION SECTION.
      *
       INPUT-OUTPUT SECTION.
      *
       FILE-CONTROL.
      *
       I-O-CONTROL.
      *
       DATA DIVISION.
      *
       FILE SECTION.
      *
      *
       WORKING-STORAGE SECTION.
      *
       77  WS-ESCAPE-FLAG              PIC  9(01)     COMP VALUE 0.
       77  WS-ERR-MSG                  PIC  X(30)     VALUE SPACES.
      *
      ******************************************************************
      *                                                                *
      *               N U M B E R   W O R K   A R E A                  *
      *                                                                *
      ******************************************************************
      *
       01  NUMBER-WORK-AREA.
           03  NW-NBR-ERROR-FLAG       PIC  9(01).
           03  NW-WORK-NBR.
               05  NW-WORK-CHAR        OCCURS 25 TIMES
                                       INDEXED BY NW-WX
                                                  NW-WLIM.
                   07  NW-WORK-DIGIT       PIC  9(01).
           03  NW-DEC-PLACES           PIC  9(02).
           03  NW-BLD-SIGN             PIC S9(01).
           03  NW-BLD-NBR              PIC  9(12)V9(06).
           03  NW-BLD-NBR-SPLIT        REDEFINES NW-BLD-NBR.
               05  NW-BLD-INTEGER          PIC  9(12).
               05  NW-BLD-DECIMAL          PIC V9(06).
                   88  NW-RESULT-INTEGER               VALUE ZERO.
               05  NW-BLD-DEC-DIGITS       REDEFINES NW-BLD-DECIMAL.
                   07  NW-BLD-DEC-DIGIT        OCCURS 6 TIMES
                                               INDEXED BY NW-BDX
                                                          NW-BDLIM
                                                   PIC  9(01).
           03  NW-EXTRACTED-NBR        PIC S9(12)V9(06).
      *
       SCREEN SECTION.
      *
      *
      *                     I N P U T   S C R E E N
      *
       01  INPUT-SCREEN
               FOREGROUND-COLOR 7
               BACKGROUND-COLOR 0.
           03  BLANK SCREEN
               LINE 01  COLUMN 31  VALUE "G E T N U M B E R".
      *
           03  LINE 03  COLUMN 01  VALUE "Enter Number: ".
           03  PIC  X(25)          USING NW-WORK-NBR.
      *
      *
      *                    O U T P U T   S C R E E N
      *
       01  OUTPUT-SCREEN
               FOREGROUND-COLOR 7
               BACKGROUND-COLOR 0.
      *
           03  LINE 05  COLUMN 01  VALUE " Result: ".
           03  PIC  -(13).9(06)    FROM  NW-EXTRACTED-NBR.
           03           COLUMN 41
               PIC  X(30)          FROM  WS-ERR-MSG.
      /
       PROCEDURE DIVISION.
      *
      *
      *             C O N T R O L   S E C T I O N
      *
       000000-CONTROL.
      *
           MOVE SPACES TO NW-WORK-NBR.
           DISPLAY INPUT-SCREEN.
      *
           PERFORM 000100-PROCESS
              THRU 000100-EXIT
               UNTIL (WS-ESCAPE-FLAG = 1).
      *
       000000-EXIT.
           STOP RUN.
      *
      *                    P R O C E S S
      *
       000100-PROCESS.
      *
           ACCEPT INPUT-SCREEN
               ON ESCAPE
                   MOVE 1 TO WS-ESCAPE-FLAG
                   GO TO 000100-EXIT.
      *
           PERFORM 003000-GET-NBR
              THRU 003000-EXIT.
      *
           IF (NW-NBR-ERROR-FLAG = 1)
               MOVE "NUMBER INVALID" TO WS-ERR-MSG
           ELSE
               MOVE SPACES           TO WS-ERR-MSG.
      *
           DISPLAY OUTPUT-SCREEN.
      *
       000100-EXIT.
           EXIT.
      *
      ******************************************************************
      *                                                                *
      *                      G E T   N U M B E R                       *
      *                                                                *
      *                      Judson D. McClendon                       *
      *                      Sun Valley Systems                        *
      *                      329 37th Court NE                         *
      *                      Birmingham, AL 35215                      *
      *                         205/853-8440                           *
      *                                                                *
      *    CONVERTS A NUMBER IN FREE FORMAT DISPLAY FORM:              *
      *        FOR EXAMPLE:                                            *
      *                                                                *
      *            "999,999,999,999.999999 "                           *
      *            "-999,999,999,999.999999"                           *
      *            "              -23.61   "                           *
      *            "                      4"                           *
      *            "0                      "                           *
      *            "    .000001            "                           *
      *            "0000000000123456789.10-"                           *
      *            "                       "  BLANK IS VALID = 0       *
      *                                                                *
      *    INTO FIXED NUMERIC FORM:                                    *
      *                                                                *
      *        PIC S9(12)V9(06)                                        *
      *                                                                *
      *                                                                *
      *    USAGE:  MOVE <FREE FORM NUMBER> TO NW-WORK-NBR.             *
      *            PERFORM 003000-GET-NBR                              *
      *               THRU 003000-EXIT.                                *
      *                                                                *
      *    RESULT: NW-NBR-ERROR-FLAG = 0 INPUT IS A VALID NUMBER       *
      *                                1 INPUT NOT A VALID NUMBER      *
      *                                                                *
      *       IF NW-NBR-ERROR-FLAG = 0 THEN:                           *
      *                                                                *
      *            NW-EXTRACTED-NBR  = NUMBER AS:  PIC S9(12)V9(06)    *
      *                                                                *
      *            NW-DEC-PLACES     = NUMBER OF DIGITS TO THE RIGHT   *
      *                                OF THE DECIMAL POINT (0=NONE)   *
      *                                                                *
      *            NW-BLD-SIGN       = +1 OR -1 AS:  PIC S9(01)        *
      *                                                                *
      *            NW-BLD-INTEGER    = INTEGER DIGITS AS:  PIC  9(12)  *
      *                                                                *
      *            NW-BLD-DECIMAL    = DECIMAL DIGITS AS:  PIC V9(06)  *
      *                                                                *
      ******************************************************************
      *
       003000-GET-NBR.
      *
           MOVE 0      TO NW-NBR-ERROR-FLAG.
           MOVE ZERO   TO NW-EXTRACTED-NBR.
      *
           MOVE 0      TO NW-DEC-PLACES.
           MOVE ZERO   TO NW-BLD-NBR.
           MOVE +1     TO NW-BLD-SIGN.
           SET NW-BDX  TO 1.
           SET NW-WLIM TO 25.
      *
      *  ** LOCATE LEFTMOST DIGIT OF NUMBER **
      *
           SET NW-WX  TO 1.
           SEARCH NW-WORK-CHAR
               WHEN NW-WORK-CHAR(NW-WX) NOT = SPACE
                   PERFORM 003010-DECODE-NBR
                      THRU 003010-EXIT.
      *
           IF (NW-WORK-NBR NOT = SPACES)
               MOVE 1 TO NW-NBR-ERROR-FLAG
           ELSE
               COMPUTE NW-EXTRACTED-NBR = NW-BLD-NBR * NW-BLD-SIGN.
      *
       003000-EXIT.
           EXIT.
      *
      *
      *                     DECODE NUMBER
      *
       003010-DECODE-NBR.
      *
           IF (NW-WORK-CHAR(NW-WX) = "-")
               MOVE -1    TO NW-BLD-SIGN
               MOVE SPACE TO NW-WORK-CHAR(NW-WX)
               SET NW-WX UP BY 1.
      *
           PERFORM 003020-GET-INT-PART
              THRU 003020-EXIT
                UNTIL (NW-WX > NW-WLIM).
      *
            SET NW-DEC-PLACES TO NW-BDX.
            SUBTRACT 1 FROM NW-DEC-PLACES.
      *
       003010-EXIT.
           EXIT.
      *
      *
      *               GET INTEGER PART OF NUMBER
      *
       003020-GET-INT-PART.
      *
           IF (NW-WORK-CHAR(NW-WX) NUMERIC)
               IF (NW-BLD-INTEGER > 99999999999)
                   SET NW-WX TO NW-WLIM
               ELSE
                   COMPUTE NW-BLD-INTEGER =
                       NW-BLD-INTEGER * 10 + NW-WORK-DIGIT(NW-WX)
                   MOVE SPACE TO NW-WORK-CHAR(NW-WX)
           ELSE
               IF (NW-WORK-CHAR(NW-WX) = ".")
                   MOVE SPACES TO NW-WORK-CHAR(NW-WX)
                   SET NW-WX UP BY 1
                   PERFORM 003030-GET-DEC-PART
                      THRU 003030-EXIT
                        UNTIL (NW-WX > NW-WLIM)
               ELSE
                   IF (NW-WORK-CHAR(NW-WX) = ",")
                       MOVE SPACE TO NW-WORK-CHAR(NW-WX)
                   ELSE
                       SET NW-WX TO NW-WLIM.
      *
           SET NW-WX UP BY 1.
      *
       003020-EXIT.
           EXIT.
      *
      *
      *               GET DECIMAL PART OF NUMBER
      *
       003030-GET-DEC-PART.
      *
           IF (NW-WORK-CHAR(NW-WX) NUMERIC)
               IF (NW-BDX > 6)
                   SET NW-WX  TO NW-WLIM
               ELSE
                   MOVE NW-WORK-DIGIT(NW-WX) TO NW-BLD-DEC-DIGIT(NW-BDX)
                   MOVE SPACES TO NW-WORK-CHAR(NW-WX)
                   SET NW-BDX UP BY 1
           ELSE
               IF (NW-WORK-CHAR(NW-WX) = "-")
                   MOVE -1    TO NW-BLD-SIGN
                   MOVE SPACE TO NW-WORK-CHAR(NW-WX)
                   SET NW-WX  TO NW-WLIM
               ELSE
                   SET NW-WX  TO NW-WLIM.
      *
           SET NW-WX UP BY 1.
      *
       003030-EXIT.
           EXIT.

¤ Dauer der Verarbeitung: 0.28 Sekunden  (vorverarbeitet)  ¤





Download des
Quellennavigators
Download des
sprechenden Kalenders

in der Quellcodebibliothek suchen




Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.


Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.


Bot Zugriff