编程珠玑第四章

  今天又开眼界了,原来程序也可以证明正确性啊!编写代码,可以靠编程技巧,也就是
之前的问题定义,算法和数据结构,但是今天,作者告诉我们还可以用数学知识来证明程
序的正确性。这让我想起了dijkstra说的,程序员跟手术师最大的区别是:手术师如果
手术失败了,没有人会怪罪他,因为人体构造太负责。但是程序员就不同了,程序是你写
的,你如果不能完全控制程序的正确,没有人会听你的借口。所以说:一定要认真学好程 序的正确性构造,这方面作者推荐了《sciece of programming,还有《编程的修炼》 这两本书在之后,就把它们看完。  本章作者主要证明了二分搜索程序的正确性。构造程序的正确性上来先要找到断言,也 就是所谓的循环不式,当然这个在实际程序中,只有靠经验了。找到断言,即可以勾勒 出输入、程序变量和输出之间的关系,使得程序员可以准确阐述这些关系。拿二分来说, 就是如果元素t在数组中,那么它一定在range中。在之后所有的操作都要遵循该不变式。  接下来看程序的结构。如果是顺序控制结构。则可以通过在语句之间添加断言并分别分 析程序执行的每一步 如果是选择控制结构,则要对每一个分支进行结构的正确性证明。选择每一个分支, 使用断言来证明。例如,如果进入了if i>j的分支,那么我们就可以断言i>j并且使用 这个事实来推倒出下一个断言。  最麻烦就是迭代控制结构。要证明循环的正确性,就必须为其确立3个性质。  初始化:循环初次执行的时候不变式为真。  保持:如果在某次迭代开始的时候以及循环体执行的时候,不变式为真,那么循环执行 完毕的时候不变式仍然为真。每次迭代都保持该不变为真。  终止:循环能够终止,并且可以得到预期的结果,而且我们必须用其他方法证明循环 一定能终止。就像二分每次范围都在减少,课后习题,豆子每次都在减少一个。  对于函数的正确性证明,首先要使用两个断言来陈述目的。  前置条件:调用该函数之前成立的状态。  后置条件的正确性有函数在终止时保证。  拿二分来说,前置条件是序列有序(二分),后置条件是找没有找到元素,返回位置。  如果在前置条件满足情况下调用函数,那么函数的执行将确后置条件,这就是契约 编程。  证明程序的正确性是一门学问,如果违反断言就指明了程序的错误所在。程序状态的 断言对理解程序很有帮助。  附:代码章的时候再详细讨论,本章的思想是关于如果正确证明程序。  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值