| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 542 人关注过本帖
标题:怎样用VB写一个这样的程序
只看楼主 加入收藏
tknmtt
该用户已被删除
收藏
 问题点数:0 回复次数:3 
怎样用VB写一个这样的程序
提示: 作者被禁止或删除 内容自动屏蔽
搜索更多相关主题的帖子: 软件 
2010-04-30 12:30
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
自己看吧,时间再写详细的说明了。有运算统计结果,

程序代码:
Option Explicit
'对应0-27 出现的概率,以总数计
Const klb = "1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 13 12 11 10 9 8 7 6 5 4 3 2 1"
Dim kl(27) As Double

Private Type 数据结构
    算式 As String
    结果 As Long
End Type

Dim jg(999) As 数据结构
Dim 分布(28) As Long
Dim 统计(27) As Long

Private Sub Command1_Click()
'显示20组
Cls

Dim i As Long, j As Double
Dim n As Long, m As Long

Dim o As Long
For o = 1 To 20
   
    Do
        j = Rnd()       '产生概率
           
        For i = 0 To 27     '搜索概率
            If j < kl(i) Then
                Exit For
            End If
        Next i
       
    Loop While i < 0
   
    统计(i) = 统计(i) + 1
    n = 分布(i + 1) - 分布(i)
   
    If n = 1 Then
        m = 分布(i)
    Else
        m = 分布(i) + Int(Rnd() * n)
    End If
    'Print j, i, n, m,              'Debug
   
    Print jg(m).算式
Next o

End Sub

Private Sub Command2_Click()
'显示统计结果

Dim i As Long, j As Long
Cls

For i = 0 To 27
    j = 统计(i) + j
Next i

Print "序号", "统计的数量", "占百分比", "设置百分比", "与设置的相差百分比"

For i = 0 To 27
    Print i, 统计(i), Round(统计(i) / j * 100, 2) & "%",                '基础统计数据
    If i > 0 Then
        Print Round((kl(i) - kl(i - 1)) * 100, 2) & "%",                '原始比例
        Print Round(统计(i) / j * 100, 2) - Round((kl(i) - kl(i - 1)) * 100, 2) & "%"       '与原始比例之差
    Else
        Print Round((kl(i)) * 100, 2) & "%",                            '原始比例
        Print Round(统计(i) / j * 100, 2) - Round(kl(i) * 100, 2) & "%"                     '与原始比例之差
    End If
Next i
End Sub

Private Sub Command3_Click()
Dim o As Long
Dim i As Long, j As Double
Dim n As Long, m As Long

For o = 1 To 10000              '产生10000次,不显示
   
    Do
        j = Rnd()       '产生概率
           
        For i = 0 To 27     '搜索概率
            If j < kl(i) Then
                Exit For
            End If
        Next i
       
    Loop While i < 0
   
    统计(i) = 统计(i) + 1
    n = 分布(i + 1) - 分布(i)
   
    If n = 1 Then
        m = 分布(i)
    Else
        m = 分布(i) + Int(Rnd() * n)
    End If

Next o

'产生完成后,显示结果
Call Command2_Click

End Sub

Private Sub Form_Load()
'初始化
Dim i As Long, j As Long, k As Long
Dim n As String, m As Long
Dim fj() As String

'计算各个结果的概率段
fj = Split(klb, " ")
For i = 0 To 27
    j = Val(fj(i)) + j
Next i
For i = 0 To 27
    If i > 0 Then
        kl(i) = Val(fj(i)) / j + kl(i - 1)
    Else
        kl(i) = Val(fj(i)) / j
    End If
Next i


'产生算式及结果
For i = 0 To 9
    For j = 0 To 9
        For k = 0 To 9
            jg(i * 100 + j * 10 + k).算式 = i & " + " & j & " + " & k & " = " & i + j + k
            jg(i * 100 + j * 10 + k).结果 = i + j + k
        Next k
    Next j
Next i

'对结构进行排序
For i = 0 To 999
    k = i
    For j = i To 999
        If jg(k).结果 > jg(j).结果 Then
            k = j
        End If
    Next j
    m = jg(i).结果
    n = jg(i).算式
   
    jg(i).结果 = jg(k).结果
    jg(i).算式 = jg(k).算式
   
    jg(k).结果 = m
    jg(k).算式 = n
Next i

'统计各个结果的开始序号
j = 0
For i = 0 To 999
    If jg(i).结果 <> j Then
        j = j + 1
        分布(j) = i
    End If
Next i

'最后一个数据为1000,确保不出错
    分布(28) = 1000
   
End Sub

授人于鱼,不如授人于渔
早已停用QQ了
2010-04-30 13:34
tknmtt
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-04-30 14:20
ytsm0526
Rank: 2
来 自:西安市
等 级:论坛游民
威 望:2
帖 子:203
专家分:60
注 册:2007-10-28
收藏
得分:0 
学习学习

作舍道边,三年不成。
多抽出一分钟时间学习,让你的生命更加精彩!,
2010-05-02 10:09
快速回复:怎样用VB写一个这样的程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036682 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved