Vdass 2020-03-21 16:34 采纳率: 0%
浏览 192
已结题

如何用计算机程序语言来保存b比a大,c比a大,但c不一定比b大这样的大小逻辑关系?

用什么样一种数据结构来保存这样的逻辑关系?

比如输入条件是:

b>a,c>a,

假如这样保存

if(b>a)
把每个数赋值一个具体的数

b=2,a=1;

if(c>a)

c=a+1;

即c=2;

if(b==c) //即b==2,c==2

输出b与c大小不确定.

else

b与c大小确定

输出

但这样做的问题是

如果条件是 c>b>a, e>d>a

设a=1那么

b=2,c=3

d=2,e=3

如果按照相等来判断的话

判断方法:

if(c==e)

print("c与e关系不确定")

else

print("c与e关系能确定")

但 这样的话b和e的关系也能确定,因为b!=e,

可实际上b和e的关系不能确定

如果不赋值具体的数,用集合来表示:
输入:b>a,c>a

设置a=100,

b=[101,无穷大]

c=[101,无穷大]

输入增加 d>b 即变为:d>b>a,c>a

给d赋值:

d=[b[0]+1,无穷大]即d=[102,无穷大]

这样判断d是否大于a只需判断d[0]是否大于a[0]即可,就是集合的利用包含关系来判断

如果此时输入

e>c 即变为:d>b>a,e>c>a

给e赋值:

e就应该是[c[0]+1,无穷大]
即:e= [102,无穷大]

e与d的集合一样,说明e与d不确定

如果增加了一个f>e 即:d>b>a,f>e>c>a

为f赋值就应该是: f=[c[0]+1,无穷大] 即[103,无穷大]

f=[103,无穷大] 而d=[102,无穷大] f[0]>d[0],f比d大! 实际上f与d的关系不确定!这就矛盾了

问题很明显,没有考虑这个集合上限,导致和赋值个具体数的方法没区别
如果这样改进 ,加一个集合上限给它呢?:

条件 :b>a,c>a

设 a=100,

int x=某个具体的数

b=[101,x]

c=[101,x]

这样保存

如果此时输入:

d>b 即d>b>a,c>a

如果设置 d=[x+1,x*2] 即d的每个数都比b大,

实际上这样也是有问题 的,

  某个具体的数x 怎么确定? 随便设置一个?比如10000,只要是一个确定的数,这样肯定还是有bug的

这些bug很容易想到这里就暂时不写了.

那么到底怎么用计算机语言保存这样的一种逻辑关系呢?

  • 写回答

2条回答 默认 最新

  • threenewbee 2020-03-21 16:40
    关注

    一般来说,C语言的类型都有一个上限、下限,你可以用一个特殊的值表示无穷(而不是它真实的值)。
    至于你说的逻辑,这个可以用一种脚本语言来表示,比如js
    function foo(a,b,c) {
    return b>a&&c>a;
    }
    用脚本引擎加载执行。此时C/C++是host,这种脚本语言作为script

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#c语言#的问题:求完整代码条件好说
  • ¥100 HALCON DELPHI
  • ¥15 (需要远程,AI不回)VB6二进制文件转换成功,但是C#转换总是失败
  • ¥15 关于#matlab#的问题:有没有什么其他办法能够保证不退出进程(相关搜索:matlab调用)
  • ¥15 依据报错在原代吗格式的基础上解决问题
  • ¥15 在虚拟机中安装flash code
  • ¥15 单片机stm32f10x编写光敏电阻调节3.3伏大功率灯亮度(光强越大灯越暗,白天正常光强灯不亮,使用ADC,PWM等模块)望各位找一下错误或者提供一个可实现功能的代码
  • ¥20 verilog状态机方法流水灯
  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA