Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 20

 
Renat Akhtyamov:
for(int i=1; int i<int n; int i++)                                                                  
...
giusto? Per favore.

No, volevo dire:

for( int i = 0; i < x; i++ )
{
}
for( int i = 0; i < x; i++ )
{
}
...

Sì, e il disegno che hai scritto non funziona affatto.

 
Artyom Trishkin:
Ogni variabile ha il suo ambito. Anche dentro le parentesi graffe, c'è uno scope separato per la variabile dichiarata in quello scope - dentro le parentesi graffe. Allora perché dovrei, per esempio, creare variabili di indice di loop con nomi diversi in posti diversi di un programma, se so che non si sovrappongono, ed è sufficiente, e abituale, usare un nome di variabile come "i"?

Non ho discusso con voi.

 
Renat Akhtyamov:
for(int i=1; int i<int n; int i++)                                                                  
...
giusto? Non c'è di che.
Lei stesso si rende conto di aver deliberatamente inventato un cattivo esempio che nessun programmatore sano di mente inventerebbe.
 
Alexey Kozitsyn:

No, volevo dire:

for( int i = 0; i < x; i++ )
{
}
for( int i = 0; i < x; i++ )
{
}
...


qual è il punto? Per favore condividi la tua esperienza - quale potrebbe essere il problema in questo caso, cioè se il tuo codice fosse così?

int i;
for( i = 0; i < x; i++ )
{
}
for( i = 0; i < x; i++ )
{
}
...
 
Renat Akhtyamov:

Non stavo discutendo con te.

Questo è il mio thread. E quando do un cattivo consiglio, non ottimale, ho il diritto di correggere la persona. Tu, per quanto riguarda la situazione in questione, stai dando un cattivo consiglio.
 
Artyom Trishkin:
Questo è il mio thread. E quando viene dato un cattivo consiglio sub-ottimale, ho il diritto di correggere la persona. Tu, rispetto alla situazione in questione, stai dando un cattivo consiglio.

Il tuo thread, poi leggilo attentamente e metti in relazione il post con il nickname a cui stai rispondendo.

In breve, sei nel posto sbagliato.

 
Renat Akhtyamov:

ma qual è il punto? Per favore condividi la tua esperienza - quale potrebbe essere il problema in questo caso, cioè se il tuo codice sarebbe così?

int i;
for( i = 0; i < x; i++ )
{
}
for( i = 0; i < x; i++ )
{
}
...

Quando inizializzate un contatore al di fuori di un ciclo, il suo ambito si estende oltre il ciclo, il che di solito non è necessario. Così, si fornisce un terreno fertile per possibili errori, per esempio, se più avanti nel codice si avrà una variabile j, e la si chiama accidentalmente i. O al posto dell'indice [1] si scrive [i], ecc.

Quindi, le variabili devono essere inizializzate il più vicino possibile a dove vengono utilizzate per la prima volta ed evitare un gran numero di variabili globali. Questo riduce la lista dei possibili errori.

 
Alexey Kozitsyn:

Quando inizializzate un contatore al di fuori di un ciclo, il suo ambito si estende oltre il ciclo, il che di solito non è necessario. Facendo questo si fornisce un terreno fertile per possibili errori, ad esempio se più in basso nel codice si ha una variabile j e accidentalmente la si chiama i. O al posto dell'indice [1] si scrive [i], ecc.

Quindi, le variabili devono essere inizializzate il più vicino possibile a dove vengono utilizzate per la prima volta e cercare di evitare un gran numero di variabili globali. Questo riduce la lista dei possibili errori.

Cosa c'entra questo con (....)?

Sono indignato.

Se dice i=0 e i++?

Quindi cambiare i in un altro ciclo per me?

Non funzionerà

 
Renat Akhtyamov:

Cosa c'entra questo?

Sono fuori.

Puoi essere ovunque e in qualsiasi cosa, è un tuo diritto. Mi avete chiesto di spiegare - l'ho fatto.
 
Alexey Kozitsyn:
Puoi essere ovunque e in qualsiasi cosa, è un tuo diritto. Mi avete chiesto di spiegare - l'ho fatto.

L'unica cosa da considerare qui è che dopo il blocco del ciclo i è già uguale a x, purché nel ciclo i<x

Array[i] dopo for(...){} restituirà l'errore di overrun dell'array e questo è tutto