[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 22

 

Gente, aiutatemi!

                      if(OPrazH<razH && OPrazH>0)              
                        {
                         f1=1;                                 
                         xDelH[countDH][0]=High[j];            
                         xDelH[countDH][1]=Time[j];
                         Print(xDelH[countDH][0]);
                         countDH++;
                         break;
                        }

Sto scrivendo questo codice (questo è un estratto), tutte le variabili e gli array sono impostati, il contatore conta. Inizialmente countDH=0. Ma c'è un problema: non viene scritto nulla nell'array xDelH. Print (High[j], Time[j], countDH) restituisce il risultato corretto ma xDelH[countDH][0] dà sempre 0. Anche il controllo tramite la dimensione dell'array restituisce 0.

Anche se si scrive xDelH[countDH][0]=0.01; dà ancora 0. Qualsiasi cosa faccia, non importa dove metto questo codice, non funziona da nessuna parte.

A cosa può essere dovuto? Qual è la ragione? Per favore, aiutatemi!

 
WindSW:

Gente, aiutatemi!

Sto scrivendo questo codice (questo è un frammento), tutte le variabili e gli array sono impostati, il contatore conta. Ma ho un problema con l'array xDelH, non vi si scrive nulla. Print (High[j], Time[j], countDH) mi dà il risultato corretto ma xDelH[countDH][0] restituisce sempre 0. Anche il controllo tramite la dimensione dell'array restituisce 0. Quale può essere la ragione? Qual è la ragione? Per favore, aiutatemi!

Anche se scrivo xDelH[countDH][0]=0.01; produce ancora 0.

Controlla se xDelH è di tipo doppio. È questo se dentro per. L'operatore di rottura è in qualche modo posizionato male. Se lo fai come qui sotto, cosa succederà?

double xDelH [1][1];
int countDH=0;

xDelH[countDH][0]=0.01; // точка а не запятая
Print(DoubleToStr(xDelH[countDH][0],2));
 
WindSW:

Gente, aiutatemi!

Sto scrivendo questo codice (questo è un estratto), tutte le variabili e gli array sono impostati, il contatore conta. Inizialmente countDH=0. Ma c'è un problema: non viene scritto nulla nell'array xDelH. Print (High[j], Time[j], countDH) restituisce risultati corretti, mentre xDelH[countDH][0] dà sempre 0. Anche il controllo tramite la dimensione dell'array restituisce 0.

Anche se si scrive xDelH[countDH][0]=0.01; dà ancora 0. Qualsiasi cosa faccia, non importa dove metto questo codice, non funziona da nessuna parte.

A cosa può essere dovuto? Qual è la ragione? Per favore, aiutatemi!

Un'altra ragione può essere la dimensione non dichiarata dell'array xDelH[][].
 
Ho il doppio xDelH[][2]; se è in due for, uno dei quali passa per j. Il codice che hai scritto funziona - dà 0,01
 
WindSW:
Ho il doppio xDelH[][2]; se è in due for, uno dei quali passa per j. Il codice che hai scritto funziona - produce 0,01

Nella vostra versione, la dimensione dell'array non è specificata nella dimensione 0, ma nell'esempio sopra lo è:

double xDelH [1][1];
 

Grazie! Funziona tutto. Selezionate la dimensione come segue: ArrayResize(xDelH,100);

Un'altra domanda: se l'array riempie tutte le 100 celle, e countDH conterà fino a 120 per esempio, la dimensione dell'array aumenterà automaticamente a 120, o dovrò regolarmente ridimensionare l'array in un altro modo?

 
WindSW:

Grazie! Funziona tutto. Selezionate le dimensioni come segue: ArrayResize(xDelH,100);

Un'altra domanda: se l'array riempie tutte le 100 celle, e countDH conterà fino a 120 per esempio, la dimensione dell'array aumenterà automaticamente a 120, o dovrò regolarmente ridimensionare l'array in un altro modo?

Niente sarà fatto automaticamente. Se necessario:

ArrayResize (xDelH, countDH + 1);
 
TarasBY:

Niente sarà fatto automaticamente. Se necessario:


Grazie!
 

In alternativa, è possibile impostare più celle in una volta, ad esempio 1000 se sai che non ce ne saranno più di 1000. Se riempite l'array dentro for, allora nello stesso for definite il numero massimo di iterazioni e prima di for potete cambiare la dimensione dell'array, per esempio..:

double xDelH[][2];

int N=120;
ArrayResize(xDelH, N);

for (int i=0; i<=N; i++)
{
// ...
}
 
paladin80:

In alternativa, è possibile impostare più celle in una volta, ad esempio 1000 se sai che non ce ne saranno più di 1000. Se riempite l'array dentro for, allora nello stesso for definite il numero massimo di iterazioni e prima di for potete ridimensionare l'array, per esempio..:


Nel mio codice, è più conveniente definire il numero di iterazioni attraverso ArrayRange.

Perché, se scrivo xDelH[countDH][0]=HBar[countH][0]; darà 0 (anche se HBar[countH][0] è già pieno e ha il suo valore). Posso fare tutto questo?

Motivazione: