huangh 发表于 2021-3-13 19:28:58

请教如何完成以下流程的逻辑设计?

我想通过Au3来完成以下流程模块的运行,因Au3取消了Goto语句(如果有Goto就简单了),感觉用循环完成这个逻辑运行流程有些困难,请教高人!
流程图见附件,每个方块代表一个子模块。

afan 发表于 2021-3-13 20:34:39

huangh 发表于 2021-3-13 20:29
谢谢两位老师耐心解答,可能我还是没太表达清楚。ABCD...这些都是独立功能的模块(有的有函数参数和返回值) ...
这样不就没嵌套,全都独立了
Do
      _FuncA()
      If _FuncB() > 100 Then
                _FuncC()
      Else
                _FuncE()
                _FuncF()
      EndIf
      _FuncD()
      If Not _FuncG() Then ExitLoop
Until 0
Exit

Func _FuncA()
EndFunc   ;==>_FuncA

Func _FuncB()
      Return Random(1, 200, 1)
EndFunc   ;==>_FuncB

Func _FuncC()
EndFunc   ;==>_FuncC

Func _FuncE()
EndFunc   ;==>_FuncE

Func _FuncF()
EndFunc   ;==>_FuncF

Func _FuncD()
EndFunc   ;==>_FuncD

Func _FuncG()
      Return Random(1, 0, 1)
EndFunc   ;==>_FuncG

junyee 发表于 2021-3-13 19:39:14

本帖最后由 junyee 于 2021-3-14 09:41 编辑

你用 while + break 试试.

---
补充说明,不是 break, AU3中的 break操作 是 exitloop.


afan 发表于 2021-3-13 19:46:17

这意思?
Do
        _FuncA()
        If Not _FuncG() Then ExitLoop
Until 0
Exit

Func _FuncA()
        If _FuncB() > 100 Then
                _FuncC()
        Else
                _FuncE()
                _FuncF()
        EndIf
        _FuncD()
EndFunc   ;==>_FuncA

Func _FuncB()
        Return Random(1, 200, 1)
EndFunc   ;==>_FuncB

Func _FuncC()
EndFunc   ;==>_FuncC

Func _FuncE()
EndFunc   ;==>_FuncE

Func _FuncF()
EndFunc   ;==>_FuncF

Func _FuncD()
EndFunc   ;==>_FuncD

Func _FuncG()
        Return Random(1, 0, 1)
EndFunc   ;==>_FuncG

绿色风 发表于 2021-3-13 19:54:44




Global $ii = 1

;此方法有 递归级别 限制

A()


Exit

Func A()
        _CW("进入A")
        Local $v = B()
        If $v > 100 Then
                E()
        Else
                C()
        EndIf
EndFunc   ;==>A

Func B()
        Local $vvv = 1 ; V1>100 的那个测试值
        _CW("进入B"&@TAB&"值是:"&$vvv)
        Return $vvv
EndFunc   ;==>B

Func C()
        _CW("进入C")
        D()
EndFunc   ;==>C

Func D()       
        _CW("进入D")
        Local $v = G()
        If $v = True Then
                $ii +=1 ;计次用
                Sleep(100)
                _CW("-----继续"&$ii&"循环------")
                A()
        Else
                _CW("退出程序"&@crlf)
                Exit
        EndIf
EndFunc   ;==>D

Func E()
        _CW("进入E")
        F()
EndFunc   ;==>E

Func F()
        _CW("进入F")
        D()
EndFunc   ;==>F

Func G()
        Local $vvv = True ;V2=True 那个测试值 。注意为 False
        _CW("进入G"&@TAB&"值是: "&$vvv)
        Return $vvv
EndFunc   ;==>G


Func _CW($str)
        ConsoleWrite(@CRLF)
        ConsoleWrite($str)
EndFunc   ;==>_CW

绿色风 发表于 2021-3-13 20:02:24




Global $ii = 1

;可一直循环
Do
      A()
Until 0

Exit

Func A()
        _CW("进入A")
        Local $v = B()
        If $v > 100 Then
                E()
        Else
                C()
        EndIf
EndFunc   ;==>A

Func B()
        Local $vvv = 1 ; V1>100 的那个测试值
        _CW("进入B"&@TAB&"值是:"&$vvv)
        Return $vvv
EndFunc   ;==>B

Func C()
        _CW("进入C")
        Return D()
EndFunc   ;==>C

Func D()       
        _CW("进入D")
        Local $v = G()
        If $v = True Then
                $ii +=1 ;计次用
                Sleep(100)
                _CW("-----继续"&$ii&"循环------")
;~                 A()
        Else
                _CW("退出程序"&@crlf)
                Exit
        EndIf
EndFunc   ;==>D

Func E()
        _CW("进入E")
        F()
EndFunc   ;==>E

Func F()
        _CW("进入F")
        D()
EndFunc   ;==>F

Func G()
        Local $vvv = True ;V2=True 那个测试值 。注意为 False
;~         Local $vvv = False ;V2=True 那个测试值 。注意为 False
        _CW("进入G"&@TAB&"值是: "&$vvv)
        Return $vvv
EndFunc   ;==>G


Func _CW($str)
        ConsoleWrite(@CRLF)
        ConsoleWrite($str)
EndFunc   ;==>_CW

huangh 发表于 2021-3-13 20:29:27

谢谢两位老师耐心解答,可能我还是没太表达清楚。ABCD...这些都是独立功能的模块(有的有函数参数和返回值),相互间不明确嵌套执行哪个模块,比如A模块中是不能增加执行B模块的代码的,因此实际是单独要有个负责流程的模块作为顶层执行的,这个模块负责按流程的逻辑顺序控制ABCD等个模块的先后执行。

huangh 发表于 2021-3-13 20:48:13

afan 发表于 2021-3-13 20:34
这样不就没嵌套,全都独立了

就是这个意思,谢谢!
页: [1]
查看完整版本: 请教如何完成以下流程的逻辑设计?