gpt4 book ai didi

计算陈述的真值

转载 作者:行者123 更新时间:2023-11-30 16:18:33 25 4
gpt4 key购买 nike

我已经努力解决这个问题好几天了:

我必须编写一个递归代码来计算语句的真值(我也可以在函数中使用循环);

  • 连接符:“&”(和)和“|” (或)
  • 值:1 和 0
  • 该函数必须返回“1”或“0”

例如 -

  • 对于语句 1,函数必须返回 1

  • 对于语句 0,函数必须返回 0

  • 对于语句 (1&1),函数必须返回 1

  • 对于语句 (0|1),函数必须返回 1

所以基本上 0 & 0\1 = 0 , 1 | 1\0 = 1

对于更复杂的语句

  • (1&(1|0)) ; (1|0) 是 1,所以 (1&1) 是 1

  • ((1|0)&(0&1)) ; (1|0) = 1, (0&1) = 0 --> (1&0)=0

(语句被定义为字符串)

int st_value (char statement[], int length, int i) /* this can be changed*/
{
if (length == 1)
return statement[0];
if (statement[i]=='(' && statement[length-1]==')')
return st_val(statement, length--, i++);
else if (statement[i]=='(')
return st_val(statement, length, i++);
if (statement[i]=='0' || statement[i]=='1')
{
if (a[i+1] == '|')
return st_val(statement, length, i+2);
.....
}
if (statement[i]=='&')
.....
}

如果我必须遵循这一点,代码就会太长并且会有很多漏洞,比如当代码的某些部分返回 0 时...

最佳答案

The problem is, pointers, structs and tress are not allowed in writing the function.

考虑到您的上述限制。

下面的代码通过将每个 (exp) 视为单独的表达式并最终组合结果来求解表达式。

int parse(char str[])
{

int i = 0;
int value = 0;

for (i = 0; str[i]; i++)
{
if (str[i] == '&')
{
i++;
if (str[i] == '('){
value = value && parse(&str[i+1]);
int brackCount = 1;
while(brackCount)
{
if (str[i] == '(') brackCount++;
else if (str[i] == ')') brackCount--;
i++;
}
i--;
}
else {
value = value && (str[i]-'0');
}
}
else if (str[i] == '|')
{
i++;
if (str[i] == '('){
value = value || parse(&str[i+1]);
int brackCount = 1;
while(brackCount)
{
if (str[i] == '(') brackCount++;
else if (str[i] == ')') brackCount--;
i++;
}
i--;
}
else {
value = value || (str[i]-'0');
}
}
else if (str[i] == '(') {
i++;
value = parse(&str[i]);

int brackCount = 1;
while(brackCount)
{
if (str[i] == '(') brackCount++;
else if (str[i] == ')') brackCount--;

i++;
}
i--;
}
else if (str[i] == ')')
{
return value;
}
else value = str[i]-'0';
}

return value;
}

Note: I have used naive approach try to refactor it.

关于计算陈述的真值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55863457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com