量子编程法(004):量子系统的设计

本文深入探讨量子编程法处理程序执行顺序、分支与循环的机制。通过实例讲解量子编程如何运用授权型与切换型条件实现分支,以及如何通过条件判断解决循环问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本节目录

        程序执行的顺序和分支

        程序分支举例

        循环的处理和举例

 

程序执行的顺序和分支

我们知道,在传统的由语句或模块组成的程序中,程序执行的序列有三种:顺序、分支和循环。量子编程法对这三种程序执行序列都能够进行处理。

量子的驱动链就相当于传统的顺序执行。这很好理解,这就相当于将顺序执行的语句或模块转换成量子,再按执行顺序组成驱动链就可以了。

例如,有一个程序B,其中包含有三个模块M1、M2和M3,三个模块按顺序执行,按传统编程方法,则编写下列语句:

程序B
    M1
    M2
    M3

如果采用量子编程法,则可以编写出下面的量子编程表:

或下面的量子编程表(因为对于一个量子有多个继量子的情况,是按照继量子在表格中的排列顺序处理的):

 

那么,如果遇到程序的分支,量子编程法如何处理呢?程序的分支就是语句或模块需要满足某些条件才能执行,即传统上使用If……Then……Else这样的条件语句进行编程。

在量子编程法中,是利用量子的确认进行分支处理。

例如,有一个程序B,其中包含有三个模块M1、M2和M3,三个模块按顺序执行,其中M2的执行需满足条件T,按传统编程方法,则编写下列语句:

程序B
    M1
    If T Then M2
    M3

那么在量子编程法中,相应的量子编程表如下:

与顺序执行相比,增加了表示条件的量子T,而需满足条件的M2只需在其源量子处输入T就行了。这种条件可称为“授权型条件”,量子T也可称为“授权量子”(即T对M2授权)。

 

如果传统编程方式是如下条件语句:

程序B
    M1
    If T 
        Then M2a
        Else M2b
    M3

则相应的量子编程表如下:

其中Ta和Tb的确认代码返回值是相反的。这是比较简单直接的设计想法,即将原来的条件量子T变成两个量子Ta和Tb,Ta和原来的T一样,Tb的确认值则是Ta确认值的取反。这样将其转换成源代码的VBA处理程序完全不变就能处理。

但我们也可以更精巧一点,还是用一个条件量子T,在需要对其取反的时候在其前面加一个符号“~”,如下所示:

这样可以直观的看到M2a和M2b不可能同时执行,避免了出错风险。但这样就需要VBA处理程序增加额外的工作,要隐含的产生一个与T的确认值相反的量子,并作为M2b的源量子。这个隐含的量子可称为T的“反量子”

这种类型条件可称为“切换型条件”,量子T也可称为“切换量子”(即根据T,驱动链接下来将在M2a和M2b之间切换)。

 

程序分支举例

对于授权型的条件,用量子处理是很简单的。凡是确认源量子大部分都是授权型量子。这在第002节的举例中已经出现,不再赘述。

下面举一个切换型条件的例子:

计算一个数的平方根,根据这个数的符号不同,显示不同的文字结果。例如,计算数值“4”的平方根,则显示“实数 2”字样,计算数值“-4”的平方根,则显示“虚数 2i”字样。如下图所示:

 

量子编程法对于分支问题编程的一般思路是:首先从起始点开始沿着驱动链列出所有可能经过的量子,然后再考虑各个量子的确认问题。这样可以将思路首先聚焦到主要问题,避免被 If……Then 之类的结构干扰。这也是量子编程法的优点之一:程序流程清晰。

此示例的量子编程表如下所示(VBA代码):

表中黄颜色标记的是一对正反量子bNum1LE0和~bNum1LE0,分别为ShowSqrtR和ShowSqrtI的源量子。另外量子lblLabel所代表的控件为显示strSqrtR和strSqrtI所共用,这没有问题,因为strSqrtR和strSqrtI不会同时显示。

 

循环的处理和举例

程序的循环实际上是一种特殊的分支,即满足某一条件时重复执行一段语句或模块。虽然循环有多种类型,但都可用条件加转移语句来实现。

例如:要计算累加和S = 1+2+3+……+N,用循环语句实现如下:

N = 100	‘初始化循环:计算上限
I = 1	‘初始化循环:循环控制变量
S = 0	‘初始化循环:计算结果
Do		‘循环体
    S = S + I 
    I = I + 1	‘调节循环控制变量
While I <= N	‘循环条件

如果用条件加转移语句实现如下:

N = 100	‘初始化循环:计算上限
I = 1	‘初始化循环:循环控制变量
S = 0	‘初始化循环:计算结果
L:  S = S + I	‘循环体
    I = I + 1	‘调节循环控制变量
If I <= N Then Goto L	‘循环条件

因此,量子编程法就可以用处理条件分支的方法来解决循环的问题。

用量子编程法计算累加和的界面如下:

量子编程表如下(VBA代码):

表中用黄颜色标记了与循环有关的量子。循环是由量子N驱动 I 开始的,I 执行了循环的初始化之后驱动循环体Loop,执行循环体实际上是执行一条或多条驱动链,驱动链的起始点就是Loop,所有驱动链的结尾都是LoopAdjust和Loop,以便重复执行循环体,而Loop的源量子是循环条件LoopCondition,以判断是否继续执行循环体。

量子Loop的动作代码转换后是这样的:

Public Sub QLoop()

    If Valid_Loop(1) Then '确认源量子有效

        '本量子动作代码
        '/本量子动作代码

        If Valid_Loop(2) Then '确认量子本身有效
            QS
            QLoopAdjust
            QLoop
        End If

    End If

End Sub

从上面的代码可以看出,如果驱动是直接调用量子的动作过程,则循环体的动作过程是一个递归的过程。如果循环次数过多,可能会造成堆栈溢出。

解决的办法有两个,一个是改为消息驱动,另一个就是避免采用量子编程法对循环进行处理,而是将整个循环设计成一个量子,将循环代码封装到量子的动作代码内执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值