Помогите с массивом! - страница 3

 
STARIJ:

Вы глубокий аналитик. Желаю больших достижений

спасибо.

с уважением.
 
STARIJ:

Спасибо за солидарность и развернутое пояснение. Потом проверил исправил выбросил (int). Компьютер выполняет все действия поочередно. И после каждого сложения результат запоминается. В зависимости от оптимизации транслятором запоминать может в регистре (что быстрее), а может в оперативной памяти. В варианте с циклом также могут использоваться регистровые переменные

Стало Alert(100*(1+100)/2);?

А что, здесь действительно есть какие-то действия при исполнении и есть что запоминать в регистре либо в памяти? Компилятор разве не подсчитает выражение 100*(1+100)/2 до запуска программы на исполнение, и вычисление выражение будет заново проводиться во время исполнения, и потребует очереди действий? Я думал, результат вычисления 100*(1+100)/2 будет внесен сразу в код программы как константа. Кто - нибудь в курсе, как эти вопросы решает компилятор MQL?

 
Vladimir:

Стало Alert(100*(1+100)/2);?

А что, здесь действительно есть какие-то действия при исполнении и есть что запоминать в регистре либо в памяти? Компилятор разве не подсчитает выражение 100*(1+100)/2 до запуска программы на исполнение, и вычисление выражение будет заново проводиться во время исполнения, и потребует очереди действий? Я думал, результат вычисления 100*(1+100)/2 будет внесен сразу в код программы как константа. Кто - нибудь в курсе, как эти вопросы решает компилятор MQL?

Вы совершенно правы в том, что транслятор может вычислить константное выражение. Похоже, что транслятор MQL-4 умеет это. Проверил - транслятор скушал глобальную переменную, инициализированную константным выражением
//+-------------------------------------------------------+
//| Проверка                                     PROBA.mq4|
//+-------------------------------------------------------+
#property strict
int СуммаПрогрессии = 100*(1+100)/2;

void OnStart()
{
  Alert("Сумма=",1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+
        21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+
        41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+
        61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+
        81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100);

  int s=0;
  for(int i=1; i<=100; i++)
  {
    s=s+i;
  }
  Alert("s=",s);

  int t=0; for(int k=1; k<101; k++) t+=k; Alert("t=",t);
  int y,n; for(y=0, n=1; n<101; y+=n, ++n); Alert("y=",y);
  Alert("Сумма прогрессии = ",СуммаПрогрессии);
  Alert("Переставили = ",(1+100)/2*100);
}

0 error(s), 0 warning(s), compile time: 105 msec

 
STARIJ:
Вы совершенно правы в том, что транслятор может вычислить константное выражение. Похоже, что транслятор MQL-4 умеет это. Проверил - транслятор скушал глобальную переменную, инициализированную константным выражением

0 error(s), 0 warning(s), compile time: 105 msec


Так вроде об этом давно было известно.

И разработчики в свое время об этом писали.

Ссылку вряд ли найду. 10 лет уж как прошло

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