* 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 PERFORMUNTIL 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. EVALUATETRUE 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 WHENOTHER 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 PERFORMUNTIL 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 PERFORMUNTIL WS-RANDOM-NUMBER (SUB) = ZEROOR
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 IFNOT WS-INCREMENT-BY-ONE ACCEPT SYS-TIME FROMTIME MOVE SYS-TIME TO WS-SELECT-FILE-KEY END-IF END-IF.
/************************************************************** * GET SYSTEM TIME ***************************************************************
6155-GET-TIME.
ACCEPT SYS-TIME FROMTIME.
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 PERFORMUNTIL SYS-TIME <
WS-HOLD-TOTAL-CNT COMPUTE SYS-TIME =
SYS-TIME -
WS-HOLD-TOTAL-CNT IF SYS-TIME < 1 ACCEPT SYS-TIME FROMTIME 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. End-program cobug5.
Messung V0.5
¤ Dauer der Verarbeitung: 0.16 Sekunden
(vorverarbeitet)
¤
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 und die Messung sind noch experimentell.