Ошибки, баги, вопросы - страница 3609

 
Содржит ли HTML-код веток форума число, содержащее количество подписчиков ветки (сколько людей добавили ее в Избранное)?
 

Предложение для MQL

Добавьте возможность программно запросить версию программы

Сейчас можно получить MQL_PROGRAM_NAME Имя запущенной MQL5-программы

Будет хорошо если можно будет запросить и версию программы.

 
Vladimir Pastushak #:

Предложение для MQL

Добавьте возможность программно запросить версию программы

Сейчас можно получить MQL_PROGRAM_NAME Имя запущенной MQL5-программы

Будет хорошо если можно будет запросить и версию программы.

#define VERSION "1.01"

#property version VERSION

void OnStart() {

   Print("Version %s",VERSION);

}

 
Maxim Kuznetsov #:

#define VERSION "1.01"

#property version VERSION

void OnStart() {

   printf("Version %s",VERSION);

}

А ларчик просто открывался)))

Спасибо!

 
В С++ аналогично?
void OnStart()
{ 
  int i = 2;
  int j = 2;
  
  Print(i *= (i = 5));    // 25
  Print(j = j * (j = 5)); // 10
}
Думал, что эти записи идентичны.
 
fxsaber #:
  Print(i *= (i = 5));    и  Print(j = j * (j = 5))

Ну это выглядит логично, но на всякий случай спросил у deepseek

Print(i *= (i = 5)); и Print(j = j * (j = 5)) идентичны?


Нет, выражения Print(i *= (i = 5)); и Print(j = j * (j = 5)); не идентичны, хотя на первый взгляд могут показаться похожими. Давайте разберем их поведение.

1. Print(i *= (i = 5));

Это выражение можно разбить на следующие шаги:

(i = 5) — переменной i присваивается значение 5.

i = ... — оператор *= умножает текущее значение i на результат выражения в скобках. Поскольку i уже равно 5, это эквивалентно i = i * 5, то есть i = 5 * 5.

В итоге i станет равным 25.

Результат выражения i *= (i = 5) будет 25, и это значение передается в функцию Print.

2. Print(j = j * (j = 5));

Это выражение работает иначе:

(j = 5) — переменной j присваивается значение 5.

j * ... — значение j до выполнения (j = 5) используется в умножении. Если j до этого было неопределено или равно 0, то результат будет 0 * 5 = 0.

Результат выражения j = j * (j = 5) будет 0, и это значение передается в функцию Print.

Ключевые различия:

В первом случае (i *= (i = 5)) сначала выполняется присваивание i = 5, а затем умножение на новое значение i.

Во втором случае (j = j * (j = 5)) значение j до присваивания j = 5 используется в умножении, что может привести к другому результату.

Вывод:

Эти выражения не идентичны и могут давать разные результаты в зависимости от начального значения переменных.

 
Aleksandr Slavskii #:

Ну это выглядит логично, но на всякий случай спросил у deepseek

Print(i *= (i = 5)); и Print(j = j * (j = 5)) идентичны?


Нет, выражения Print(i *= (i = 5)); и Print(j = j * (j = 5)); не идентичны, хотя на первый взгляд могут показаться похожими. Давайте разберем их поведение.

1. Print(i *= (i = 5));

Это выражение можно разбить на следующие шаги:

(i = 5) — переменной i присваивается значение 5.

i = ... — оператор *= умножает текущее значение i на результат выражения в скобках. Поскольку i уже равно 5, это эквивалентно i = i * 5, то есть i = 5 * 5.

В итоге i станет равным 25.

Результат выражения i *= (i = 5) будет 25, и это значение передается в функцию Print.

2. Print(j = j * (j = 5));

Это выражение работает иначе:

(j = 5) — переменной j присваивается значение 5.

j * ... — значение j до выполнения (j = 5) используется в умножении. Если j до этого было неопределено или равно 0, то результат будет 0 * 5 = 0.

Результат выражения j = j * (j = 5) будет 0, и это значение передается в функцию Print.

Ключевые различия:

В первом случае (i *= (i = 5)) сначала выполняется присваивание i = 5, а затем умножение на новое значение i.

Во втором случае (j = j * (j = 5)) значение j до присваивания j = 5 используется в умножении, что может привести к другому результату.

Вывод:

Эти выражения не идентичны и могут давать разные результаты в зависимости от начального значения переменных.

Остаются вопросы к приоритетам. Умножение разве приоритетнее расчёта выражения в скобках?

 
Artyom Trishkin #:

Остаются вопросы к приоритетам. Умножение разве приоритетнее расчёта выражения в скобках?

Ну вот, всё сломали. Сначала мне было всё логично, а теперь не всё и не логично, точнее не совсем всё.

В школе нас учили сначала выполнять действия в скобках. Значит эти два выражения идентичны, в компиляторе ошибка, а ИИ врёт как обычно.

Ха, всё просто, разобрались.

 
Artyom Trishkin #:

Остаются вопросы к приоритетам. Умножение разве приоритетнее расчёта выражения в скобках?

Приоритет всегда у идентификации переменных.

Aleksandr Slavskii #:

Ну вот, всё сломали. Сначала мне было всё логично, а теперь не всё и не логично, точнее не совсем всё.

В школе нас учили сначала выполнять действия в скобках. Значит эти два выражения идентичны, в компиляторе ошибка, а ИИ врёт как обычно.

Ха, всё просто, разобрались.

Никто не врёт, а просто идиотское объяснение от искусственного идиота.

(i *= (i = 5)) читаем так: i будет равно — i умноженное на выражение в скобках, а в скобках присвоение значения… То есть, сначала идентификация переменной, а потом действия.

j = j * (j = 5)) читаем так: переменная j уже идентифицирована значением 2. Эту переменную надо умножить на значение в скобках. А в скобках этой переменной присваивается новое значение. Но предыдущее значение не меняется. Вот и все дела…

 
Alexey Viktorov #:

Приоритет всегда у идентификации переменных.

Никто не врёт, а просто идиотское объяснение от искусственного идиота.

(i *= (i = 5)) читаем так: i будет равно — i умноженное на выражение в скобках, а в скобках присвоение значения… То есть, сначала идентификация переменной, а потом действия.

j = j * (j = 5)) читаем так: переменная j уже идентифицирована значением 2. Эту переменную надо умножить на значение в скобках. А в скобках этой переменной присваивается новое значение. Но предыдущее значение не меняется. Вот и все дела…

Давай исходить из правил.

(i *= (i = 5))

Раз: i = 5;

Два: 5 *= 5 = ??? (25 же)

j = j * (j = 5))

Раз: j = 5;

Два: j = 5 * 5 = ??? (25 же)

Откуда остаётся значение 2, если в первую очередь переменным присваивается значение 5?