|
Larry, this is all very interesting, and I tried it at home yesterday. Which gave me a very strange error at runtime: Win32.dll doesn't seem to exist on my system (WinXP Pro SP2 with all current patches). Is this a standard Windows DLL, or do I need to install an additional package? Thanks, Peter ---- Forwarded by Peter Colpaert/Misc/BE/massive on 11/03/2005 07:41 ----- "Larry Ducie" <Larry_Ducie@xxxxxxxxxxx> Sent by: rpg400-l-bounces@xxxxxxxxxxxx 10/03/2005 23:41 Please respond to RPG programming on the AS400 / iSeries To: <rpg400-l@xxxxxxxxxxxx> cc: Subject: RE: Random number in VARPG Hi Peter, <snip> As I don't have an iSeries at home, it has to be completely PC-based. The problem I'm encountering is that I need to randomize the array with questions, and I have no clue as to how to start this. </snip> Remember that you have access to the WinAPI (Win32 DLL) so most things you can do on a PC you can do using VARPG. Or you could download a Java class that generates a random number and interface to that. You just need to "think PC" not "AS/400" for native solutions. With that in mind, simply use the WinAPI rand() function (below is the C prototype). So I'm sure you could simply prototype rand(), specifying Win32.DLL, using a 10I 0 return variable: *** start of include*** int rand ( void ); Generate random number. Returns a pseudo-random number in the range from 0 to RAND_MAX constant. This is generated by an algorithm that returns a series of non-related numbers each time is called. This algorithm should be initialized to different starting points using function srand <http://www.cplusplus.com/ref/cstdlib/srand.html> to generate more realistic random numbers. RAND_MAX is a constant defined in stdlib.h. Its default value is implementation defined. Parameters. (none) Return Value. An integer value between 0 and RAND_MAX. Portability. Defined in ANSI-C. Example. /* rand example */ #include <stdio.h> #include <stdlib.h> #include <time.h> int main () { /* initialize random generator */ srand ( time(NULL) ); /* generate some random numbers */ printf ("A number between 0 and RAND_MAX (%d): %d\n", RAND_MAX, rand()); printf ("A number between 0 and 99: %d\n", rand()%100); printf ("A number between 20 and 29: %d\n", rand()%10+20); return 0; } Output: A number between 0 and RAND_MAX (32767): 30159 A number between 0 and 99: 72 A number between 20 and 29: 23 A good way to generate almost-true random numbers is to initialize the random algorithm using srand() with the current time in seconds as parameter, as obtained from time function included in <time.h>. And, generally, a good way to get an integer random number between a range is to perform a module (%) operation on a result provided by rand(): thus rand()%25 would be a random number between 0 and 24, both included. *** end of include*** The most difficult thing about using VARPG to interface with "native" DLLs is the nesting of the header files. That is, you find an example that <includes> some prototypes in a header file, but when you find the header file it simply <includes> more header files, and so on until you find that the value you should be passing to the procedure is another int. And, yes, it's 10I 0 on the PC too. :-) Have a look at http://www.cplusplus.com/ref/cstdlib/rand.html Good luck. Larry Ducie
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.