У меня очень простой вопрос, я очень смущен тем, как я могу это реализовать. Я хочу создать логическую переменную в одну строку, состоящую из тернарного оператора, например:
логический = а? b: (c? d: (e? f: (g? i: j);
Это работает для 1, 2 или 3 таких сложных условий для целей моих кодов, но я должен написать это так, чтобы я мог выбрать, сколько таких троичных условий я хочу поместить друг в друга, чтобы определить логическое значение переменная.
И я застрял с этим, потому что в конце похоже, что я не могу добавить последнее условие. Я пытался придумать рекурсивную функцию, возможно, с каким-то счетчиком, но мне не удалось ее написать. Я не знаю, является ли то, что я спрашиваю, проще или понятнее.
Условие не является полностью независимым друг от друга, существуют интервалы (координаты в пространстве), которые каким-то образом следуют друг за другом. Так, например, «a» в моем примере было бы что-то вроде 11, а затем продолжалось бы, когда оно ложно, с новым условием, говоря 22 и так далее. Отсюда и моя идея ввести какой-то счетчик в условия.
Но когда я прихожу к последнему ложному условию, я не знаю, что делать, потому что я не могу установить случайное z> что-то, чтобы мой код работал.
Я пытаюсь что-то вроде:
bool f(double x, double value, double z, double d, double n, double step, int &count);{
bool result;
count++;
if (count == n) {return result}
result = (x >=value+count*step && x<value+(count+1)*step) ? z>=d : f(x,value,z,d,n,step, &count);
}
Так что, конечно, помимо многих ошибок в написании рекурсивной функции, поскольку я никогда не использую их и обычно не использую C или C ++, может показаться, что при последнем вызове функции мы будем иметь что-то вроде? b: без последнего параметра, если утверждение ложно.
Я старался быть настолько ясным, насколько мог. Вы можете задавать вопросы, если не поняли. И любая помощь приветствуется, рекурсивные функции, нормальные функции или способ сделать это вообще без функции ...
С уважением и заранее спасибо за ваши ответы!
Edit:
Код с if должен выглядеть примерно так:
if (a){
b}
else{
if (c){
d}
else{
if(e){
f}
else{
if(g){
I}
else{
j}
Возможно, я забыл некоторые скобки, но я надеюсь, что это понятно. И этот момент заключается в том, чтобы продолжить, скажем, n, если подобные операторы в одной строке создать булеву переменную, а затем иметь возможность выбирать n вместо переписывания нового кода каждый раз, когда я хочу добавить оператор if.
РЕДАКТИРОВАТЬ о рекурсии:
Может кто-нибудь объяснить мне, почему такая функция создает бесконечный цикл?
bool f(double x, double l, double z, double d, double step, int &count){
int n = (int)l/step;\\number of steps
count++;
if (count < n)
return (x >=l+count*step && x<l+(count+1)*step) ? z>=d*count : f(x,l,z,d,step,count);
else
return z>=d*(count-1);
}
Я установил счетчик 'count' в -1 перед вызовом функции, и это, похоже, является проблемой. Он делает цикл правильно, но затем перезапускается снова и снова, так что я даже не могу проверить, имеет ли мой код смысл для моей цели. Я думал, что после каждого возврата, вызывающего функцию рекурсивно, это увеличивает счетчик, но как только он достигает n, он должен возвращать что-то еще и выходить из функции, а не перезапускать счетчик и делать все снова ...