5_3_conseils
TRANSCRIPT
-
7/25/2019 5_3_conseils
1/56
Conseils pour crire du code
-
7/25/2019 5_3_conseils
2/56
Problme rsoudre
Soit un tableau T:
int T[NB];
crire le code qui dcale les lments de T, tel que:
l'lment l'indice ise 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.
-
7/25/2019 5_3_conseils
3/56
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 lesconditions;
5. Vrifier le programme sur un exemple.
-
7/25/2019 5_3_conseils
4/56
Schma
Soit un tableau T:
int T[NB];
crire le code qui dcale les lments de T, tel que:
l'lment l'indice ise 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 contiendra2 3 4 5 1 aprs ce dcalage.
T:
-
7/25/2019 5_3_conseils
5/56
Dcomposer le problme
Il faut:
1. dcaler les lments 0, 1, ... vers la gauche;
2. grer correctement l'lment d'indice 0.
T:1
2
-
7/25/2019 5_3_conseils
6/56
Dcaler les lments 0, 1, ... vers la gaucheRaisonner sur un exemple
Dans le cas d'un tableau 5 lments (NB = 5), il faut:
copier T[1]dans T[0],
T[2]dans T[1]...
jusque T[4]dans T[3]:
T[0] = T[1];T[1] = T[2];
T[2] = T[3];
T[3] = T[4];
0 1 2 3 4
T:
-
7/25/2019 5_3_conseils
7/56
Dcaler les lments 0, 1, ... vers la gaucheGnraliser (1)
0 1 2 3 4
T:
Gnralisons un tableau NB lments (au lieu de 5):"T[3]= T[4];"devient
T[NB-2]= T[NB-1];
T[0] = T[1];
T[1] = T[2];
...T[NB-2] = T[NB-1];
-
7/25/2019 5_3_conseils
8/56
Dcaler les lments 0, 1, ... vers la gaucheGnraliser (2)
0 1 2 3 4
T:
Remplaons:T[0] = T[1];
T[1] = T[2];
...
T[NB-2] = T[NB-1];
par une boucle for:for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
Une autre possibilit est:for(int i(1); i < NB; ++i) {
T[i-1] = T[i];
}
-
7/25/2019 5_3_conseils
9/56
Grer correctement l'lment d'indice 0
Une premire solution est de faire (pour un tableau 5 lments):
T[4] = T[0];
ce qui se gnralise pour un tableau NBlments en:
T[NB-1] = T[0];
T:
2
-
7/25/2019 5_3_conseils
10/56
Premire solution
T[NB-1] = T[0];
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
T:
-
7/25/2019 5_3_conseils
11/56
Vrifier le code sur un exemple
T[NB-1] = T[0];
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
0 1 2 3 4T:
NB
5
-
7/25/2019 5_3_conseils
12/56
Vrifier le code sur un exemple
T[NB-1] = T[0];
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
0 1 2 3 4T:
NB
5
-
7/25/2019 5_3_conseils
13/56
Vrifier le code sur un exemple
T[NB-1] = T[0];
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
0 1 2 3 0T:
NB
5
-
7/25/2019 5_3_conseils
14/56
Vrifier le code sur un exemple
T[NB-1] = T[0];
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
0 1 2 3 0T:
NB
5
i
0
-
7/25/2019 5_3_conseils
15/56
Vrifier le code sur un exemple
T[NB-1] = T[0];
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
1 1 2 3 0T:
NB
5
i
0
-
7/25/2019 5_3_conseils
16/56
Vrifier le code sur un exemple
T[NB-1] = T[0];
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
1 2 2 3 0T:
NB
5
i
1
-
7/25/2019 5_3_conseils
17/56
Vrifier le code sur un exemple
T[NB-1] = T[0];
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
1 2 3 3 0T:
NB
5
i
2
-
7/25/2019 5_3_conseils
18/56
Vrifier le code sur un exemple
T[NB-1] = T[0];
for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
1 2 3 0 0T:
NB
5
i
3
-
7/25/2019 5_3_conseils
19/56
!
alors qu'on voulait:
1 2 3 0 0T:
1 2 3 4 0
-
7/25/2019 5_3_conseils
20/56
Que s'est-il pass ?
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];
}
1 2 3 0 0T:
-
7/25/2019 5_3_conseils
21/56
Solution
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].
T:
1
2
3
temp
-
7/25/2019 5_3_conseils
22/56
Solution
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:
1
2
3
temp
-
7/25/2019 5_3_conseils
23/56
Vrifier le code sur un exemple
int temp(T[0]);for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
T[NB-1] = temp;
0 1 2 3 4T:
NB
5
-
7/25/2019 5_3_conseils
24/56
Vrifier le code sur un exemple
int temp(T[0]);for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
T[NB-1] = temp;
0 1 2 3 4T:
NB
5
temp
0
-
7/25/2019 5_3_conseils
25/56
Vrifier le code sur un exemple
int temp(T[0]);for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
T[NB-1] = temp;
0 1 2 3 4T:
NB
5
temp
0
i
0
-
7/25/2019 5_3_conseils
26/56
Vrifier le code sur un exemple
int temp(T[0]);for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
T[NB-1] = temp;
1 1 2 3 4T:
NB
5
temp
0
i
0
-
7/25/2019 5_3_conseils
27/56
Vrifier le code sur un exemple
int temp(T[0]);for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
T[NB-1] = temp;
1 2 3 3 4T:
NB
5
temp
0
i
3
-
7/25/2019 5_3_conseils
28/56
Vrifier le code sur un exemple
int temp(T[0]);for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
T[NB-1] = temp;
1 2 3 4 4T:
NB
5
temp
0
i
3
-
7/25/2019 5_3_conseils
29/56
Vrifier le code sur un exemple
int temp(T[0]);for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
T[NB-1] = temp;
1 2 3 4 4T:
NB
5
temp
0
-
7/25/2019 5_3_conseils
30/56
Vrifier le code sur un exemple
int temp(T[0]);for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
T[NB-1] = temp;
1 2 3 4 0T:
NB
5
temp
0
-
7/25/2019 5_3_conseils
31/56
Vrifier le code sur un exemple
int temp(T[0]);for(int i(0); i < NB-1; ++i) {
T[i] = T[i+1];
}
T[NB-1] = temp;
1 2 3 4 0T:
NB
5
temp
0
-
7/25/2019 5_3_conseils
32/56
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
-
7/25/2019 5_3_conseils
33/56
Dcalage vers la droitecrire le code qui dcale les lments de Tvers la droite:
En adaptant le programme prcdent:
int temp(T[NB-1]);for(int i(0); i < NB 1; ++i) {
T[i+1] = T[i];
}
T[0] = temp;
T:
-
7/25/2019 5_3_conseils
34/56
Vrifier le code sur un exemple
int temp(T[NB-1]);for(int i(0); i < NB 1; ++i) {
T[i+1] = T[i];
}
T[0] = temp;
0 1 2 3 4T:
NB
5
-
7/25/2019 5_3_conseils
35/56
Vrifier le code sur un exemple
int temp(T[NB-1]);for(int i(0); i < NB 1; ++i) {
T[i+1] = T[i];
}
T[0] = temp;
0 1 2 3 4T:
NB
5temp
4
-
7/25/2019 5_3_conseils
36/56
Vrifier le code sur un exemple
int temp(T[NB-1]);for(int i(0); i < NB 1; ++i) {
T[i+1] = T[i];
}
T[0] = temp;
0 1 2 3 4T:
NB
5temp
4 i
0
-
7/25/2019 5_3_conseils
37/56
Vrifier le code sur un exemple
int temp(T[NB-1]);for(int i(0); i < NB 1; ++i) {
T[i+1] = T[i];
}
T[0] = temp;
0 0 2 3 4T:
NB
5temp
4 i
0
-
7/25/2019 5_3_conseils
38/56
Vrifier le code sur un exemple
int temp(T[NB-1]);for(int i(0); i < NB 1; ++i) {
T[i+1] = T[i];
}
T[0] = temp;
0 0 2 3 4T:
NB
5temp
4 i
1
-
7/25/2019 5_3_conseils
39/56
Vrifier le code sur un exemple
int temp(T[NB-1]);for(int i(0); i < NB 1; ++i) {
T[i+1] = T[i];
}
T[0] = temp;
0 0 0 3 4T:
NB
5temp
4 i
1
-
7/25/2019 5_3_conseils
40/56
Vrifier le code sur un exemple
int temp(T[NB-1]);for(int i(0); i < NB 1; ++i) {
T[i+1] = T[i];
}
T[0] = temp;
0 0 0 0 0T:
NB
5temp
4
-
7/25/2019 5_3_conseils
41/56
-
7/25/2019 5_3_conseils
42/56
Vrifier le code sur un exemple
Au lieu de4 0 0 0 0
T:
4 0 1 2 3
-
7/25/2019 5_3_conseils
43/56
Dcalage vers la droite
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 !
temp
T:
-
7/25/2019 5_3_conseils
44/56
Inverser les lments du tableau
On peut procder en changeant les lments de T2 par 2:
On change le premier lment avec le dernier, le deuxime avec l'avant
dernier, etc...
T:
-
7/25/2019 5_3_conseils
45/56
Dcomposer
On peut procder en changeant les lments de T2 par 2:
On change le premier lment avec le dernier, le deuxime avec l'avant
dernier, etc...Pour un tableau de 5 lments:
T[0] = T[4];
T[4] = T[0];
T[1] = T[3];
T[3] = T[1];
T:
-
7/25/2019 5_3_conseils
46/56
Dcomposer
On peut procder en changeant les lments de T2 par 2:
On change le premier lment avec le dernier, le deuxime avec l'avant
dernier, etc...Pour un tableau de 5 lments:
temp = T[0];
T[0] = T[4];
T[4] = temp;
temp = T[1];
T[1] = T[3];
T[3] = temp;
T:
-
7/25/2019 5_3_conseils
47/56
Dcomposer
On peut procder en changeant les lments de T2 par 2:
On change le premier lment avec le dernier, le deuxime avec l'avant
dernier, etc...Pour un tableau de NBlments:
temp = T[0];
T[0] = T[4];
T[4] = temp;
temp = T[1];
T[1] = T[3];
T[3] = temp;
T:
-
7/25/2019 5_3_conseils
48/56
Dcomposer
On peut procder en changeant les lments de T2 par 2:
On change le premier lment avec le dernier, le deuxime avec l'avant
dernier, etc...Pour un tableau de NBlments:
temp = T[0];
T[0] = T[NB-1];
T[NB-1] = temp;
temp = T[1];
T[1] = T[3];
T[3] = temp;
T:
-
7/25/2019 5_3_conseils
49/56
Dcomposer
On peut procder en changeant les lments de T2 par 2:
On change le premier lment avec le dernier, le deuxime avec l'avant
dernier, etc...Pour un tableau de NBlments:
temp = T[0];
T[0] = T[NB-1];
T[NB-1] = temp;
temp = T[1];
T[1] = T[NB-2];
T[NB-2] = temp;
T:
-
7/25/2019 5_3_conseils
50/56
Dcomposer
On peut procder en changeant les lments de T2 par 2:
temp = T[0];
T[0] = T[NB-1];
T[NB-1] = temp;
temp = T[1];T[1] = T[NB-2];
T[NB-2] = temp;
T:
for(int i(0); i < ??; ++i) {
int temp = T[i];
T[i] = T[??];
T[??] = temp;
}
-
7/25/2019 5_3_conseils
51/56
Dcomposer
On peut procder en changeant les lments de T2 par 2:
temp = T[0];
T[0] = T[NB-1];
T[NB-1] = temp;
temp = T[1];T[1] = T[NB-2];
T[NB-2] = temp;
T:
for(int i(0); i < ??; ++i) {
int temp = T[i];
T[i] = T[??];
T[??] = temp;
}
-
7/25/2019 5_3_conseils
52/56
Dcomposer
On peut procder en changeant les lments de T2 par 2:
temp = T[0];
T[0] = T[NB-1];
T[NB-1] = temp;
temp = T[1];T[1] = T[NB-2];
T[NB-2] = temp;
T:
for(int i(0); i < ??; ++i) {
int temp = T[i];
T[i] = T[NB-1];
T[NB-1] = temp;
}
-
7/25/2019 5_3_conseils
53/56
Dcomposer
On peut procder en changeant les lments de T2 par 2:
temp = T[0];
T[0] = T[NB-1];
T[NB-1] = temp;
temp = T[1];T[1] = T[NB-2];
T[NB-2] = temp;
T:
for(int i(0); i < ??; ++i) {
int temp = T[i];
T[i] = T[NB-1-i];
T[NB-1-i] = temp;
}
-
7/25/2019 5_3_conseils
54/56
Dcomposer
On peut procder en changeant les lments de T2 par 2:
temp = T[0];
T[0] = T[NB-1];
T[NB-1] = temp;
temp = T[1];T[1] = T[NB-2];
T[NB-2] = temp;
T:
for(int i(0); i
-
7/25/2019 5_3_conseils
55/56
Dcomposer
On peut procder en changeant les lments de T2 par 2:
T:
for(int i(0); i
-
7/25/2019 5_3_conseils
56/56
Dcomposer
On peut procder en changeant les lments de T2 par 2:
T:
for(int i(0); i