COBOL User Groups COBOL COBOL Programming
Home | Search | COBOL Forums | Join COBUG | Change COBUG Account | Donations | Advertise with us | Contact us | About us | Site Map

 COBOL Jobs List:  Companies Using COBOL
 Programming Software:  DCD III - COBOL Program Documentation | RPV - Graphical COBOL Print


COBOL Jobs

 >  COBOL Job Listing
 >  COBOL Job Seekers
 >  Post COBOL Jobs
 >  Interview Questions
 >  Job Resources

COBOL Resources

 >  Blogs
 >  Books
 >  Computer Timeshare
 >  COBOL Examples
 >  Forums
 >  Knowledge Bases
 >  Magazines
 >  Manuals
 >  Portals
 >  Support
 >  Syntax/Commands
 >  Training
 >  Tutorials
 >  User Groups
 >  White Papers

COBOL Software

 >  Change Management
 >  COBOL Compilers
 >  Data Access
 >  Database
 >  Documentation
 >  COBOL Editors
 >  File Conversion
 >  GUI
 >  Legacy Migration
 >  Legacy Modernization
 >  Mainframe Security
 >  Report Generators
 >  Sort
 >  Terminal Emulators
 >  Test
 >  Tools
 >  Trans. Processing

COBOL Information

 >  Events
 >  News Articles
 >  Newsletters
 >  Product News
 >  COBOL Standards

COBOL Report Generator

Print graphical COBOL reports in Windows with RPV Reports. Insert graphics (images, photos, logos, charts, etc.) into your COBOL reports to improve the print quality of your COBOL reports. See how RPV Reports can be used to preview or print graphical COBOL reports in Windows.

COBOL Documentation

Are your mainframe COBOL applications properly documented? DCD III is a comprehensive COBOL documentation and application understanding tool that will allow you to reduce COBOL maintenance, development, and mainframe migration costs. Learn more about how you can document and understand your mainframe COBOL applications with DCD III.

COBOL Email List Rental

You can reach a highly targeted, qualified, opt-in audience of COBOL users by renting the COBUG email list. Contact us today advertise@cobug.com for our email list rental rates.

Website Advertisement

Advertise on the COBUG website and reach tens of thousands of COBOL users. Increase your COBOL sales leads. Contact COBUG at advertise@cobug.com for advertising rates.

Support COBUG

COBOL Donation
 

COBOL Forums

 
COBOL Language [ return ]
From Message
twacker

 Email

6/10/2011
07:32:30
Subject: Randomizing Error


Message:
I inherited a program that has the following process in it. The purpose is to create a list of random numbers. We know that there are x records in a file and the program is to select y records from the file. The program is to create a list of y random numbers that represents which records are to be selected. Thus when done, the values of the random number are to be from 1 to x.

Most of the time, the routine works. Once in a while, it selects 1 record less than what is desired. Rerunning the job results in the correct number of records be selected.

The code involved is:
01 WS-SELECT-FILE-KEY PIC 9(08).

01 WS-INCREMENT-BY-ONE-SW PIC X(01).
88 WS-INCREMENT-BY-ONE VALUE 'Y'.

01 WS-WORK-AREAS.
05 WS-SELECT-SEQ-NUM PIC 9(08) VALUE ZEROS.
05 WS-HOLD-TOTAL-CNT PIC 9(08) VALUE ZEROS.
05 WS-MAX-RECORDS PIC 9(03) VALUE ZEROS.
05 SUB PIC 9(04) VALUE ZEROS.
05 WS-SAVE-TABLE-ENTRY PIC 9(04) VALUE ZEROS.

01 WS-RANDOM-TABLE.
05 FILLER OCCURS 999 TIMES.
10 WS-RANDOM-NUMBER PIC 9(09) VALUE ZEROS.
10 WS-RANDOM-NUMBER-X REDEFINES
WS-RANDOM-NUMBER PIC X(09).

01 WS-FIFTEEN-DIGIT-NUMBER PIC 9(15).
01 WS-DUMMY-NUMBER PIC 9(10).
01 WS-RANDOM-SEED3 PIC 9(03).
01 WS-NEW-RANDOM-NUMBER3 REDEFINES WS-RANDOM-SEED3
01 WS-RANDOM-SEED4 PIC 9(04).
01 WS-NEW-RANDOM-NUMBER4 REDEFINES WS-RANDOM-SEED4
01 WS-RANDOM-SEED5 PIC 9(05).
01 WS-NEW-RANDOM-NUMBER5 REDEFINES WS-RANDOM-SEED5
01 WS-RANDOM-SEED6 PIC 9(06).
01 WS-NEW-RANDOM-NUMBER6 REDEFINES WS-RANDOM-SEED6
01 WS-RANDOM-SEED7 PIC 9(07).
01 WS-NEW-RANDOM-NUMBER7 REDEFINES WS-RANDOM-SEED7
01 WS-RANDOM-SEED8 PIC 9(08).
01 WS-NEW-RANDOM-NUMBER8 REDEFINES WS-RANDOM-SEED8
01 SYS-TIME PIC 9(08).
01 SYS-TIME-2 PIC 9(08).

