Воистину поразительный результат!!!

 

Код:

void DebugInfo()
{
   int a=23;
   int s=20;
   int f=1;
   // Исходное условие
   bool r1 = a>=s && a<=f && s<=f || (a>=s || a<=f) && s>f;
   // Дальше пошли извращения
   bool r2 = a>=s && a<=f && s<=f;
   bool r3 = (a>=s || a<=f) && s>f;
   bool r4 = r2 || r3;
   // Вывод
   Print (r1+" "+r2+" "+r3+" "+r4);
   // Результат: 0 0 1 1. А должно быть: 1 0 1 1.
}

А теперь вопрос на засыпку: кого глючит меня или MQL4???

Спасибо:)

 

Воистину восхитительный!


Кажется, на этом можно побыстрому срубить!

 

чем не дoвольны?
да=1, нет=0,

a<=f не выполняетc

==ответ правильный

 
Korey >>:

чем не дoвольны?
да=1, нет=0,

a<=f не выполняетc

==ответ правильный

Но зато выполняется (a>=s || a<=f) && s>f

 
WWer писал(а) >>

Но зато выполняется (a>=s || a<=f) && s>f

Тогда скобки надо было поставить

 
Vinin >>:

Тогда скобки надо было поставить

Зачем? У  ||  большый приоритет чем у  &&

 
(a>=s || a<=f)                 -   1  ||  0 = 1
(a>=s || a<=f) && s > f - 1 && 1 = 1

А вообще нужно явно скобками отделять. Я уже как-то на это попался

WWer >>:

Зачем? У || большый приоритет чем у &&

так укажите это в коде, чтобы скритпу было понятно =)


 
Korey писал(а) >>

чем не дoвольны?
да=1, нет=0,

a<=f не выполняетc

==ответ правильный

Ответ правильный или если меня очень сильно проглючило или в MQL4 логические операции проводятся по очень странным правилам. Не похожим ни на С/С++ ни на что вообще. Я даже перевел на JavaScript:

var a=23;
var s=20;
var f=1;
// Исходное условие
var r1 = a>=s && a<=f && s<=f || (a>=s || a<=f) && s>f;
// Дальше пошли извращения
var r2 = a>=s && a<=f && s<=f;
var r3 = (a>=s || a<=f) && s>f;
var r4 = r2 || r3;
// Вывод
WScript.Echo(String(r1)+" "+String(r2)+" "+String(r3)+" "+String(r4));
Результат: true false true true
 
WWer писал(а) >>

Зачем? У || большый приоритет чем у &&

наоборот, у && больший приоритет, чем у ||

 
nen >>:

наоборот, у && больший приоритет, чем у ||

В MQL4 ? Возможно, но должно быть так.

 

Вовсе нет ! Приоритет  здесь у "или"(||), - однозначно !

Если скобок нет, то сначала будет выполнено ||, а потом уж && 

Поэтому скобки нужно обяз. ставить в соотв. местах

Причина обращения: