[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 424

 
перенесено
Ilya12345:

Всем привет! Несколько дней бьюсь над кодом, но безуспешно! Не работает условие. Переменной Z всегда присваивается последнее значение, в данном случае приравнивается к Z=1. Что нужно подправить чтобы условия соблюдались? Кто поможет?

X = MathFloor(PriceTarget);
Y = (PriceTarget - X);
{
if (0 < Y <= 0.03125)
{Z = 0.03125;}

if (0.03126 < Y <= 0.0625)
{Z = 0.0625;}

if (0.0625 < Y <= 0.09375)
{Z = 0.09375;}

if (0.09375 < Y <= 0.125)
{Z = 0.125;}

if (0.125 < Y <= 0.15625)
{Z = 0.15625;}

if (0.15625 < Y <= 0.1875)
{Z = 0.1875;}

if (0.1875 < Y <= 0.21875)
{Z = 0.21875;}

if (0.21875 < Y <= 0.25)
{Z = 0.25;}

if (0.25 < Y <= 0.28125)
{Z = 0.28125;}

if (0.28125 < Y <= 0.3125)
{Z = 0.3125;}

if (0.3125 < Y <= 0.34375)
{Z = 0.34375;}

if (0.34375 < Y <= 0.375)
{Z = 0.375;}

if (0.375 < Y <= 0.40625)
{Z = 0.40625;}

if (0.40625 < Y <= 0.4375)
{Z = 0.4375;}

if (0.4375 < Y <= 0.46875)
{Z = 0.46875;}

if (0.46875 < Y <= 0.5)
{Z = 0.5;}

if (0.5 < Y <= 0.53125)
{Z = 0.53125;}

if (0.53125 < Y <= 0.5625)
{Z = 0.5625;}

if (0.5625 < Y <= 0.59375)
{Z = 0.59375;}

if (0.59375 < Y <= 0.625)
{Z = 0.625;}

if (0.625 < Y <= 0.65625)
{Z = 0.65625;}

if (0.65625 < Y <= 0.6875)
{Z = 0.6875;}

if (0.6875 < Y <= 0.71875)
{Z = 0.71875;}

if (0.71875 < Y <= 0.75)
{Z = 0.75;}

if (0.75 < Y <= 0.78125)
{Z = 0.78125;}

if (0.78125 < Y <= 0.8125)
{Z = 0.8125;}

if (0.8125 < Y <= 0.84375)
{Z = 0.84375;}

if (0.84375 < Y <= 0.875)
{Z = 0.875;}

if (0.875 < Y <= 0.90625)
{Z = 0.90625;}

if (0.90625 < Y <= 0.9375)
{Z = 0.9375;}

if (0.9375 < Y <= 0.96875)
{Z = 0.96875;}

if (0.96875 < Y <= 1)
{Z = 1;}
}
W = X + Z;




Ilya12345:

Всем привет! Несколько дней бьюсь над кодом, но безуспешно! Не работает условие. Переменной Z всегда присваивается последнее значение, в данном случае приравнивается к Z=1. Что нужно подправить чтобы условия соблюдались? Кто поможет?


попробуйте вот так

X = MathFloor(PriceTarget);
Y = (PriceTarget - X);
{
if (0 < Y <= 0.03125)
Z = 0.03125;
  else
    if (0.03126 < Y <= 0.0625)
    Z = 0.0625;
      else
        if (0.0625 < Y <= 0.09375)
        Z = 0.09375;
          else
            if (0.09375 < Y <= 0.125)
            Z = 0.125;
              else
                if (0.125 < Y <= 0.15625)
                Z = 0.15625;
                  else
                  if (0.15625 < Y <= 0.1875)
                  Z = 0.1875;
                    else
                      if (0.1875 < Y <= 0.21875)
                      Z = 0.21875;
                        else
                          if (0.21875 < Y <= 0.25)
                          Z = 0.25;
else
if (0.25 < Y <= 0.28125)
Z = 0.28125;
  else
    if (0.28125 < Y <= 0.3125)
    Z = 0.3125;
      else
        if (0.3125 < Y <= 0.34375)
        Z = 0.34375;
          else
            if (0.34375 < Y <= 0.375)
            Z = 0.375;
              else
                if (0.375 < Y <= 0.40625)
                Z = 0.40625;
                  else
                    if (0.40625 < Y <= 0.4375)
                    Z = 0.4375;
                      else
                        if (0.4375 < Y <= 0.46875)
                        Z = 0.46875;
else
if (0.46875 < Y <= 0.5)
Z = 0.5;
  else
    if (0.5 < Y <= 0.53125)
    Z = 0.53125;
      else
        if (0.53125 < Y <= 0.5625)
        Z = 0.5625;
          else
            if (0.5625 < Y <= 0.59375)
            Z = 0.59375;
              else
                if (0.59375 < Y <= 0.625)
                Z = 0.625;
                  else
                    if (0.625 < Y <= 0.65625)
                    Z = 0.65625;
                      else
                        if (0.65625 < Y <= 0.6875)
                        Z = 0.6875;
                          else
                            if (0.6875 < Y <= 0.71875)
                            Z = 0.71875;
else
if (0.71875 < Y <= 0.75)
Z = 0.75; 
  else
    if (0.75 < Y <= 0.78125)
    Z = 0.78125;
      else
        if (0.78125 < Y <= 0.8125)
        Z = 0.8125; 
          else
            if (0.8125 < Y <= 0.84375)
            Z = 0.84375;
              else
                if (0.84375 < Y <= 0.875)
                Z = 0.875;
                  else
                    if (0.875 < Y <= 0.90625)
                    Z = 0.90625;
                      else
                        if (0.90625 < Y <= 0.9375)
                        Z = 0.9375;
                          else
                            if (0.9375 < Y <= 0.96875)
                            Z = 0.96875;
                              else
                                if (0.96875 < Y <= 1)
                                Z = 1;
} 
W = X + Z;
 
sergeev:
перенесено


попробуйте вот так


работает!!!! реальное спасибо!!!т особенно за оперативность!
 
Ilya12345:

работает!!!! реальное спасибо!!!т особенно за оперативность!


Где-то так:

double mK[] ={0,0.03125,0.0625....,1};



 

   for (int i=0;i<(ArraySize(mK)-1);i++)
   
   {
    
     if (y>mK[i] && y<=mK[i+1]) 
        {z=mK[i+1];
         break;
        }
   } 
 

У меня два вопроса про глобальные переменные.

Вопрос 1: написано, что они хранятся на жестком диске. Время доступа к ним такое же долгое, как при чтении данных из файла или такое же быстрое, как при чтении обычной переменной?

Вопрос2: Написано, что глобальные переменные могут быть только типа double, а как быть если необходимо хранить данные других типов например int или string?

 
KONDOR:

1. На счет скорости не жалуюсь

2. где написано? все типы могут быть глобальными

"Не жалуюсь" является как бы не совсем математическим понятием.

А написано вот здесь:

 
Elenn:

"Не жалуюсь" является как бы не совсем математическим понятием.

А написано вот здесь:

Там написано, что глобальная переменная сохраняется на жестком диске и храниться определенное время. А во время работы программы ( терминала, индикатора, советника) все переменные находятся в оперативной памяти, т.е. значение Г.П. будет считано с диска только при первом запуске программы.
 
Temnyj:
Там написано, что глобальная переменная сохраняется на жестком диске и храниться определенное время. А во время работы программы ( терминала, индикатора, советника) все переменные находятся в оперативной памяти, т.е. значение Г.П. будет считано с диска только при первом запуске программы.

Спасибо за информацию. А что по второму вопросу?
 
Elenn:

Спасибо за информацию. А что по второму вопросу?

Второй вопрос если честно не понял.

Почитайте лучше вот здесь

 
Temnyj:

Второй вопрос если честно не понял.

Почитайте лучше вот здесь


Любые переменные при выходе из программы (перезагрузке компа и т.д.) теряются. Кроме глобальных переменных, т.к. они хранятся на жестком диске. Но они могут быть только типа double. Как быть, если необходимо хранить переменные других типов (int или string например)? Что тут непонятного?

 
Elenn:


Любые переменные при выходе из программы (перезагрузке компа и т.д.) теряются. Кроме глобальных переменных, т.к. они хранятся на жестком диске. Но они могут быть только типа double. Как быть, если необходимо хранить переменные других типов (int или string например)? Что тут непонятного?

Есть глобальные переменные уровня текущей программы, а есть глобальные переменные уровня терминала. Первые обнуляются при деинициализации вторые нет. Вы явно говорите про вторые.

Конечно например массив типа double из 100 элементов будет затруднительно запрятать в такие переменные.. Лучше для таких целей вообще их не использовать.

Чтобы хранить данные любых типов используйте файл. Там ограничений нет. И этот способ используется всеми и всегда.