回复43楼<lly>的提醒
我们写程序都是在准确理解“目标功能”的前提下直奔“目标功能”去的!譬如我们要为产品生产线写一个控制程序,首先是要向生产工艺师了解清楚产品在生产线上加工过程的工艺流程和工艺要求,然后再拟定出生产线上各个设备的控制“目标功能”。围绕这些“目标功能”再写出最简洁、最合理的控制程序来!
在这个主题里,楼主的题目是:
我觉得难就难在随即上,你们的随机是否就为“随机”!?
Wanggq的回复:
我在给出21楼的答案程序之前就有顾虑:可能有的网友对“随机”的概念是不清楚的。要是我直接的把答案贴出来,可能会有人说这个程序产生出来的输出状态不是“随机”的!所以,我在把答案程序给出来之前就先用了一些篇幅来阐述“随机”的定义!看见没人对这个“随机”定义提出异议,我才把答案程序贴出来的!
如果<sunhong >认为21楼的答案程序所产生的输出状态不是“随机”的状态,那么就请您说说看,什么才是“随机”的状态?!一个硬币随意的抛向天空,当它落下来时它的哪一面朝上不是“随机”状态?又哪一面朝上才是“随机”状态?!
在楼主的题目中所包含内容的确有两种成分:即“随机现象”和“确定现象”。
先说“确定现象”的成分
题目“使用PLC(FX2n-48MT)中的16个输出端子Y0~Y17,编写产生随机6个输出端子置高电平的程序”中这要求“6个输出端子置高电平”就是一个“确定的现象”。您们哪位如果搞出一个由Y0~Y17(OFF/ON)构成“绝对随机”的组合状态,若其中的ON位不足6个或超过6个就拿来当正确答案。那就说明该位网友是没有准确理解楼主的题目要求!输出端子Y0~Y17中只有刚好为6个ON位才能算是圆满完成了楼主“目标功能”所提的要求!!
您们该不会因为一枚硬币每次被抛上去再落下来时总还仍旧是一枚硬币这个“确定现象”您们就说一枚硬币被随意的抛向空中,当它落下来后到底哪一面朝上的问题是一个“伪随机”的问题吧?!
再说“随机现象”的成分
题目中的“16个输出端子Y0~Y17中随机产生6个ON状态”这个“随机”就是指限制为6个ON位在16个位置上完全不可能受操作者意愿掌控的随机安排!
譬如它们的排列组合可能是:10100000 11100100 也可能是:00101000 00111010 等等………。
第21楼的程序就是针对楼主的这两个成分所做出的正确答案,说21楼的程序之功能是使Y0~Y17这16个bit 的状态生成“随机的组合状态”是因为下述3点:
第1、操作按钮X05是由操作者人工摁下的,所以这个摁下时刻对于CPU时钟信号的相位关系来说是一个“随机现象”,您们哪一位可以保证说由您们凭人工操作X05能够做到精确的和CPU时钟信号成一个确定的相位关系?
第2、高速环形计数器“D8099”最低两个bit内容MOV给M0及M1。所以M0每隔 0.1 mS 翻转一次状态,M1每隔 0.2 mS 翻转一次状态。您们哪一位能够准确的把握这样高速翻转的 M1 M0 的组合状态?!况且,程序的扫描周期并不是每个周期都是一样长的,对它们还有最大扫描周期及最小扫描周期之分。所以程序扫描周期与D8099的计数步伐根本合不上拍子!所以,由 M1 M0 的组合状态来作为移位寄存器<K4Y0>的输入信号源对于操作X05者来说是绝对的“随机现象”!
第3、移位寄存器“K4Y0”把信号源的信息从低位朝高位方向高速的滚动传递着。您们哪一位能够在操作X05时准确把握移位寄存器“K4Y0”其16个输出位的当前组合状态?!!
基于以上3点,我们完全可以判定21楼的答案程序所产生的输出状态是一类“绝对”的“随机现象”!即便在实验中输出位的组合状态可能出现有相同的情况,但这也是概率论所允许的情况!
“伪随机”就是“假的随机”!本来“随机现象”是事前不可预言的现象,即在相同条件下重复进行试验,每次结果未必相同,或知道事物过去的状况,但未来的发展却不能完全肯定。而“伪随机码”却是人为预先设计的,可以用某种公式来计算从而得出确定的结果来的现象!
下面我们举例说明“伪随机码”序列的特点:
序列α= 0110100,其中0和1的个数相差1。把α看成周期为7的无限序列,左移1位得,α1 = 1101000,把α1也看成周期为7的无限序列。
α= 0110100 ; α1=1101000 在一个周期里,α和α1的对应位置元素相同的位置有3个,元素不同的位置有4个,它们的差等于-1,这个数称为α的自相关函数在1处的值,记作s 。类似地,把α左移2位,3位,…6位,可以求出α的自相关函数在2处,3处,…6处的值也等于-1。当0 < │s│ <7时,称为α的自相关函数的旁瓣值。从刚才所求出的结果知道,α= 0110100的自相关函数的旁瓣值只有一个:-1。像这样的序列称为伪随机序列或拟完美序列。即,一个周期为v的无限序列,如果在一个周期里,0和1的个数相差1,并且它的自相关函数的旁瓣值只有一个:-1,则称它为伪随机序列或拟完美序列。α的自相关函数的旁瓣值的绝对值越大,就表明(或把0和1互换得到的序列)与α越像。因此如果周期为v的序列α是一个伪随机序列,那么α不管左移几位(只要不是v的倍数),得到的序列都和α很不像,这样就很难分辨出α是什么样子。好比川剧的变脸,由于每一次都变得和演员的脸很不一样,因此很难知道演员自己的脸是什么样子。反之如果演员每一次化装后都跟他自己的脸有许多相同之处,那么就容易辨认演员长得什么样。这说明了用伪随机序列作为密钥序列,有一点点安全性,但是真正随机数列比伪随机的数列更安全。
伪随机序列是用函数生成伪随机数。它并不真正是随机的,只是比较近似随机 。
一个简单的伪随机数产生方法如下:
X0=345
Xn=(Xn-1*A+B)/C
其中A,B,C是常数,上式每执行一次就生成一个伪随机数。
大家现在明白什么是真“随机”,什么是伪“随机”的吧?!