暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SCL编程实例100例-064-分治法找假币

工控老炮儿 2023-01-02
315

1 | 题目



有一个装有16枚硬币的袋子,16枚硬币中有一枚是伪造的(只有一枚),并且那个伪造的硬币比真的硬币要轻。现有一台可用来比较两组硬币重量的仪器,编写程序使用分治法设计一个算法,找出那枚伪造的硬币。



2 | 设计分析



我们先将16枚硬币分为左右两个部分,各为8个硬币,分别称重,必然得出一半儿轻一半儿重,而我们要的就是轻的那组,把重的舍去。接下来我们继续对轻的那部分硬币进行五五分开,直至每组剩下一枚硬币,这时我们的问题自然就解决了。



3 | 创建功能或功能块



创建功能块FB,命名为“FindFakeCoin”。




4 | 定义接口变量



具体接口变量定义见下图:

定义数据类型为整型数的一维数组变量#statCoins,用来存储16枚硬币的重量,其中有一枚假币重量较轻(98克)。定义一个局部常量#TRUE_W,值为99(克)作为真币的重量。



5 | 程序代码



编写程序代码。如下图:


使用REPEAT循环,根据重量将硬币分组,每次留下轻的部分,直到剩下最后一枚硬币结束。



6 | 代码测试



在循环OB中调用FB-“FindFakeCoin”,调用时会自动创建背景数据块,命名为“InstFindFakeCoin”,该背景数据块可以用来监视和修改数据。转至在线并监控程序。如下图

找到假币的位置为数组索引编号8,重量为98克,比真币少1克。



7 | 总结



学习使用REPEAT循环语句;

学习使用FOR循环嵌套;

学习使用REPEAT循环嵌套;

学习使用IF..ELSE条件语句;

学习组合赋值运算符的使用。

- END -

工控老炮儿


分享 | 咨询 | 合作 | 共赢


文章转载自工控老炮儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论