| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2577 人关注过本帖
标题:请教,循环套循环的程序如何实现?
只看楼主 加入收藏
fengmh
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2018-3-18
结帖率:92.86%
收藏
已结贴  问题点数:18 回复次数:9 
请教,循环套循环的程序如何实现?
已知表A和数组qqq,数组qqq中有7个元素(1,2,4,8,18,38,82);
1、设计程序首次运行,按表A序号顺序从小到大逐行更新投注数;
当结果=.f. 时,投注数=0
当结果=.t.时,投注数仍为0,但在下一条记录开始进行更新本期投注,数值从数组的元素1开始,,一直到循环到最后一个元素值;
2、在数组元素上下标循环范围内,如果结果=.t.,则下条投注数从元素1重新开始加倍投注;
3、如果最后一个元素值投注后,
表A.rar (381 Bytes)
结果仍为.f.,则下一行记录投注数为0,不再投注,直到下一个结果=.t.时,再次启动投注,直至将表中所有记录更新完毕;
注:正确投注已在表A中添加,可参考对比。


[此贴子已经被作者于2019-12-6 09:02编辑过]

搜索更多相关主题的帖子: 更新 元素 数组 结果 循环 
2019-12-06 01:52
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:995
专家分:4966
注 册:2013-2-16
收藏
得分:0 
蛮有趣的问题,今天有空,就顺手在Excel里做了。当然,在DBF里做也是可以的,只要思路理顺了,在哪个环境下做。并不重要。
运行前:
图片附件: 游客没有浏览图片的权限,请 登录注册

点击 按钮,运行后:
图片附件: 游客没有浏览图片的权限,请 登录注册


EXCEL附件:
判断投注Vba解决方案.rar (18.75 KB)
2019-12-06 11:07
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:995
专家分:4966
注 册:2013-2-16
收藏
得分:0 
试着在这个版块发一下VBA代码:
程序代码:
Sub 循环投()
Dim row1 As Integer, row2 As Integer, irow As Integer, iArray As Integer
Dim qqq()
Dim lCanChipin As Boolean
row1 = 2: row2 = 67
qqq = Array(1, 2, 4, 8, 18, 38, 82)
irow = row1
Range(Cells(row1, 5), Cells(row2, 5)).Clear
Do Until irow > row2
    If lCanChipin Then
        iArray = 0
        Do Until iArray > UBound(qqq)
            Cells(irow, 5) = qqq(iArray)
            If Cells(irow, 2) = True Then
                iArray = 0
            Else
                iArray = iArray + 1
            End If
            If iArray <= UBound(qqq) Then irow = irow + 1
        Loop
        If Cells(irow, 2) = False Then
            lCanChipin = False
        Else
        
        End If
        irow = irow + 1
    Else
        If Cells(irow, 2) = False Then
            Cells(irow, 5) = 0
        Else
            Cells(irow, 5) = 0
            lCanChipin = True
        End If
    irow = irow + 1
    End If
    
Loop
MsgBox "判断完毕。", vbInformation, "提示:"
End Sub


[此贴子已经被作者于2019-12-6 11:12编辑过]

2019-12-06 11:09
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1744
专家分:3333
注 册:2012-2-29
收藏
得分:0 
@厨师王德榜,高!赞一个!
2019-12-06 11:26
fengmh
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2018-3-18
收藏
得分:0 
回复 3楼 厨师王德榜
LOCAL  row1 As Integer, row2 As Integer, irow As Integer, iArray As Integer
row1 = 1
USE 预测
blank all fields 本期投注
row2 = reccount()+1
DIMENSION qqq(7)
LOCAL lCanChipin As Boolean
qqq(1)=1
qqq(2)=2
qqq(3)=4
qqq(4)=8
qqq(5)=18
qqq(6)=38
qqq(7)=82
irow = row1
DO while  irow < row2
    If lCanChipin  Then
        iArray = 0
         ENDIF
        ENDDO

        Do while iArray < alen(qqq)  
            UPDATE 预测 SET 本期投注=qqq(iArray)  WHERE RECNO()=irow  
            If 结果=.t. THEN   
                iArray = 0
            Else
                iArray = iArray + 1
            EndIf
            If iArray <= alen(qqq) Then
            irow = irow + 1
        LOOP
          If 结果=.f. THEN  
            lCanChipin = False
        Else
        EndIf
        irow = irow + 1
    Else
        If  结果=.f. THEN      
             UPDATE 预测 SET 本期投注=0  WHERE RECNO()=irow  
        Else
            UPDATE 预测 SET 本期投注=0  WHERE RECNO()=irow  
            lCanChipin = True
        EndIf
    irow = irow + 1
    ENDIF
     LOOP

