Я несколько дней пытался решить эту проблему:
Я должен написать рекурсивный код, который вычисляет истинное значение оператора (я также могу использовать циклы в функции);
- Разъемы: «&» (и) и «|» (Или)
- значения: 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 ...