[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 436

 

Existe um ArrayTemp[100] no qual todos os elementos são do tipo inteiro e ordenados em ordem ascendente de 1 a 100.

Preciso remover os primeiros 1-50 elementos e reduzir o tamanho da matriz para [50].

Pensei em fazê-lo copiando a segunda metade da matriz para o original temporário, redimensionando o original e depois copiando de volta, de temporário para original.

- Existe uma maneira mais simples?

Obrigado!

 
chief2000:

Existe um ArrayTemp[100] no qual todos os elementos são do tipo inteiro e ordenados em ordem ascendente de 1 a 100.

Preciso remover os primeiros 1-50 elementos e reduzir o tamanho da matriz para [50].

Pensei em fazê-lo copiando a segunda metade da matriz para o original temporário, redimensionando o original e depois copiando de volta, de temporário para original.

- Existe uma maneira mais simples?

Obrigado!



Você poderia classificar em ordem decrescente e depois simplesmente redimensionar a matriz. Acho que isso seria mais rápido. Mas quem sabe ?)
 
Figar0:

Você poderia classificar em ordem decrescente e depois apenas redimensionar a matriz. Acho que isso seria mais rápido. Mas quem sabe ?)

Obrigado!

 
Vinin:

Bons primeiros passos, Olga Alexandrovna. 330 linhas de código


Bom dia! Não sei se devo aceitar isso como um elogio ou vice-versa, mas em todo caso, obrigado pela resposta.

Não consigo encontrar a solução, infelizmente, é por isso que a considero - o principal é a qualidade e a competência, e com ela, como eu entendo, tenho uma lacuna, porque o código não está funcionando.

Muito à espera de uma resposta à minha pergunta.....

 

Boas pessoas ajudam quem pode

Aqui está o código no qual o mandado deve ser removido após o vencimento do prazo, esta é a condição

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

Por que se eu inserir esta condição no primeiro se operador, então o outro operador que está dentro dele não leva esta condição em consideração?

Ou seja, este código não funciona e apaga todas as ordens pendentes de uma só vez.

  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());
        }
        
      }
    }

E este código funciona e não elimina os pedidos de uma só vez.

  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());
        }
        
      }
    }
 

Você pode me dizer para que servem os pontos de parada? Procurei no fórum, mas não consegui encontrar nenhuma informação. Como utilizá-lo?

 
chief2000:

Existe um ArrayTemp[100] no qual todos os elementos são do tipo inteiro e ordenados em ordem ascendente de 1 a 100.

Preciso remover os primeiros 1-50 elementos e reduzir o tamanho da matriz para [50].

Pensei em fazê-lo copiando a segunda metade da matriz para o original temporário, redimensionando o original e depois copiando de volta, de temporário para original.

Você não poderia fazer nada e considerar o 50º elemento como o elemento inicial. O ArrayCopy vai levar algum tempo de qualquer maneira.
 
sss2019:

Boas pessoas ajudam quem pode

Aqui está o código no qual o mandado deve ser removido após o vencimento do prazo, esta é a condição

Por que se eu inserir esta condição no primeiro se operador, então o outro operador que está dentro dele não leva esta condição em consideração?

Ou seja, este código não funciona e apaga todas as ordens pendentes de uma só vez.

E este código funciona e não elimina os pedidos de uma só vez.

Em geral, é uma boa idéia passar pelas ordens a partir da última. No segundo caso, não tenha medo de acrescentar parênteses na condição.

 
fore-x:

Você pode me dizer para que servem os pontos de parada? Procurei no fórum, mas não encontrei nenhuma informação. Como posso utilizá-lo?

Não funciona. Fê-lo pensar que seria um depurador adequado, mas não o faz.
 
splxgf:
Você não pode fazer nada e considerar o 50º elemento como o elemento inicial. O ArrayCopy levará algum tempo em qualquer caso.

A questão é que a matriz deve periodicamente incluir mais elementos (expandir), o que afeta a velocidade de otimização/teste. Portanto, nos momentos "favoráveis", eu o devolvo ao estado inicial.

A solução da Figar0: acabou sendo mais simples do que a minha e funciona bem.

Obrigado!