[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 436

 

C'è un ArrayTemp[100] in cui tutti gli elementi sono di tipo intero e ordinati in ordine crescente da 1 a 100.

Ho bisogno di rimuovere i primi 1-50 elementi e ridurre la dimensione dell'array a [50].

Ho pensato di farlo copiando la seconda metà dell'array nel temporaneo, ridimensionando l'originale e poi copiando di nuovo, dal temporaneo all'originale.

- C'è un modo più semplice?

Grazie!

 
chief2000:

C'è un ArrayTemp[100] in cui tutti gli elementi sono di tipo intero e ordinati in ordine crescente da 1 a 100.

Ho bisogno di rimuovere i primi 1-50 elementi e ridurre la dimensione dell'array a [50].

Ho pensato di farlo copiando la seconda metà dell'array nel temporaneo, ridimensionando l'originale e poi copiando di nuovo, dal temporaneo all'originale.

- C'è un modo più semplice?

Grazie!



Potreste ordinare in ordine decrescente e poi semplicemente ridimensionare l'array. Penso che sarebbe più veloce. Chi lo sa però?)
 
Figar0:

Potreste ordinare in ordine decrescente e poi semplicemente ridimensionare l'array. Penso che sarebbe più veloce. Chi lo sa però?)

Grazie!

 
Vinin:

Buoni i primi passi, Olga Alexandrovna. 330 linee di codice


Buona giornata! Non so come giudicarlo - come una lode o viceversa, ma in ogni caso, grazie per la risposta.

Non riesco a trovare la soluzione, purtroppo, per questo la considero così - la cosa principale è la qualità e la competenza, e con essa, come ho capito, ho una lacuna, perché il codice non funziona.

In attesa di una risposta alla mia domanda .....

 

Le brave persone aiutano chi può

Ecco il codice in cui il mandato dovrebbe essere rimosso dopo la scadenza del tempo, questa è la condizione

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

Perché se inserisco questa condizione nel primo operatore if, l'altro operatore che si trova al suo interno non tiene conto di questa condizione?

Cioè, questo codice non funziona e cancella tutti gli ordini pendenti in una volta sola.

  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 questo codice funziona e non cancella gli ordini in una volta sola.

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

Puoi dirmi a cosa servono i breakpoint? Ho cercato nel forum ma non riesco a trovare nessuna informazione. Come usarlo?

 
chief2000:

C'è un ArrayTemp[100] in cui tutti gli elementi sono di tipo intero e ordinati in ordine crescente da 1 a 100.

Ho bisogno di rimuovere i primi 1-50 elementi e ridurre la dimensione dell'array a [50].

Ho pensato di farlo copiando la seconda metà dell'array nel temporaneo, ridimensionando l'originale e poi copiando di nuovo, dal temporaneo all'originale.

Si potrebbe non fare nulla e considerare il 50° elemento come elemento di partenza. ArrayCopy richiederà comunque del tempo.
 
sss2019:

Le brave persone aiutano chi può

Ecco il codice in cui il mandato dovrebbe essere rimosso dopo la scadenza del tempo, questa è la condizione

Perché se inserisco questa condizione nel primo operatore if, l'altro operatore che si trova al suo interno non tiene conto di questa condizione?

Cioè, questo codice non funziona e cancella tutti gli ordini pendenti in una volta sola.

E questo codice funziona e non cancella gli ordini in una volta sola.

È generalmente una buona idea passare attraverso gli ordini partendo dall'ultimo. Nel secondo caso, non abbiate paura di aggiungere delle parentesi nella condizione.

 
fore-x:

Puoi dirmi a cosa servono i breakpoint? Ho cercato nel forum ma non riesco a trovare nessuna informazione. Come si usa?

Non funziona. L'ho fatto pensando che sarebbe stato un debugger adeguato, ma non è così.
 
splxgf:
Potete non fare nulla e considerare il 50° elemento come quello iniziale. ArrayCopy richiederà un po' di tempo in ogni caso.

Il punto è che l'array deve periodicamente includere più elementi (espandersi), il che influisce sulla velocità di ottimizzazione/testing. Quindi, in momenti "favorevoli" lo riporto allo stato iniziale.

La soluzione di Figar0: si è rivelata più semplice della mia e funziona bene.

Grazie!