Questo ciclo for di per sé non ha nulla direttamente a che fare con gli array o altro. Quello che fa è semplicemente far andare il valore di una variabile ( i ) da un valore x ad un valore y a passi di 1, ciclo per ciclo.
Se pos vale 5, i valori che i assume ad ogni ciclo sono 0, 1, 2, 3 e 4. Cosa rappresentano questi valori? Nulla in particolare, non per il for perlomeno. Potrebbero rappresentare delle coordinate X sul piano cartesiano, potrebbero essere dei fattori di moltiplicazione per altro, potrebbero essere il conteggio delle patate che hai in casa.
Cosa rappresentano lo devi sapere tu e chiaramente userai i in modo opportuno per quello che appunto sai di dover fare.
Se poi questa variabile i la usi come indice in un array a[i] allora vuol dire "il valore contenuto all'indice i". Stop tutto qui.
No, non è così che va pensato, infatti.
Qui ci sono 2 problematiche, una anche a livello di logica, di "ragionamento".
Innanzitutto non devi confrontare pos. Questo è solo un indice. Devi confrontare a[pos] (un valore ben preciso nell'array che è quello richiesto dalla posizione pos) con TUTTI gli altri valori precedenti, a[0], a[1] ecc.... fino a a[pos-1]. Il indice i va appunto da 0 fino a pos-1.
Quindi un elemento da confrontare è a[i] (i 0...pos-1) e l'altro è a[pos]
Ora c'è la questione più di "ragionamento". Immagina che pos sia 4 (quindi gli indici da verificare sono 0, 1, 2, 3). Se all'indice 0 NON trovi lo stesso valore che c'è in a[pos], cosa puoi dire subito? Assolutamente nulla. Non è uguale a quello all'indice 0 ma potrebbe trovarsi all'indice 1, 2, o 3.
Il succo è semplice: se trovi lo stesso valore, allora puoi SUBITO dire che a[pos] NON è la prima occorrenza (false). Se non lo trovi non puoi dedurre nulla subito, devi andare avanti e cercare ad altri indici.
Se hai esaurito il for cosa puoi dedurre? Che il valore a[pos] NON si trova agli indici precedenti ... e quindi il valore in a[pos] è la "prima occorrenza".


Rispondi quotando