Errores, fallos, preguntas - página 2208

 

La famosa pregunta de la entrevista de trabajo.

¿Qué habrá en la i?

int i = 5;
i = i++ + ++i;
Salidas de MQL5 12. Salidas de MS Visual Studio 13.
 
Aleksey Rodionov:

como parece que funciona en C++. Así que pregunté y decidí leer C++, por ejemplo. El mismo valor por uno sólo en la diferencia. Parece que asigna 5 a "y" en el segundo caso y luego lo suma, mientras que en el primer ejemplo primero suma y luego asigna (me costó mucho averiguar cómo funciona =D )

En mql5 son operaciones iguales, en c++ son diferentes, abajo te acaban de dar un ejemplo de una prueba en c++ ))

 
. ... Rick D. ... .:

La famosa pregunta de la entrevista de trabajo.

¿Qué habrá en la i?

MQL5 da 12. MS Visual Studio da 13.

Indefinido por el efecto secundario. En este caso, un efecto triple en conjunto. Diferentes optimizaciones pueden calcular los valores de las variables de manera diferente. En aras de la optimización.

 
Konstantin:

En mql5 son operaciones equivalentes, en c++ son diferentes, a continuación se le dio sólo un ejemplo de una prueba en c++))

¿De dónde lo has sacado? ¿Has comparado los resultados de las operaciones array[++i]=i y array[i++]=i?

Aquí hay un rompecabezas para ti. ¿Cuál es la diferencia entre la operación postfix y la operación prefix?

 
. ... Rick D. ... .:

Una famosa pregunta en una entrevista de trabajo.

Una pregunta tonta e innecesaria que sólo revela si el entrevistado sabe lo que es el LU y tiene poco que ver con el tema de discusión.

Aleksey Rodionov:
Estoy aquí sentado pensando, ¿cómo puede ser útil el código de la forma de prefijo?

El compilador tiene suficiente cerebro para optimizar la forma postfix cuando es necesario.

 
Slava:

¿De dónde has sacado la información? ¿Has comparado los resultados de las operaciones array[++i]=i y array[i++]=i?

He aquí una pregunta desconcertante. ¿Cuál es la diferencia entre la operación postfix y la operación prefix?

qué tiene que ver array[++i]=i y array[i++]=i, cómo puedo comparar lo que no ha estado en la conversación...

Si hay algunos cambios en mql en el marco de la disputa y usted lo sabe, entonces usted como moderador está obligado a informar a los participantes del diálogo, en lugar de tratar de hacer las pruebas de conocimiento de sintaxis, definitivamente no es su deber ...

y además, muestra todas las instrucciones en la ayuda de mql sobre la diferencia en las operaciones postfix y prefix, pero las pruebas de años anteriores muestran que estas operaciones eran equivalentes en mql

ps. por cierto, acabo de comprobar el ejemplo del diálogo

int i = 5;
i = i++ + ++i;

build 1816 resultado == 12

 
TheXpert:

Esta es una pregunta tonta e innecesaria, que sólo revela si el entrevistado sabe lo que es el LU y tiene poco que ver con el tema de la discusión.

Bueno, en realidad la forma del prefijo es más rápida.

Además, creo que utilizar este tipo de construcciones en su código es simplemente inaceptable.

En primer lugar, por la ambigüedad del trabajo en diferentes implementaciones y, aún más, porque es fácil cometer un error en dicho código y no es tan fácil darle sentido.

El código debe ser transparente y comprensible de un vistazo.

 
Georgiy Merts:

Además, en mi opinión, es sencillamente inaceptable utilizar tales construcciones en el código.

En primer lugar, debido a la ambigüedad del trabajo en diferentes implementaciones, y aún más - porque es fácil cometer un error en tal código, y no es fácil de entender.

El código debe ser transparente y comprensible de un vistazo.

es hora de cambiar la ayuda de mql5 a la forma de las convenciones y reglas del lenguaje

 
Por favor, asesore sobre el cierre parcial de la posición, tipo de cuenta RETAIL_HEDGING. Por ejemplo, cierro la mitad de una posición en Expert Advisor y una nueva orden con un lote menor debería abrirse automáticamente. Entonces, ¿en qué momento se garantiza que la nueva orden esté en la terminal? ¿Entiendo correctamente que no tiene que aparecer inmediatamente después del PositionClosePartial, y que tiene que ser capturado en alguna parte del OnTrade?
 
Konstantin:

¿Qué tiene que ver array[++i]=i y array[i++]=i, cómo puedo comparar lo que no pasó en la conversación...

Si hay cambios en mql en el marco de la disputa y usted lo sabe, entonces como moderador está obligado a ponerlo en conocimiento de los participantes del diálogo, en lugar de tratar de hacer pruebas de conocimiento de sintaxis, definitivamente no es su deber...

y además, muestra todas las instrucciones en la ayuda de mql sobre la diferencia en las operaciones postfix y prefix, pero las pruebas de años anteriores muestran que estas operaciones eran equivalentes en mql

ps. por cierto, acabo de comprobar el ejemplo del diálogo

build 1816 resultado == 12

Pero sus ejemplos son puramente teóricos. Están destinadas únicamente a los estudiantes. Ningún programador en su sano juicio los pondría en producción.

Los incrementos y decrementos de los prefijos y postfijos se utilizan en primer lugar en los bucles. Y se llaman incrementos y decrementos.

He aquí algunos ejemplos

int i=0;
while(i<ArraySize(array))
   array[i++]=i;

и

int i=0;
while(i<ArraySize(array))
   array[++i]=i;

Si afirmas que las operaciones prefijas y postfijas funcionan de la misma manera, entonces bandera en las manos y tambor en el cuello.

En el caso del incremento del prefijo, obtendrá un elemento de matriz nulo no inicializado y un error de matriz fuera de rango en la última iteración.


PS. Decidí releer nuestra documentación sobre este tema en el enlace verde https://www.mql5.com/ru/docs/basis/operations/mathoperation

Nota importante

int i=5;
int k = i++ + ++i;

Puede tener problemas de cálculo al portar la expresión anterior de un entorno de programación a otro (por ejemplo, de Borland C++ a MQL5). En el caso general, el orden de los cálculos depende de la implementación del compilador. En la práctica, hay dos formas de implementar el postdecremento (postincremento):

  1. El postdecremento (postincremento) se aplica a la variable después de calcular toda la expresión;
  2. El postdecremento (postincremento) se aplica a la variable inmediatamente en el lugar de la operación.

En MQL5 actualmente implementamos el primer método de cálculo del postdecremento (postincremento). Pero incluso con este conocimiento, es mejor no experimentar con el uso de este truco.

Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
  • www.mql5.com
Операция инкремента и декремента применяются только к переменным, к константам не применяются. Префиксныe инкремент (++i) и декремент (--k) применяются к переменной непосредственно перед использованием этой переменной в выражении. Могут возникнуть вычислительные проблемы при переносе вышеуказанного выражения из одной среды программирования в...