免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4308 | 回复: 12
打印 上一主题 下一主题

問題:RPG如何實現隨機函數 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-31 09:28 |只看该作者 |倒序浏览
系統C  C++   java 的權利全部都被上層剝奪。
我用的死辦法,就是1~100的每個數字一一附給編號,然后創表將這些數字從新排列,然后讀該表。
求高端人士點化。。。。。。。。。。。

论坛徽章:
0
2 [报告]
发表于 2011-12-31 18:08 |只看该作者
RPGLE例子(二):BNDDIR>服务程序>Service:C 随机函数>随机数

要求:在数字1000000和数字5000000之间产生一个随机数。

步骤一、
TC.cle:(ile环境下C语言)
#include <stdio.h>                  
#include <time.h>                  
#include <stdlib.h>                 
extern  int  RANF(int start, int end)
{                                   
    int j, result;                  
                                    
    srand((unsigned)time(NULL));   
    j = rand()%(end - start);      
    result = j+start;               
    return result;                  
}                                   
这里TC的后缀必须是cle,或cpple,即ile环境下的语言后缀。
用CRTMOD指定生成到MyLib下。

步骤二、
用RTVBNDSRC 命令在MyLib目录的QBNDSRC下,生成TC(BND)文件:
RTVBNDSRC  MODULE(MyLib/TC)      
          SRCFILE(Mylib/QBNDSRC)
          SRCMBR(TC)  
生成结果,即TC(BND)文件的内容:
STRPGMEXP PGMLVL(*CURRENT)                                             
/*********************************************************/
/*   *MODULE      TC    MYLIB   11/06/15  17:09:04      */
/*********************************************************/
    EXPORT SYMBOL("RANF")                                                
ENDPGMEXP

步骤三、
    用命令CRTSRVPGM生成服务程序TOOLS,*SRVPGM:
CRTSRVPGM SRVPGM(MYLIB/TOOLS)   
          MODULE(MYLIB/TC)      
          SRCFILE(MYLIB/QBNDSRC)
          SRCMBR(TC)

步骤四、
用CRTBNDDIR生成MYLIB/BTEST BNDDIR:
CRTBNDDIR BNDDIR(MYLIB/BTEST)
加载:
ADDBNDDIRE BNDDIR(MYLIB/BTEST)  OBJ((MYLIB/TOOLS))

步骤五、
   测试程序TEST.rpgle:
H OPTION(*ShowCpy)                                    
h DFTACTGRP(*NO)                                      
H BNDDIR('BTEST')                                    
*                                                   
d Randam          pr            10i 0 extproc('RANF')
d  s_Start                       10i 0 value           
d  s_End                        10i 0 value           
*                                                   
d  s_Start        s              10i 0 inz(1000000)
d  s_End          s             10i 0 inz(5000000)
d s_Result        s               10i 0 inz            
/free                                                
    s_Result = Randam(s_Start:s_End) ;               
                                                      
    *inlr = *on ;                                    
    return ;                                          
/end-free
用选项14直接在MYLIB下生成TEST,*PGM。

注意地方:
1)        C语言生成module,作为服务程序的一个service,C语言的后缀必须是CLE,或CPPLE。
2)        C语言的原型接口是int时,调用程序rpgle的原型定义必须是10i 0。
3)        当人工修改BND文件为生成srvpgm做准备时,SYMBOL指定的符号必须是C语言中定义的函数名,而不是C语言的module名。
                                                                                                               

论坛徽章:
0
3 [报告]
发表于 2012-01-01 20:31 |只看该作者
不能用C和C++等等,單獨用RPG除了我自己哪個辦法外,有沒有更意想不到的方法呢,RPG其實可以解決隨機函數的為題,也就是隨機抽樣檢查

论坛徽章:
0
4 [报告]
发表于 2012-01-01 23:52 |只看该作者
rpg\c\c++都是ILE下的语言,为什么不能用?

论坛徽章:
0
5 [报告]
发表于 2012-01-02 12:04 |只看该作者
首先非常感謝親愛的passthru,非常感謝您,您的方式也非常正確。
對於您3樓中的疑問我可以確認,我們的AS400中其他語言的環境都被限制了,可以說是刪除了此權限
刪除的庫我一時忘了,我帶查詢後告訴您。

论坛徽章:
0
6 [报告]
发表于 2012-01-02 16:12 |只看该作者
本帖最后由 熊富貴 于 2012-01-02 16:13 编辑

QSYSINC此庫不存在了

论坛徽章:
0
7 [报告]
发表于 2012-02-17 23:41 |只看该作者
回复 4# passthru
RPGLE,有没有系统提供的BUILD-IN FUNCTION 呢?
对于一些没有这种混合语言编程的公司,将 C  跟 RPG 渗在一起,确实没有搞过.

   

论坛徽章:
0
8 [报告]
发表于 2012-02-19 20:29 |只看该作者
本帖最后由 coolk 于 2012-02-23 22:42 编辑

在RPG中调用API  CEERAN0 或者C语言的相关函数API
给一个例子,不知道满不满足楼主的需求!

H Debug(*Yes)  BNDDIR('QC2LE')                        
*                                                     
D GetRandom       PR            10U 0 ExtProc('rand')  
*                                                     
D SetRandom       PR                  ExtProc('srand')
D   Seed                        10U 0 Value            
*                                                     
D MyRanDomNum     S             10U 0 Inz(*Zeros)      
D MySeed          S             10U 0 Inz(*Zeros)      
*                                                     
C                   Eval      MyRanDomNum = GetRanDom  
C     MyRanDomNum   Dsply                              
*                                                     
C                   Eval      MySeed = 1000            
C                   Callp     SetRandom( MySeed )      
*                                                     
C                   Eval      MyRanDomNum = GetRanDom              
C     MyRanDomNum   Dsply                                          
*                                                                 
C                   SetOn                                        Lr

论坛徽章:
0
9 [报告]
发表于 2012-02-23 09:10 |只看该作者
回复 8# coolk


    TKS 嘿嘿{:3_193:}

论坛徽章:
0
10 [报告]
发表于 2012-03-06 18:14 |只看该作者
楼主 coolk 的程序 你可以编译成功并运行吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP