comment fonction ça
Code:
1
2
3
4
5
6
7
8 /* Effacer les zéros et comprimer : */ /* Copier tous les éléments de I vers J et */ /* augmenter J pour les éléments non nuls. */ for (I=0, J=0 ; I<N ; I++) { T[J] = T[I]; if (T[I]) J++; }
Version imprimable
comment fonction ça
Code:
1
2
3
4
5
6
7
8 /* Effacer les zéros et comprimer : */ /* Copier tous les éléments de I vers J et */ /* augmenter J pour les éléments non nuls. */ for (I=0, J=0 ; I<N ; I++) { T[J] = T[I]; if (T[I]) J++; }
Bonjour,
En appliquant les règles du langage C, ce code équivaut à :
Si tu essaies d'exécuter ce code dans ta tête avec un tableau T dont les éléments successifs sont, par exemple, 7, 5, 0, 9, 0, 0, 3, 0, 0, tu devrais réussir à visualiser ce que fait ce code.Code:
1
2
3
4
5
6
7
8
9
10
11 I = 0; J = 0; while(I < N) { T[J] = T[I]; if(T[I] != 0) { J = J + 1; } I = I + 1; }
Bonne chance.
sur cet exemle de 14 éléments (on les compte de Zéro à 13)Code:
1
2
3
4
5
6
7
8
9 var T = [0,1,2,3,0,4,5,0,6,7,0,0,8,9]; // 14 éléments for (var I=0, J=0 ; I<T.length ; I++) { T[J] = T[I]; if (T[I]) J++; } console.log(T); // T = [1,2,3,4,5,6,7,8,9,7,0,0,8,9];
I progresse de 0 à 13, tandis que J ne peut progresser que de 0 à 8.
autrement dit, quand J arrive à 8, I à entièrement parcouru T.
Les éléments de 9 à 13 restent inchangés puisque J ne peut les prendre en compte.
NB: la valeur zéro correspond à un false
Oui et non :mrgreen: C'est l'exemple de l'algo
- où les noms des variables c'est de la m^rde.
- ultra-classique en C (qui peut être "in-place" (<- lien wiki anglais)), du double parcours - le parcours du tableau d'entrée (avec la variable i) pour déplacer/ copier (*) les éléments d'après une condition (ici élément différent de 0) dans le tableau "final" (et donc la variable j pour mémoriser la case "libre" actuelle - parcours du tableau "final" pour le remplir progressivement)
Édit : C'est la remarque de psychadelic :mrgreen:. Avec un algo "in-place", le tableau d'entrée est détruit. Dans ce cas on déplace. Mais sinon, on va copier la valeur dans le tableau résultat.