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 150 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 15 15 ? ? ?
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 12 12 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 10 10 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 50 50 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 150 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

N=donner

Jusqu'à N dans [ 1 .. Nmax ]

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.