* PRIOR TO THIS, THE FOLLOWING FIELDS ARE SET
* WS-HOLD-TOTAL-CNT CONTAINS THE NUMBER OF RECORDS ON FILE
* WS-MAX-RECORDS CONTAINS THE NUMBER OF RECORDS TO BE SELECTE
PERFORM 6000-RANDOM-SETUP
PERFORM UNTIL WS-SAVE-TABLE-ENTRY NOT <
WS-MAX-RECORDS OR
WS-HOLD-TOTAL-CNT NOT >
WS-SAVE-TABLE-ENTRY - 1
PERFORM 6100-GET-RANDOM-NUMBER
END-PERFORM

6000-RANDOM-SETUP.

MOVE 'N' TO WS-INCREMENT-BY-ONE-SW
INITIALIZE WS-RANDOM-TABLE
WS-SAVE-TABLE-ENTRY
IF WS-HOLD-TOTAL-CNT NOT > WS-MAX-RECORDS
MOVE 0 TO WS-SELECT-FILE-KEY
MOVE 'Y' TO WS-INCREMENT-BY-ONE-SW
ELSE
COMPUTE WS-SELECT-FILE-KEY =
WS-MAX-RECORDS - WS-HOLD-TOTAL-CNT
IF WS-SELECT-FILE-KEY < 11
COMPUTE WS-SELECT-FILE-KEY =
WS-SELECT-FILE-KEY * .5
MOVE 'Y' TO WS-INCREMENT-BY-ONE-SW
ELSE
MOVE WS-HOLD-TOTAL-CNT TO WS-SELECT-FILE-KEY
END-IF
END-IF.
***************************************************************
* CREATE RANDOM NUMBER
***************************************************************
6100-GET-RANDOM-NUMBER.
EVALUATE TRUE
WHEN WS-INCREMENT-BY-ONE
ADD 1 TO WS-SELECT-FILE-KEY
WHEN WS-HOLD-TOTAL-CNT < 1000
MOVE WS-SELECT-FILE-KEY TO WS-RANDOM-SEED3
MULTIPLY WS-RANDOM-SEED3 BY 16807 GIVING
WS-FIFTEEN-DIGIT-NUMBER
DIVIDE 2147483647 INTO WS-FIFTEEN-DIGIT-NUMBER GIVING
WS-DUMMY-NUMBER REMAINDER WS-NEW-RANDOM-NUMBER3
MOVE WS-NEW-RANDOM-NUMBER3 TO WS-SELECT-FILE-KEY
WS-SELECT-SEQ-NUM
WHEN WS-HOLD-TOTAL-CNT < 10000
MOVE WS-SELECT-FILE-KEY TO WS-RANDOM-SEED4
MULTIPLY WS-RANDOM-SEED4 BY 16807 GIVING
WS-FIFTEEN-DIGIT-NUMBER
DIVIDE 2147483647 INTO WS-FIFTEEN-DIGIT-NUMBER GIVING
WS-DUMMY-NUMBER REMAINDER WS-NEW-RANDOM-NUMBER4
MOVE WS-NEW-RANDOM-NUMBER4 TO WS-SELECT-FILE-KEY
WS-SELECT-SEQ-NUM
WHEN WS-HOLD-TOTAL-CNT < 100000
MOVE WS-SELECT-FILE-KEY TO WS-RANDOM-SEED5
MULTIPLY WS-RANDOM-SEED5 BY 16807 GIVING
WS-FIFTEEN-DIGIT-NUMBER
DIVIDE 2147483647 INTO WS-FIFTEEN-DIGIT-NUMBER GIVING
WS-DUMMY-NUMBER REMAINDER WS-NEW-RANDOM-NUMBER5
MOVE WS-NEW-RANDOM-NUMBER5 TO WS-SELECT-FILE-KEY
WS-SELECT-SEQ-NUM
WHEN WS-HOLD-TOTAL-CNT < 1000000
MOVE WS-SELECT-FILE-KEY TO WS-RANDOM-SEED6
MULTIPLY WS-RANDOM-SEED6 BY 16807 GIVING
WS-FIFTEEN-DIGIT-NUMBER
DIVIDE 2147483647 INTO WS-FIFTEEN-DIGIT-NUMBER GIVING
WS-DUMMY-NUMBER REMAINDER WS-NEW-RANDOM-NUMBER6
MOVE WS-NEW-RANDOM-NUMBER6 TO WS-SELECT-FILE-KEY
WS-SELECT-SEQ-NUM
WHEN WS-HOLD-TOTAL-CNT < 10000000
MOVE WS-SELECT-FILE-KEY TO WS-RANDOM-SEED7
MULTIPLY WS-RANDOM-SEED7 BY 16807 GIVING
WS-FIFTEEN-DIGIT-NUMBER
DIVIDE 2147483647 INTO WS-FIFTEEN-DIGIT-NUMBER GIVING
WS-DUMMY-NUMBER REMAINDER WS-NEW-RANDOM-NUMBER7
MOVE WS-NEW-RANDOM-NUMBER7 TO WS-SELECT-FILE-KEY
WS-SELECT-SEQ-NUM
WHEN OTHER
MOVE WS-SELECT-FILE-KEY TO WS-RANDOM-SEED8
MULTIPLY WS-RANDOM-SEED8 BY 16807 GIVING
WS-FIFTEEN-DIGIT-NUMBER
DIVIDE 2147483647 INTO WS-FIFTEEN-DIGIT-NUMBER GIVING
WS-DUMMY-NUMBER REMAINDER WS-NEW-RANDOM-NUMBER8
MOVE WS-NEW-RANDOM-NUMBER8 TO WS-SELECT-FILE-KEY
WS-SELECT-SEQ-NUM
END-EVALUATE .

