|
Lycée
Majida Boulila Sfax
|
Matière
: Informatique
|
|
|
E-Mail : Zouheir.dammak@Edunet.tn Tél (Dom) : 615 691 Sfax - Tunisie |
Professeur informatique Dammak Zouheir |
Date de création 20 Mars 2001
Exercice algorithmique Insertion d'un élément dans un tableau
Énoncé Écrire une marche à suivre qui permet d'insérer un entier A dans un tableau T à N éléments à la position P. (N, T, P et A sont des données) I) Préanalyse : Données : ..............- Le nombre d'éléments de T (N=6); ..............- Un tableau T à N éléments de types entiers ;
| T | 17 | 33 | 50 | 10 | 12 | 15 | ? | ? | ? | ? |
|---|---|---|---|---|---|---|---|---|---|---|
|
1
|
1
|
2
|
P= 3
|
4
|
5
|
N=6
|
7
|
8
|
9
|
NMAX=10
|
.............- La position d'insertion P (P=3); ..............- La valeur à insérer A (A=150).
Résultat :
| T | 17 | 33 | 50 | 10 | 12 | 15 | ? | ? | ? | |
|---|---|---|---|---|---|---|---|---|---|---|
|
1
|
1
|
2
|
P= 3
|
4
|
5
|
6
|
N=7
|
8
|
9
|
NMAX=10
|
Étape 1 : Décaler, d'une case à droite, les éléments de T à partir de la position N à la position d'insertion P :
Pas 1:...............T[N+1] <-- T[N]. ............( T[7] <-- T[6])
| T | 17 | 33 | 50 | 10 | 12 | ? | ? | ? | ||
|---|---|---|---|---|---|---|---|---|---|---|
|
1
|
1
|
2
|
P= 3
|
4
|
5
|
N=6
|
7
|
8
|
9
|
NMAX=10
|
Pas 2:...............T[N] <-- T[N-1]. ............(( T[6] <-- T[5])
| T | 17 | 33 | 50 | 10 | 15 | ? | ? | ? | ||
|---|---|---|---|---|---|---|---|---|---|---|
|
1
|
1
|
2
|
P= 3
|
4
|
5
|
N=6
|
7
|
8
|
9
|
NMAX=10
|
Pas 3:...............T[N-1] <-- T[N-2]. ............( T[5] <-- T[4])
| T | 17 | 33 | 50 | 12 | 15 | |||||
|---|---|---|---|---|---|---|---|---|---|---|
|
1
|
1
|
2
|
P= 3
|
4
|
5
|
N=6
|
7
|
8
|
9
|
NMAX=10
|
etc ........Jusqu'à.....T[P+1] <-- T[P]. ............(.T[4] <-- T[3])
| T | 17 | 33 | 10 | 12 | 15 | ? | ? | ? | ||
|---|---|---|---|---|---|---|---|---|---|---|
|
1
|
1
|
2
|
P= 3
|
4
|
5
|
N=6
|
7
|
8
|
9
|
NMAX=10
|
Étape 2 : insérer la valeur de A dans T à la position P : ..............T[P] <-- A........(T[3] <-- 150). ............
| T | 17 | 33 | 50 | 10 | 12 | 15 | ? | ? | ? | |
|---|---|---|---|---|---|---|---|---|---|---|
|
1
|
1
|
2
|
P= 3
|
4
|
5
|
N=6
|
7
|
8
|
9
|
NMAX=10
|
Le nombre d'éléments devient ( N <-- N+1) c'est à dire N=6+1...............................................................................................Les noms des modules (sous-programmes) Saisir (Lire) le nombre d'éléments de T .................................................... Lecture(N) Remplir le tableau T par N éléments ........................................................ Remplir(N,T) Lire la valeur à insérer A ..........................................................................Saisie(A) Lire la position d'insertion de l'entier A .....................................................Position(P) Décaler à droite les valeurs du tableau T de position N à la position P.......Decaler(P,N,T) Incrémenter une fois la valeur de N.......................................................... Incrementer(N) Insérer la valeur de A dans le tableau T à la position P..............................Inserer(P,A,,T) Afficher le tableau T après insertion..........................................................Affiche(N,T) II) Analyses & Algorithmes : 1) Analyse du programme principal
|
Nom : Inserer_element
|
||
|
S.
|
LDE
|
O.U.
|
|
8
1 6 3 4 5 2 9 |
Résultat : Affiche ( Nf , Tf ) Nf <-- Incrementer ( Ni ) Ni = Lecture( Ni ) Tf = Inserer ( P , A ,Td ) P= Position ( Ni , P ) A= Saisie ( A ) Td = Decaler ( P , Ni ,Ti ) Ti = Remplir ( Ni , Ti ) Fin Inserer_element |
P A Ni Nf Ti Td Tf
|
Tableau de déclaration des objets :
|
O.U.
|
Code
|
Type/Nature
|
Rôle
|
|
P
|
P
|
Entier
|
La position d'insertion |
|
A
|
A
|
Entier
|
La valeur à insérer |
|
Ni
|
N
|
Entier
|
Le nombre d'éléments dans T avant insertion |
|
Nf
|
N
|
Entier
|
Le nombre d'éléments dans T après insertion |
|
Ti
|
T
|
Tab
|
Tableau des valeurs à l'état initial |
|
Td
|
T
|
Tab
|
Tableau des valeurs après le décalage des éléments |
|
Tf
|
T
|
Tab
|
Tableau des valeurs après insertion |
|
Lecture
|
Lecture
|
Procédure
|
Lecture de N |
|
Remplir
|
Remplir
|
Procédure
|
Remplir le tableau T par des valeurs |
|
Position
|
Position
|
Procédure
|
Lecture de la postion d'insertion |
|
Saisie
|
Saisie
|
Procédure
|
Lecture de la valeur à insérer |
|
Decaler
|
Decaler
|
Procédure
|
Décaler les éléments du tableau d'une case à droite à partir de la position p |
|
Incrementer
|
Incrementer
|
Fonction Entier
|
Incrementer une fois la valeur de N (N+1) |
|
Inserer
|
Inserer
|
Procédure
|
Insérer la valeur de A à la position P |
|
Affiche
|
Affiche
|
Procédure
|
Afficher les valeurs du tableau après insertion |
Nouveau Type ................Tab = Tableau [1..NMax] d'entier
NMax est une constante est égale à 10
Algorithme du programme principal :
| 0- | Début Inserer_element |
| 1- | Lecture( N ) |
| 2- | Remplir ( N , T ) |
| 3- | Position ( N , P ) |
| 4- | Saisie ( A ) |
| 5- | Decaler ( P , N ,T ) |
| 6- | Inserer ( P , A ,T ) |
| 7- | N <-- Incrementer ( N ) |
| 8- | Affiche ( N , T ) |
| 9- | Fin Inserer_element |
2) Analyse de la procédure Lecture
|
DEF PROC Lecture
(Var N : Entier)
|
||
|
S.
|
LDE
|
O.U.
|
|
|
Résultat : N | |
|
1
|
N= [ ] Répeter | |
|
||
|
||
|
2
|
Fin Lecture | |
Algorithme de la procédure Lecture
| 0- | DEF PROC Lecture (Var N : Entier) |
| 1- | Répeter |
|
..........Lire( N )
|
|
| Jusqu'à N dans [ 1 .. Nmax ] | |
| 2- | Fin Lecture |
3) Analyse de la procédure Remplir
|
DEF PROC Remplir
( N : Entier ; Var T : Tab )
|
||
|
S.
|
LDE
|
O.U.
|
|
|
Résultat : T |
I
|
|
1
|
T= [ ] Pour I de 1 a N Répéter | |
|
...................T[I]=donnée |
||
|
..........Fin Pour |
||
|
I = Compteur |
||
|
2
|
Fin Lecture |
|
Tableau de déclaration des objets :
|
O.U.
|
Code
|
Type/Nature
|
Rôle
|
|
I
|
I
|
Entier
|
Compteur |
Algorithme de la procédure Remplir :
| 0- | DEF PROC Remplir ( N : Entier ; Var T : Tab ) |
| 1- | Pour I de 1 a N Répéter |
|
.......... Lire( T[I]
)
|
|
|
Fin Pour I = Compteur |
|
| 2- | Fin Lecture |
4) Analyse de la procédure Position
|
DEF PROC Position
( N : Entier ; Var P : Entier )
|
||
|
S.
|
LDE
|
O.U.
|
|
|
Résultat : P |
|
|
1
|
P = [ ] Répeter | |
|
.................P=donnée |
||
|
...........Jusqu'à P dans [ 1 .. N ] |
||
|
2
|
Fin Position | |
Algorithme de la procédure Position :
| 0- | DEF PROC Position ( N : Entier ; Var P : Entier ) |
| 1- | Répeter |
|
...........Lire( P )
|
|
| Jusqu'à P dans [ 1 .. N] | |
| 2- | Fin Lecture |
5) Analyse de la procédure Saisie
|
DEF PROC Saisie
( Var A : Entier )
|
||
|
S.
|
LDE
|
O.U.
|
|
|
Résultat : A |
|
|
1
|
A = Donnée | |
|
2
|
Fin Position | |
Algorithme de la procédure Saisie :
| 0- | DEF PROC Saisie ( Var A : Entier ) |
| 1- |
Lire(
A)
|
| 2- | Fin Saisie |
6) Analyse de la procédure Decaler :
|
DEF PROC Decaler
( P , N : Entier ; Var T
: TAB )
|
||
|
S.
|
LDE
|
O.U.
|
|
|
Résultat : T |
I
|
|
1
|
T = [ ] Pour I de (N+1) à (P+1) Répeter |
|
| ......................T[I] <-- T[I-1] | ||
| ...........Fin Pour | ||
| I = Compteur | ||
|
2
|
Fin Position | |
Tableau de déclaration des objets :
|
O.U.
|
Code
|
Type/Nature
|
Rôle
|
|
I
|
I
|
Entier
|
Compteur |
Algorithme de la procédure Decaler :
| 0- | DEF PROC Decaler ( P , N : Entier ; Var T : TAB ) |
| 1- | Pour I de (N+1) à (P+1) Répeter |
|
.....................T[I]
<--
T[I-1]
|
|
| Fin Pour | |
| 2- | Fin Decaler |
7) Analyse de la procédure Inserer :
|
DEF PROC Inserer
( P , A : Entier ;
Var T : Tab)
|
||
|
S.
|
LDE
|
O.U.
|
|
|
Résultat : T |
|
|
1
|
T = ...... T[P] <-- A | |
|
2
|
Fin Position | |
Algorithme de la procédure Inserer :
| 0- | DEF PROC Inserer ( P , A , N : Entier ; Var T : Tab) |
| 1- |
T[P]
<--
A
|
| 2- | Fin Inserer |
8) Analyse de la Fonction Incrementer :
|
DEF FN Incrementer
( N : Entier )
: Entier
|
||
|
S.
|
LDE
|
O.U.
|
|
|
Résultat : Incrementer |
|
|
1
|
Incrementer <-- N + 1 | |
|
2
|
Fin Incrementer | |
Algorithme de la Fonction Incrementer :
| 0- | DEF FN Incrementer ( N : Entier ) : Entier |
| 1- |
Incrementer
<--
N + 1
|
| 2- | Fin Incrementer |
9) Analyse de la procédure Affiche :
|
DEF PROC
Affiche
( N : Entier ;
T : Tab )
|
||
|
S.
|
LDE
|
O.U.
|
|
1 |
Résultat : |
I
|
| ....... [ ] Pour I de 1 a N Répéter | ||
|
...................Ecrire ( T[I] ) |
||
|
..........Fin Pour |
||
|
I = Compteur |
||
|
2
|
Fin Affiche |
|
Tableau de déclaration des objets :
|
O.U.
|
Code
|
Type/Nature
|
Rôle
|
|
I
|
I
|
Entier
|
Compteur |
Algorithme de la procédure Affiche :
| 0- | DEF PROC Affiche ( N : Entier ; T : Tab ) |
| 1- | Pour I de 1 à N Répéter |
|
.......... Ecrire
( T[I]
)
|
|
| Fin Pour | |
| 2- | Fin Affiche |
III) Traduction en Turbo Pascal :
| Program Inserer_element ; |
| Const NMax = 10 ; |
| Type Tab = ARRAY [1..Nmax] Of Integer ; |
| Var T : Tab ; |
| .......N,P,A : Integer ; |
| PROCEDURE Lecture ( Var N : Integer ) ; |
| Begin |
| .......Repeat |
|
..............Readln
( N ) ;
|
| .......Until N in [ 1 .. Nmax ] ; |
| End ; |
| PROCEDURE Remplir ( N : Integer ; Var T : Tab ) ; |
| Var I : Integer ; |
| Begin |
| ......For I : = 1 To N Do |
|
.......... Readln ( T[I]
) ;
|
| End ; |
| PROCEDURE Position ( N : Integer ; Var P : Integer ) ; |
| Begin |
| .......Repeat |
|
..............Readln
( P ) ;
|
| .......Until N in [ 1 .. N] ; |
| End ; |
| PROCEDURE Saisie ( Var A : Integer ) ; |
| Begin |
| .............Readln ( A ) ; |
| End ; |
| PROCEDURE Decaler ( P , N : Integer ; Var T : TAB ) ; |
| Var I : Integer ; |
| Begin |
| ........For I : = (N+1) To (P+1) Do |
|
.....................T[I]
:
= T[I-1] ;
|
| End ; |
| PROCEDURE Inserer ( P , A : Integer ; Var T : Tab) ; |
| Begin |
|
.............T[P]
:
= A;
|
| End ; |
| FUNCTION Incrementer ( N : Integer ) : Integer ; |
| Begin |
|
...........Incrementer
:
= N + 1
;
|
| End ; |
|
PROCEDURE
Affiche
( N : Integer
;
T : Tab ) ;
|
| Var I : Integer ; |
| Begin |
| ......For I : = 1 To N Do |
|
.......... Writeln ( T[I]
) ;
|
| End ; |
| Begin |
| ........Lecture( N ); |
| ........Remplir ( N , T ); |
| ........Position ( N , P ); |
| ........Saisie ( A ); |
| ........Decaler ( P , N , T ); |
| ........Inserer ( P , A , T ); |
| ........N := Incrementer ( N ); |
| ........Affiche ( N , T ); |
| ........Readln; |
| End. |