Exemple 2 :
inverser un tableau
Enoncé: Soit un tableau de
10 entiers initialisé par des valeurs quelconques, écrire
un
programme qui inverse le tableau (inverser le dernier
élément
et le premier, puis le deuxième avec l'avant dernier, etc...).
Le
tableau ainsi inversé sera affiché.
Détecter les tableaux:
Immédiat, un tableau de 10 entiers.
Analyse:
1) partie données:
- En fonction des indices de l'énoncé,
définir le type et la taille des variables tableaux.
int
nbElem= 10;
int tab[nbElem];
- Les tableaux doivent-ils être initialisés
(totalement, partiellement) à la déclaration?
Pas clair mais pourquoi pas:
int
tab[nbElem]={1,3,5,7,11,13,17,19,23,29};
2) Partie traitement:
- Détecter s'il va y avoir itération ou non
sur les tableaux: Oui immédiat.
- Supposons le traitement effectué pour les 3
premiers éléments:
29
|
23
|
19
|
7
|
11
|
13
|
17
|
5
|
3
|
1
|
Inverser le suivant consiste à mettre
17 en tab[3] a la place de 7 et 7
en tab[6] à la place de 17.
Il faut donc deux indices dans le corps de
l'itérative: chaque indice désigne un des deux
éléments à inverser.
donc:
Première solution
simple:
tab[ind1]=tab[ind2];
MAIS après
l'exécution de cette instruction on obtient:
29
|
23
|
19
|
17
|
11
|
13
|
17
|
5
|
3
|
1
|
donc le 7 a été écrasé ==> il
faut une variable auxiliaire (int elem;)
elem=tab[ind2];
tab[ind2]=tab[ind1];
tab[ind1]=elem;
ind1=ind1+1;
ind2=ind2-1;
- Analyser le cas du dernier élément du
tableau (en fait la dernière étape du traitement)
C'est le cas ou ind1 vaut 4 et ind2 vaut 5. Le
traitement est celui du cas générale. Donc la condition
de sortie de l'itérative est ind1=
= 5 ce qui
correspond à la taille du tableau (10) divisé par 2.
- Analyser le cas du premier élément
du tableau (c'est la première étape)
C'est le cas où ind1 est initialisé à 0 et ind2
à 9. Le traitement est celui du cas général.
suivant
plan