IF WS-SELECT-FILE-KEY = 0
MOVE 1 TO WS-SELECT-FILE-KEY
END-IF
PERFORM 6150-NEW-KEY-DUP-CHECK.
***************************************************************
* VERIFY THAT THE SAME RANDOM NUMBER ISN'T USED TWICE
***************************************************************
6150-NEW-KEY-DUP-CHECK.

IF WS-HOLD-TOTAL-CNT > WS-MAX-RECORDS
IF WS-SELECT-FILE-KEY NOT < WS-HOLD-TOTAL-CNT
PERFORM 6155-GET-TIME
PERFORM UNTIL WS-SELECT-FILE-KEY <
SYS-TIME
COMPUTE WS-SELECT-FILE-KEY =
WS-SELECT-FILE-KEY -
SYS-TIME
IF WS-SELECT-FILE-KEY < 1
PERFORM 6155-GET-TIME
END-IF
END-PERFORM
END-IF
END-IF.

MOVE 1 TO SUB
PERFORM UNTIL WS-RANDOM-NUMBER (SUB) =
ZERO OR
SUB > 999 OR
WS-SELECT-FILE-KEY =
. . . . . . . . . . . . . . . . . . .
WS-RANDOM-NUMBER (SUB)
ADD 1 TO SUB
END-PERFORM.

IF WS-RANDOM-NUMBER (SUB) = ZEROES
MOVE WS-SELECT-FILE-KEY TO
WS-RANDOM-NUMBER (SUB)
MOVE SUB TO WS-SAVE-TABLE-ENTRY
ELSE
IF NOT WS-INCREMENT-BY-ONE
ACCEPT SYS-TIME FROM TIME
MOVE SYS-TIME TO WS-SELECT-FILE-KEY
END-IF
END-IF.
/**************************************************************
* GET SYSTEM TIME
***************************************************************
6155-GET-TIME.

ACCEPT SYS-TIME FROM TIME.

MOVE SYS-TIME TO SYS-TIME-2
MOVE SYS-TIME-2 TO SYS-TIME
COMPUTE SYS-TIME = SYS-TIME * .50
IF SYS-TIME > WS-HOLD-TOTAL-CNT
PERFORM UNTIL SYS-TIME <
WS-HOLD-TOTAL-CNT
COMPUTE SYS-TIME =
SYS-TIME -
WS-HOLD-TOTAL-CNT
IF SYS-TIME < 1
ACCEPT SYS-TIME FROM TIME
MOVE SYS-TIME TO SYS-TIME-2
MOVE SYS-TIME-2 TO SYS-TIME
COMPUTE SYS-TIME = SYS-TIME * .50
END-IF
END-PERFORM
END-IF.


Jens611

6/10/2011
09:31:26
RE: Randomizing Error


Message:
That could be caused by wrong or missing initialization. Check the counters and the records.



 
[ Go to Top of Page ]
Visual COBOL - Micro Focus Banner Ad
Mainframe Applications - SysperTec Banner Ad
COBOL Legacy Mainframe Migration - Transoft Ad
netCOBOL Compiler, Legacy Mainframe Migration - Alchemy netCOBOL Ad
Micro Focus COBOL Download - Micro Focus Ad










COBOL Job Seekers
COBOL Jobs Looking for a COBOL job? Submit your resume here and have it viewed by employers and recruiters hiring for COBOL positions.

Employers & Recruiters
Post COBOL Jobs Do you need to fill a COBOL position? Post your COBOL jobs here and find the most qualified COBOL candidates to fill your COBOL position.

Call for Articles
COBOL Newsletters Articles are being sought for the COBUG newsletters.
Will you help us in our efforts to provide newsletters for the COBOL community at large? Contribute to the COBUG newsletters! Answer this call for COBOL and related legacy articles.

Local COBOL User Groups
COBOL User Group Check out the list of local COBOL user groups from around the world and join a user group near you.


Call for User Group Leaders!
COBOL User Groups Get Involved! We are looking for user group leaders to help organize and coordinate a local COBOL user group.

Join COBUG!
COBOL User Groups Become a part of the COBUG community today. Join Now ...


COBOL Forums
COBOL Forum Try our forums for help!
Let the COBUG members help you. Post your issues!



[Go to Top of Page]


COBOL (c) Information Computing Services. All Rights Reserved. COBOL