Benjamin GOGBE
1ère édition
Support de cours d’Algorithmique 1 ère Année Licence Informatique Développeur d’Application
Avant-propos
Ce support de cours a été élaboré sur la base de ressources existantes et de sources trouvées
sur Internet. Il contient quelques explications de cours sur les concepts de base de
l’Algorithmique dans le programme en vigueur en 1ère année Brevet de Technicien Supérieur
option Informatique Développeur d’Application en Côte d’Ivoire.
Avertissement : Ceci n’est qu’un support de cours et ne saurait en aucun cas remplacer le cours
présentiel donné par l’enseignant. Nous encourageons vivement les détenteurs de ce document
de se rendre effectivement en classe pour avoir des explications détaillées et participer aux travaux
dirigés pratiques afin de mieux maitriser les techniques.
1ère Partie :
Algorithmique
INTRODUCTION
Un tableau est une structure de données linéaires qui permet de stocker des données de même
type.
Chacune des valeurs stockées est repérée par un indice qui indique la position de la donnée dans
le tableau.
Un tableau possède un nom, une valeur d’indice minimal et une valeur d’indice maximal, sa
longueur.
Lorsque l’indice minimal d’un tableau est égal à 1, la longueur du tableau est égale à la valeur de
l’indice maximal.
Lorsque l’indice minimal est 0, la longueur du tableau est égale à la valeur de l’indice maximal+1.
Un tableau peut être à une ou de plusieurs dimensions. La dimension d’un tableau est déterminée
par le nombre d’indices nécessaires pour accéder à une case du tableau.
I- DECLARATION
VAR T1 : TAB
Syntaxe :
NomTableau [indice] ;
Exemple :
Soit le tableau d’entier de 10 notes. Pour représenter la valeur se trouvant dans la case
d’indice 5 du tableau, on écrira :
TABNOTE [5] ;
Syntaxe :
Dans la plupart des cas, les opérations de parcours d’un tableau se font en utilisant une boucle
POUR.
CAS D’UTILISATION
ALGORITHME AFFICHETAB
VAR
T : TABLEAU [1..N] DE REEL
I : ENTIER
DEBUT
POUR I1 A N FAIRE
ECRIRE (T [I])
FINPOUR
FIN
Dans la plupart des cas, les opérations de parcours d’un tableau se font en utilisant une boucle
POUR.
CAS D’UTILISATION
ALGORITHME AFFICHETAB
VAR
T : TABLEAU [1..N] DE REEL
I : ENTIER
DEBUT
POUR I1 A N FAIRE
LIRE (T [I])
FINPOUR
FIN
Mise en situation :
Principe :
Le principe consiste à déplacer le contenu de toutes les cellules du tableau d’une position vers la
droite à partir de la cellule d’indice i avant d’y placer la valeur x.
Illustration :
50 23 5 8 12 45 11 10
Soit le tableau d’entier T1 de dimension 8. On veut insérer la valeur 20 dans la cellule d’indice 6.
Le principe consiste :
50 23 5 8 12 45 11 10
50 23 5 8 12 45 11 11
50 23 5 8 12 20 45 11
Algorithme :
ALGORITHME INSERER_TAB
VAR T: TABLEAU [1..n] d’entier
i, j : entier
x : entier
DEBUT
LIRE(x)
LIRE(i)
j n
TANT QUE (j>i) FAIRE
T[j] T[j-1]
j j-1
FIN TANT QUE
T[i] x
FIN
Mise en situation :
On veut supprimer un élément de valeur x dans un tableau T de N éléments.
Ou encore on veut supprimer l’élément d’indice j dans un tableau de N éléments.
Principe :
Il consiste à rechercher l’élément à supprimer et à décaler d’une case vers la gauche tous les
éléments qui suivent l’élément à supprimer.
Illustration :
Soit le tableau TAB contenant 8 noms d’étudiants sans doublons.
KOFFI BAKARY BAMBA KOUASSI GOGBE TOURE KANE BAMOUNI
On veut supprimer dans ce tableau le nom GOGBE qui a été ajouté par erreur.
Dans ce cas, il faudra :
- D’abord, rechercher le nom GOGBE de façon séquentielle dans le tableau.
- Ensuite, décaler vers la gauche chaque élément qui vient après la case contenant GOGBE.
Algorithme :
ALGORITHME SUPPRIMER_TAB
VAR TAB: TABLEAU [1..n] de chaine
i, j : entier
nom : chaine
DEBUT
LIRE(nom)
i 0
REPETER
ii+1
JUSQU’A ((nom=TAB[i]) OU (i>=n))
SI (nom=TAB[i]) ALORS
POUR ji à n-1 FAIRE
TAB[j] TAB [j+1]
FIN POUR
TAB[n] ‘’ ‘’
FINSI
FIN
TD N°7
Exercice 1
Dans un magasin de produits cosmétiques, on décide de réduire les prix pendant la période de
solde du mois de mars. A cet effet, le gérant décide d’appliquer une remise de 25% sur tous les
prix au-dessus de la moyenne des prix et 15% sur les autres prix.
Travail à faire :
Ecrire un programme permettant de :
- Saisir et afficher les prix des 50 produits du magasin
- De calculer et d’afficher les prix soldés
- Rechercher et d’afficher le prix minimum et le prix maximum
Le tri est une opération consistant à ranger les informations ou des données selon un ou plusieurs
critères, selon un ordre bien précis.
Le tri est une opération très importante en algorithmique car il permet de faciliter la recherche
dans les structures de données telle que les tableaux et les listes.
Il existe plusieurs algorithmes de tri ; chacun étant approprié à des situations bien précises.
Ils peuvent être classifiés en deux grands groupes :
- Les algorithmes de tris itératifs :
Le tri par sélection
Le tri par insertion
Le tri à bulle
- Les algorithmes des tris récursifs basés sur le principe “diviser pour régner”, c’est-à-dire
dans lesquels le tri d’une liste s’effectue en la divisant plusieurs fois par deux jusqu’à
obtention de sous-listes ne comportant qu’une seule valeur.
Le tri fusion
Tri rapide
Dans ce module, nous étudierons quelques algorithmes de tris itératifs.
La recherche séquentielle :
Mise en situation :
Soit un tableau T de N éléments non ordonnés. On veut retrouver la position d’une valeur x dans
le tableau T. ou encore savoir si cette valeur se trouve dans le tableau.
Principe :
On parcourt, du début à la fin ou de la fin au début, le tableau non trié en comparant l’élément
rencontré à celui que l’on recherche.
Ce type de recherche prend fin lorsque l’élément est trouvé ou qu’on est à la fin ou au début du
tableau.
Algorithme :
Deux solutions se présentent généralement.
Solution 1 :
ALGORITHME RECHERCHE_T1 ;
VAR T: TABLEAU [1..n] de chaine ;
i: entier ;
x : entier ;
DEBUT
LIRE(x) ;
i 1 ;
TANT QUE (T[i]<> x) ET (i<n) FAIRE
ii+1 ;
FIN TANT QUE ;
SI (T[i]=x) ALORS
ECRIRE(‘’La valeur ‘’, x , ‘’se trouve à la position ‘’, i) ;
SINON
ECRIRE(‘’La valeur ‘’, x , ‘’non trouvé‘’) ;
FIN SI ;
FIN.
Principe :
La recherche dans un tableau trié est plus rapide que dans un tableau non trié.
Le principe consiste à parcourir le tableau jusqu’à ce que l’élément courant soit supérieur à
l’élément recherché ou inférieur si l’on est dans le cas d’un tableau trié par ordre décroissant. Si
l’élément sur lequel la recherche a pris fin est égal à l’élément recherché alors on a trouvé la
position de l’élément recherché. Dans le cas contraire, c’est que l’élément recherché ne se trouve
pas dans le tableau.
Illustration :
Soit le tableau de 5 notes TNOTES trié par ordre croissant des notes, sans doublons. On veut
rechercher la position de la note 11.
9 10 11 14 16
A la case 3, la recherche prend fin parce que l’élément recherché est égal à l’élément courant. Le
programme retournera la position 3.
Algorithme :
ALGORITHME RECHERCHE_TRIE1 ;
VAR TNOTES: TABLEAU [1..n] de entier ;
i: entier ;
x : entier ;
DEBUT
LIRE(x) ;
i 0 ;
TANT QUE (TNOTES[i]< x) ET (i<n) FAIRE
ii+1 ;
FIN TANT QUE ;
SI (TNOTES[i]=x) ALORS
ECRIRE(‘’La valeur ‘’, x , ‘’se trouve à la position ‘’, i) ;
SINON
ECRIRE(‘’La valeur ‘’, x , ‘’non trouvé‘’) ;
FIN SI ;
FIN.
Principe :
La dichotomie consiste à diviser en deux le tableau trié et de regarder dans quelle partie du tableau
se trouve l’élément cherché.
On répète cette action jusqu’à ce qu’on se retrouve avec un sous-tableau contenant un seul
élément. On compare alors le contenu de cet élément avec la valeur recherchée. S’ils sont
identiques alors on aura trouvé l’élément ; dans le cas contraire l’élément n’est pas dans le tableau.
Pour trouver l’indice du milieu d’un tableau, on effectue l’opération suivante : indmilieu = (indmini
+ indmaxi) div 2.
On compare ensuite l’élément recherché à l’élément se trouvant dans la case d’indice du milieu.
Trois cas peuvent se présenter :
- Si l’élément recherché est supérieur alors l’indice minimal change et devient l’indice de
l’élément suivant l’élément d’indice du milieu.
- Si l’élément recherché est inférieur alors l’indice maximal change et devient l’indice de
l’élément précédent l’élément du milieu.
- Si on n’est dans aucun des 2 premiers cas, alors l’élément recherché est égale à l’élément
d’indice du milieu.
On continue à diviser le tableau en deux tant que :
- L’élément recherché n’est pas égale à l’élément d’indice du milieu
- L’indice minimal n’est pas supérieur à l’indice maximal c-à-d que l’élément recherché n’a
pas été trouvé dans le tableau.
Cette méthode est plus rapide car elle utilise moins de comparaison que la recherche séquentielle.
Illustration :
Soit le tableau T trié par ordre croissant de 12 entiers. On recherche la position de la valeur
valrech=45 dans T.
5 8 10 11 12 15 23 25 30 45 50 60
Indmin = 1 Indmax = 12
Recherche de l’indice du milieu : Indmilieu = (1+12) DIV 2 = 13 DIV 2 = 6
5 8 10 11 12 15 23 25 30 45 50 60
Comparer l’élément recherché valrech à T[indmilieu] c-à-d tester 45<T[6] ==> 45 <15 et 45 est
différent de 15. Le résultat du test est FAUX.
Dans ce cas, l’indice minimal (indmin) devient 6+1 = 7 et l’indice maximal (indmax) reste 12. Le
nouveau sous-tableau devient :
23 25 30 45 50 60
23 25 30 45 50 60
Comparer l’élément recherché valrech à T[indmilieu] c-à-d 45<T[9] ==> 45 < 30 et 45 est différent
de 30. Le résultat du test est FAUX.
Dans ce cas l’indice minimal (indmin) devient 9+1=10 et l’indice maximal (indmax) reste 12. Le
nouveau sous-tableau devient :
45 50 60
45 50 60
Comparer l’élément recherché valrech à T[indmilieu] c-à-d 45<T[10] ==> 45 < 45. Le résultat du
test est FAUX. Mais les deux valeurs sont égales. Dans ce cas, la recherche s’arrête car la valeur
recherchée a été retrouvé dans la case d’indice 10.
Algorithme :
ALGORITHME DICHOTOMIE ;
VAR T: TABLEAU [1..n] de entier ;
Indmin, indmax, milieu: entier ;
trouve : booléen ;
valrech : entier ;
DEBUT
LIRE(valrech ) ;
Indmin 1 ;
Indmax n ;
REPETER
// Calcul de l’indice du milieu du tableau
milieu(indmin + indmax) DIV 2 ;
trouve T[milieu] = valrech ;
SI NON(trouve) ALORS
SI (valrech<T[milieu]) ALORS
// l’élément cherché est dans la partie gauche
Indmax milieu – 1 ;
SINON
// l’élément cherché est dans la partie droite
Indmin milieu + 1 ;
FIN SI ;
FIN SI ;
JUSQU’A trouve ou indmin > indmax ;
SI (trouve) ALORS
ECRIRE(‘’La valeur ‘’, valrech , ‘’se trouve à la position ‘’,
milieu) ;
SINON
ECRIRE(‘’La valeur ‘’, valrech , ‘’non trouvé‘’) ;
FIN SI ;
FIN.
Référence : (Parisot) p. 25-28
Le principe :
Le principe du tri par sélection consiste à :
- Rechercher le minimum dans la partie non trié du tableau
- Placer le minimum trouvé au début de la partie non trié du tableau (à la fin de la partie
trié)
- Echanger le contenu de l’indice du minimum avec celui de l’indice de début de la partie
trié du tableau
- Recommencer la même opération sur le reste du tableau non-trié
Illustration :
Soit le tableau de 10 notes TNOTES ci-dessous. On désire ranger les notes par ordre croissant.
Dans cet exemple la partie grise représente le tableau trié et celle non-grise représente la partie
non trié. On utilisera 2 compteurs :
12 8 14 10 11 9 7 15 16 13
i j
7 8 14 10 11 9 12 15 16 13
i échange entre 7 et 12 j
7 8 14 10 11 9 12 15 16 13
Pas d’échange i = j
7 8 9 10 11 14 12 15 16 13
Échange entre 9 et 14 i j
7 8 9 10 11 14 12 15 16 13
Algorithme :
ALGORITHME TRI_SELECTION ;
CONST N10 ;
VAR TNOTES : TABLEAU[1..N] DE ENTIER ;
min, temp : Entier ;
i, j : Entier ;
DEBUT
POUR (i 1 à N) FAIRE
min i ;
POUR (j i+1 à N) FAIRE
SI (TNOTES[j] < TNOTES[min])
min j ;
FIN SI ;
FIN POUR ;
temp TNOTES[i] ;
TNOTES[i] TNOTES[min];
TNOTES[min] temp ;
FIN POUR ;
FIN.
Illustration :
Considérons le tableau suivant de 5 entiers :
5 3 1 4 2
1ère étape :
On considère la valeur 3
5 3 1 4 2
5 1 4 2
On décale le 5 car il est supérieur à 3
5 1 4 2
On réinsère la valeur 3
3 5 1 4 2
2ème étape :
On considère la valeur 1
3 5 1 4 2
3 5 4 2
On décale le 5 et 3 car ils sont supérieurs à 1
3 5 4 2
On réinsère la valeur 1
1 3 5 4 2
3ème étape :
On considère la valeur 4
1 3 5 4 2
1 3 5 2
1 3 5 2
On réinsère la valeur 4
1 3 4 5 2
4ème étape :
On considère la valeur 2
1 3 4 5 2
1 3 4 5
1 3 4 5
On réinsère la valeur 2
1 2 3 4 5
1 2 3 4 5
ALGORITHME TRI_INSERTION ;
CONST N10 ;
VAR TNOTES : TABLEAU[1..N] DE ENTIER ;
element: Entier ;
i, j : Entier ;
DEBUT
POUR (i 1 à N) FAIRE
element TNOTES[i] ;
j i-1 ;
TANT QUE (j >=0) ET (element< TNOTE[j]) FAIRE
TNOTE[j+1] TNOTE[j] ;
J j-1 ;
FIN TANT QUE ;
TNOTES[j+1] element;
FIN POUR ;
FIN.
TD N°8
Exercice d’application 1
Vous êtes chargé de la gestion des recettes d’un taxi compteur.
1) Ecrire un programme qui permet de saisir dans un tableau les recettes du taxi pendant les
30 jours du mois.
2) Ecrire un programme qui permet d’afficher les recettes du mois et le chiffre d’affaire
mensuel
3) Ecrire la suite du programme permettant de rechercher l’emplacement d’une valeur dans
le tableau de recettes.
Exercice d’application 2
Soit un tableau contenant les moyennes de 20 étudiants de la classe IDA rangées par ordre
croissant. On veut écrire un programme permettant de retrouver le rang d’un étudiant en fonction
de sa moyenne.
Utiliser la recherche par dichotomie.
Exercice d’application 3
Soit deux tableaux T1 et T2 contenant respectivement les moyennes dans les 16 matières et leurs
coefficients.
On se propose de créer un programme permettant de calculer les moyennes coefficientées dans
les 16 matières et de les insérer dans un troisième tableau T3.
Exercice d’application 4
Compléter le programme précédent afin de calculer la moyenne de l’étudiant.
Exercice d’application 5
Ecrire un programme permettant d’éditer le reçu de caisse du supermarché VENDTOUT. Le reçu
se présente comme suit :