[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 436

 

Есть ArrayTemp[100], в котором все элементы типа integer и отсортированы по возрастанию от 1 до 100.

Надо удалить первые 1-50 элементов и сократить размер массива до [50].

Думал это сделать копированием 2-й половины массива во временный, изменением размера оригинального и затем копированием назад, из временного в оригинальный.

- Есть более простой способ?

Спасибо!

 
chief2000:

Есть ArrayTemp[100], в котором все элементы типа integer и отсортированы по возрастанию от 1 до 100.

Надо удалить первые 1-50 элементов и сократить размер массива до [50].

Думал это сделать копированием 2-й половины массива во временный, изменением размера оригинального и затем копированием назад, из временного в оригинальный.

- Есть более простой способ?

Спасибо!



Можно отсортировать по убыванию и затем просто изменить размер массива. Думаю это будет быстрее. Хотя кто его знает ?)
 
Figar0:

Можно отсортировать по убыванию и затем просто изменить размер массива. Думаю это будет быстрее. Хотя кто его знает ?)

Спасибо!

 
Vinin:

Хороши у Вас, Ольга Александровна первые шаги. 330 строк кода


Доброго дня! Не знаю как это расценивать - как похвалу или наоборот, но в любом случаи - спасибо за ответ.

Решение так и не могу найти, к сожалению, поэтому расцениваю так - главное качество и граммотность, а с этим, пока, как понимаю у меня - пробел, потому что код не пошёл.

Очень жду ответа на свой вопрос.....

 

Люди добрые помогите кто чем может

Вот есть код в котором по условию ордера должны удаляться по истечению времени, вот это условие

MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber

Так вот собственно, почему если вставить это условие в первый оператор if, то другой оператор который лежит внутри него не учитывает это условие?

То есть вот такой код не работает и удаляет все отложенные ордера сразу.

  for(int counter=0;counter<OrdersTotal();counter++)
    {
    if(OrderSelect(counter,SELECT_BY_POS,MODE_TRADES) == false) break;

    if(MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber) //Если текущее время больше чем время истечения
      {
        
        
      if(OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
        {
        OrderDelete(OrderTicket());
        }
        
      }
    }

А вот такой код работает, и не удаляет ордера сразу.

  for(int counter=0;counter<OrdersTotal();counter++)
    {
    if(OrderSelect(counter,SELECT_BY_POS,MODE_TRADES) == false) break;

    if(MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber) //Если текущее время больше чем время истечения
      {
        
        
      if(OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP && MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber)
        {
        OrderDelete(OrderTicket());
        }
        
      }
    }
 

Подскажите, для чего нужен брейкпойнт? Искал на форуме, но не нашел информации. Как им пользоваться?

 
chief2000:

Есть ArrayTemp[100], в котором все элементы типа integer и отсортированы по возрастанию от 1 до 100.

Надо удалить первые 1-50 элементов и сократить размер массива до [50].

Думал это сделать копированием 2-й половины массива во временный, изменением размера оригинального и затем копированием назад, из временного в оригинальный.

Можно ничего не делать, а 50-й элемент считать начальным. ArrayCopy в любом случае будет занимать некоторое время.
 
sss2019:

Люди добрые помогите кто чем может

Вот есть код в котором по условию ордера должны удаляться по истечению времени, вот это условие

Так вот собственно, почему если вставить это условие в первый оператор if, то другой оператор который лежит внутри него не учитывает это условие?

То есть вот такой код не работает и удаляет все отложенные ордера сразу.

А вот такой код работает, и не удаляет ордера сразу.

Вообще хорошая примета перебирать ордера начиная с последнего. Во втором случае не бойтесь добавлять круглые скобки в условие.

 
fore-x:

Подскажите, для чего нужен брейкпойнт? Искал на форуме, но не нашел информации. Как им пользоваться?

Не работает это. Сделали, думая, что будет нормальный отладчик, но не сделали.
 
splxgf:
Можно ничего не делать, а 50-й элемент считать начальным. ArrayCopy в любом случае будет занимать некоторое время.

Дело в том что в процессе работы массив периодически должен включать бОльшее количество элементов (расширяется), что влияет на скорость оптимизации/тестирования. Поэтому в "благоприятные" моменты я его возвращаю к исходному состоянию.

Решение Figar0: оказалось проще моего и нормально работает.

Спасибо!

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