太难了,写到这儿不会写了,VB和VF还是有很大差距的,没有Do Until这个命令,老师帮忙再看下,VFP如何改,谢谢了!

[此贴子已经被作者于2019-12-7 10:48编辑过]

2019-12-07 10:44
yd1954
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:143
专家分:21
注 册:2016-7-1
收藏
得分:0 
回复 3楼 厨师王德榜
赞!学习啦。
2019-12-07 10:53
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9844
专家分:27213
注 册:2012-2-5
收藏
得分:18 
CLOSE DATABASES
LOCAL aa[7]
aa[1] = 1
aa[2] = 2
aa[3] = 4
aa[4] = 8
aa[5] = 18
aa[6] = 38
aa[7] = 82
nCnt = 0 && 控制输的次数
ok = .F. && 控制结果的值
USE 表A
BLANK FIELDS 本期投注 ALL
SCAN
    IF ok = .F.
        IF 结果 = .F.
            REPLACE 本期投注 WITH 0
        ELSE
            REPLACE 本期投注 WITH 0
            ok = .T.
        ENDIF
    ELSE
        IF 结果 = .F.
            nCnt = nCnt + 1
            REPLACE 本期投注 WITH aa[nCnt]
            IF nCnt = 7
                ok = .F.
                nCnt = 0
            ENDIF
        ELSE
            IF nCnt > 0
                REPLACE 本期投注 WITH aa[nCnt + 1]
                nCnt = 0
            ELSE
                REPLACE 本期投注 WITH aa[1]
            ENDIF
        ENDIF
    ENDIF
ENDSCAN
BROWSE

坚守VFP最后的阵地
2019-12-07 23:45
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1744
专家分:3333
注 册:2012-2-29
收藏
得分:0 
回复 7楼 sdta
好,学习啦,谢谢!
2019-12-08 07:19
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:995
专家分:4966
注 册:2013-2-16
收藏
得分:0 
今天写了一个VFP的代码,供你参考。版主的代码也是很好的,相互印证吧。
程序代码:
CLOSE DATABASES ALL 
RELEASE ALL 
local  irow As Integer, iArray As Integer
DIMENSION  qqq(1) as String
local lCanChipin As Boolean
USE "C:\deepscan\表A.DBF" IN  0 EXCLUSIVE ALIAS AA  &&  改为实际路径
SELECT AA
BLANK FIELDS 本期投注 ALL 
GO TOP 
irow =1 
iArray = Aline(qqq,"1, 2, 4, 8, 18, 38, 82" ,",")
DO WHILE  irow<=RECCOUNT('AA') 
    If lCanChipin Then
        iArray = 1
        Do while iArray <= ALEN(qqq)
            go irow 
            replace  本期投注 with  VAL(qqq[iArray])
            If 结果 = .t. Then
                iArray = 1
            Else
                iArray = iArray + 1
            EndIf
            If iArray <= ALEN(qqq) Then 
                irow = irow + 1
            ENDIF 
        ENDDO 
        If 结果 = .f. Then
            lCanChipin = .f.
        Else
        
        EndIf
        irow = irow + 1
    Else
        go irow 
        If 结果 = .f. Then
            replace  本期投注 with  0
        Else
            replace  本期投注 with  0
            lCanChipin = .t.
        EndIf
    irow = irow + 1
    EndIf
ENDDO 
MESSAGEBOX("判断完毕。",64, "提示:")
2019-12-09 16:47
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1744
专家分:3333
注 册:2012-2-29
收藏
得分:0 
回复 9楼 厨师王德榜
好,学习啦,谢谢!
2019-12-09 20:04
快速回复:请教,循环套循环的程序如何实现?
数据加载中...
 
   



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

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