Professional Documents
Culture Documents
Problme rsoudre
Soit un tableau T:
int T[NB];
crire le code qui dcale les lments de T, tel que:
l'lment l'indice i se retrouve l'indice i-1,
le premier lment du tableau se retrouve la dernire place.
Par exemple:
Si le tableau contenait les valeurs: 0 1 2 3 4 (avec NB = 5),
il contiendra 1 2 3 4 0 aprs le dcalage.
1. Faire un schma;
2. Dcomposer le problme en problmes plus simples;
3. Rflchir sur un exemple, sans penser aux boucles ou
aux conditions;
4. Gnraliser, en crivant cette fois les boucles et les
conditions;
5. Vrifier le programme sur un exemple.
Schma
T:
Soit un tableau T:
int T[NB];
crire le code qui dcale les lments de T, tel que:
l'lment l'indice i se retrouve l'indice i-1,
le premier lment du tableau se retrouve la dernire place.
Par exemple, si le tableau contenait les valeurs: 1 2 3 4 5 (avec NB = 5), il contiendra
2 3 4 5 1 aprs ce dcalage.
Dcomposer le problme
T:
1
2
Il faut:
1. dcaler les lments 0, 1, ... vers la gauche;
2. grer correctement l'lment d'indice 0.
=
=
=
=
T[1];
T[2];
T[3];
T[4];
Remplaons:
T[0] = T[1];
T[1] = T[2];
...
T[NB-2] = T[NB-1];
2
Une premire solution est de faire (pour un tableau 5 lments):
T[4] = T[0];
ce qui se gnralise pour un tableau NB lments en:
T[NB-1] = T[0];
Premire solution
T:
T[NB-1] = T[0];
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
NB
5
T[NB-1] = T[0];
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
NB
5
T[NB-1] = T[0];
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
NB
5
T[NB-1] = T[0];
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
NB
5
T[NB-1] = T[0];
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
NB
5
T[NB-1] = T[0];
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
NB
5
T[NB-1] = T[0];
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
NB
5
T[NB-1] = T[0];
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
NB
5
T[NB-1] = T[0];
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
!
T:
L'instruction:
T[NB-1] = T[0];
a effac le 4 avant que la boucle puisse le copier l'indice 3.
Comment corriger le code ?
T[NB-1] = T[0];
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
Solution
T:
1.
2.
temp
3.
Il faut:
1. sauvegarder la valeur de T[0] dans une variable intermdiaire;
2. on peut maintenant dcaler les lments avec la boucle for;
3. recopier la valeur sauvegarde de T[0] dans T[NB-1].
Solution
T:
1.
2.
temp
3.
Il faut:
1. sauvegarder la valeur de T[0] dans une variable intermdiaire:
int temp(T[0]);
2. on peut maintenant dcaler les lments avec la boucle for:
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
3. recopier la valeur sauvegarde (dans temp) de T[0] dans T[NB-1]:
T[NB-1] = temp;
T:
int temp(T[0]);
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
T[NB-1] = temp;
T:
4
temp
int temp(T[0]);
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
T[NB-1] = temp;
T:
temp
i
int temp(T[0]);
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
T[NB-1] = temp;
T:
temp
i
int temp(T[0]);
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
T[NB-1] = temp;
T:
temp
i
int temp(T[0]);
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
T[NB-1] = temp;
T:
temp
i
int temp(T[0]);
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
T[NB-1] = temp;
T:
4
temp
int temp(T[0]);
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
T[NB-1] = temp;
T:
0
temp
int temp(T[0]);
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
T[NB-1] = temp;
T:
0
temp
int temp(T[0]);
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
T[NB-1] = temp;
Exercices
1. Dcalage dans l'autre sens:
0 1 2 3 4 devient 4 0 1 2 3.
2. crire le code qui inverse les lments du tableau:
0 1 2 3 4 devient 4 3 2 1 0
T:
int temp(T[NB-1]);
for(int i(0); i < NB 1; ++i) {
T[i+1] = T[i];
}
T[0] = temp;
T:
5
temp
int temp(T[NB-1]);
for(int i(0); i < NB 1; ++i) {
T[i+1] = T[i];
}
T[0] = temp;
T:
5
temp
int temp(T[NB-1]);
for(int i(0); i < NB 1; ++i) {
T[i+1] = T[i];
}
T[0] = temp;
T:
5
temp
int temp(T[NB-1]);
for(int i(0); i < NB 1; ++i) {
T[i+1] = T[i];
}
T[0] = temp;
T:
5
temp
int temp(T[NB-1]);
for(int i(0); i < NB 1; ++i) {
T[i+1] = T[i];
}
T[0] = temp;
T:
5
temp
int temp(T[NB-1]);
for(int i(0); i < NB 1; ++i) {
T[i+1] = T[i];
}
T[0] = temp;
T:
5
temp
int temp(T[NB-1]);
for(int i(0); i < NB 1; ++i) {
T[i+1] = T[i];
}
T[0] = temp;
T:
5
temp
int temp(T[NB-1]);
for(int i(0); i < NB 1; ++i) {
T[i+1] = T[i];
}
T[0] = temp;
Au lieu de
temp
Nouvelle tentative:
int temp(T[NB-1]);
for(int i(NB 1); i > 0; --i) {
T[i] = T[i-1];
}
T[0] = temp;
Vrifiez sur l'exemple que cette version est correcte !
Dcomposer
On peut procder en changeant les lments de T 2 par 2:
T:
Dcomposer
On peut procder en changeant les lments de T 2 par 2:
T:
Dcomposer
On peut procder en changeant les lments de T 2 par 2:
T:
Dcomposer
On peut procder en changeant les lments de T 2 par 2:
T:
Dcomposer
On peut procder en changeant les lments de T 2 par 2:
T:
Dcomposer
On peut procder en changeant les lments de T 2 par 2:
T:
temp = T[0];
T[0] = T[NB-1];
T[NB-1] = temp;
temp = T[1];
T[1] = T[NB-2];
T[NB-2] = temp;
Dcomposer
On peut procder en changeant les lments de T 2 par 2:
T:
temp = T[0];
T[0] = T[NB-1];
T[NB-1] = temp;
temp = T[1];
T[1] = T[NB-2];
T[NB-2] = temp;
Dcomposer
On peut procder en changeant les lments de T 2 par 2:
T:
temp = T[0];
T[0] = T[NB-1];
T[NB-1] = temp;
temp = T[1];
T[1] = T[NB-2];
T[NB-2] = temp;
Dcomposer
On peut procder en changeant les lments de T 2 par 2:
T:
temp = T[0];
T[0] = T[NB-1];
T[NB-1] = temp;
temp = T[1];
T[1] = T[NB-2];
T[NB-2] = temp;
Dcomposer
On peut procder en changeant les lments de T 2 par 2:
T:
temp = T[0];
T[0] = T[NB-1];
T[NB-1] = temp;
temp = T[1];
T[1] = T[NB-2];
T[NB-2] = temp;
Dcomposer
On peut procder en changeant les lments de T 2 par 2:
T:
Dcomposer
On peut procder en changeant les lments de T 2 par 2:
T: