Odd, because when I go to compile this code, I get this:
address@hidden:~$ cobc random.cbl
random.cbl: In paragraph 'Main':
random.cbl:11: Error: syntax error, unexpected PERFORM, expecting ADDRESS or "Identifier"
System is Debian 7 "Wheezy" AMD64 running in an ESXi 5 virtual machine.
From: Bruce M. Axtens
Sent: Thursday, May 30, 2013 9:30 AM
To: address@hidden
Subject: [open-cobol-list] RANDOM-ly non-random
Context: MinGW
$ uname -a
MINGW32_NT-6.1 MERCURY 1.0.17(0.48/3/2) 2011-04-24 23:39 i686 Msys
$ cobc -v
cobc (OpenCOBOL) 1.1.0
Copyright (C) 2001-2009 Keisuke Nishida / Roger While
Built May 29 2013 21:53:19
Packaged Feb 06 2009 10:30:55 CET
Sadly, I don't get to do much COBOL. The best I can do is the occasional RosettaCode task.
I was looking at
<http://rosettacode.org/wiki/Loops/Break#COBOL>. I copied and pasted into a text editor, made it free-form, and started to fiddle.
I've got as far as this:
IDENTIFICATION DIVISION.
PROGRAM-ID. Random-Nums.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 Num PIC Z9.
01 SEED PIC 9V999999999.
PROCEDURE DIVISION.
Main.
MOVE FUNCTION RANDOM(FUNCTION SECONDS-PAST-MIDNIGHT) TO SEED.
PERFORM FOREVER
PERFORM Generate-And-Display-Num
IF Num = 10
EXIT PERFORM
ELSE
PERFORM Generate-And-Display-Num
END-IF
END-PERFORM
GOBACK
.
Generate-And-Display-Num.
COMPUTE Num = FUNCTION REM(FUNCTION RANDOM * 100, 20)
DISPLAY Num
.
END-PROGRAM.
The END-PROGRAM seemed to be mandatory. I wouldn't compile otherwise.
The thing that has me confused (and thus all the fiddling with RANDOM) is that the program runs properly occasionally, and other time just gets locked on a particular value and doesn't change.
A working runs looks like this:
$ breakloop.exe
23
67
23
21
67
18
14
17
27
11
16
25
29
26
12
23
90
27
14
20
30
29
10
but another run starts off nicely, but then gets stuck
$ breakloop.exe
25
18
29
80
14
16
26
24
26
36
18
29
54
47
29
29
29
... ad infinitum
Why is it so?
Kind regards,
Bruce.