Um resultado realmente incrível!!!

 

Código:

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.
}

Agora uma pergunta para você fazer: quem está me cometendo um erro ou a MQL4???

Obrigado:)

 

Verdadeiramente delicioso!


Parece que você poderia ganhar um dinheirinho rápido com isso!

 

com o que você não está satisfeito?
sim=1, não=0,

a<=f não cumpre

==resposta certa

 
Korey >> :

com o que você não está satisfeito?
sim=1, não=0,

a<=f não é cumpridoc

== resposta certa

Mas faz (a>=s || a<=f) && s>f

 
WWer писал(а) >>

Mas (a>=s || a<=f) && s>f

Então os parênteses devem ser

 
Vinin >> :

Você deveria ter colocado parênteses

Por quê? || tem uma prioridade mais alta que &&

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

Em geral, é preciso separá-los explicitamente com parênteses. Eu já caí uma vez nessa.

WWer >>:

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

então especifique no código, para que o roteiro possa entendê-lo =)


 
Korey писал(а) >>

com o que você não está satisfeito?
>> sim=1, não=0,

a<=f não cumpre

==f está correto

A resposta ou é correta, ou é apenas uma regra muito estranha na MQL4, ou as operações lógicas são realizadas de acordo com uma regra muito estranha. Não se parece com C/C++ ou qualquer outra coisa. Eu até o traduzi para o 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));
Resultado: verdadeiro falso verdadeiro verdadeiro verdadeiro verdadeiro
 
WWer писал(а) >>

Por quê? || tem uma prioridade mais alta que &&

Por outro lado, && tem uma prioridade mais alta do que |||.

 
nen >> :

Por outro lado, && tem uma prioridade maior do que |||

EM MQL4 ? Possivelmente, mas deveria ser.

 

De jeito nenhum! O "ou"(|||) tem precedência aqui - sem ambigüidade!

Se não houver parênteses, || é executado primeiro, então &&

Portanto, os parênteses devem ser colocados nos lugares apropriados.