Vous êtes sur la page 1sur 19

Chapitre3 (Partie1)

Algorithmique

1. Introduction
2. Qu’est ce qu’un algorithme ?
L’origine du mot algorithme vient de Khawarizm (El khawarizmi célèbre mathématicien
musulman, né à Khawarizm ville de l’ex-URSS).
Un algorithme est une suite d’instructions élémentaires à exécuter pour résoudre un problème
posé. C’est une procédure de calcul bien définie qui prend en entrée une ou plusieurs valeurs
et qui délivre en sortie un résultat.
Exemple :
 Algorithme d’Euclide
 Algorithme de tri
 Etc.…

3. Qu’est-ce qu’un organigramme ?


C’est une représentation graphique d’un algorithme avec des ellipses, des losanges, des
rectangles et des parallélogrammes. En réalité, aujourd’hui, cette représentation est quasiment
abandonnée, pour deux raisons. D’abord, parce que dès que l’algorithme commence à grossir
un peu, l’organigramme devient quasiment non pratique du tout, ensuite parce que cette
représentation favorise le glissement vers un certain type de programmation, dite non
structurée, que l’on tente au contraire d’éviter.

Symbole Rôle

Ellipse : utilisée pour marquer le début et la fin d’un


organigramme
Rectangle : marque les opérations d’affectation

Losange : utilisé pour marquer les tests (instruction


conditionnelle)
Parallélogramme : utilisé pour marquer les opérations
d’entrés et de sortie.

4. De l’algorithme vers le programme 

L’algorithmique exprime les instructions résolvant un problème donné indépendamment des


particularités de tel ou tel langage.
Donc un programme traduit l’algorithme dans un langage donné en respectant sa syntaxe.

5. Qu’est-ce qu’un langage ?

C’est un ensemble de mots et symboles utilisés pour exprimer des opérations, quel que soit
leur type.

6. Qu’est-ce qu’un compilateur ?

C’est un programme qui sert à traduire le code source (écrit par le programmeur dans un
langage évolué tels que C, Perl, Java etc..) en code objet, et à effectuer une analyse afin de
déceler d’éventuelles erreurs de syntaxe.

Généralement les étapes à suivre sont :

1. Le problème :

Soit à écrire l’algorithme qui permet de calculer la moyenne d’un étudiant de 1ere année ST
dans un module d’informatique.

2. Les étapes de résolution:


Donner T la note de TD sur 20
Donner X la note d’examen sur 20
Calculer M la moyenne,  La moyenne se calcule ainsi : (note de TD/20 + note d’examen/20)/2
Afficher la moyenne M.

3. L’algorithme :

Algorithme Moyenne ;

Var T, X, M : réel ; Partie déclaration

Début

Lire (T) ;
Lire (X) ;
M  (T+X)/2 ; Partie corps du programme
Ecrire ("La moyenne est :" M) ;
Fin.
4. Organigramme correspondant

Début

Lire (T,X)

M (T+X)/2

Ecrire (M)

Fin
Figure 1:Organigramme du programme Moyenne

5. Le programme
Le programme se fait en choisissant un langage de programmation approprié.

7. Structure générale d’un algorithme

L’ossature générale d’un algorithme est la suivante :

Algorithme :<Nom de l’algorithme> ;

<Partie Déclaration>

Début

<Corps de l’algorithme>

Fin.

Les mots en Gras sont des mots clé, on doit respecter leur syntaxe. Le nom de l’algorithme
(identifiant) ne doit pas commencer par un chiffre ou caractère spécial et doit être différent
d’un mot clé.

7.1. La partie déclaration

 Variables, constantes

Dans un programme informatique, on va avoir en permanence besoin de stocker


provisoirement des valeurs. Il peut s’agir de données issues du disque dur ou fournies par
l’utilisateur (frappées au clavier).
Il peut aussi s’agir de résultats obtenus par le programme, intermédiaires ou définitifs. Ces
données peuvent être de plusieurs types: des nombres, du texte, etc. Toujours est-il que dès
que l’on a besoin de stocker une information au cours d’un programme, on utilise une variable
ou une constante.
La constante garde une même valeur au cours de l’exécution du programme alors que la
variable proprement dite peut changer de valeur.
Exemple :
T, X, M sont des variables dans l’algorithme précédent.
Déclaration de variables et de constantes
La première chose à faire avant de pouvoir utiliser une constante ou une variable est de la
déclarer pour réserver un espace mémoire. Ceci se fait tout au début de l’algorithme, avant
même les instructions proprement dites.
Le nom d’une variable ou constante obéit à des impératifs changeant selon les langages.
Toutefois, une règle absolue est qu’il peut comporter des lettres et des chiffres, mais qu’il
exclut la plupart des signes de ponctuation, en particulier les espaces ( exception faite pour
l’underscore : le tiret du huit _ ). Un nom correct commence également impérativement par
une lettre. Quant au nombre maximal de signes pour un nom de variable, il dépend du langage
utilisé.
Exemple :
Const Pi=3.14 ; (Const est considéré comme un mot clé)
Var Delta : reel ; (Var est considéré comme un mot clé, c’est l’identifiant de la variable et
réel est son type)
Le type d’une variable peut être :
 Numérique (entier, réel)
 alphanumérique (caractère, chaine (ou string en anglais) suite de lettres, de chiffres ou
de caractères spéciaux)
 booléen etc.
Exemple :
Var Nom, Prénom, Lieu_de_naissance : chaine ;
Sexe : caractère ;
Age : entier ;
Marié : booléen ;
7.2. L’instruction d’affectation
Affecter une variable, c’est lui attribuer une valeur. On utilise généralement le symbole
«    ».
Exercice1 :
Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ?

Algorithme Test1 ;
Var A, B : Entier ;
Début
A ← 1  ;
B ← A + 3  ;
A ← 3  ;
Fin.
Solution1  :

La valeur des variables est :


A ← 1           A = 1           B = ?
B ← A + 3       A = 1           B = 4
A ← 3           A = 3          B = 4

Exercie2 :
Que vaut Δ dans l’algorithme suivant ?
Algorithme Test2 ;
Var A, B, C, Δ : Caractère  ;
Début
A ←1  ;
B ← 2  ;
C ← 1 ;
Δ ←B*B- 4*A*C
Fin.
Solution2
Δ=0
7.3. Expressions et opérateurs

Une expression est un ensemble de valeurs, reliées par des opérateurs, et équivalent à une
seule valeur.

Exemple : 123-45+844

Un opérateur est un signe qui relie deux valeurs, pour produire un résultat.

Opérateurs numériques :
Ce sont les opérations arithmétiques habituelles.
Exemple :

+ : addition
- : soustraction
* : multiplication
/ : Division
^ : Puissance, 45 au carré s’écrira donc 45 ^ 2
Mod: modulo (donne le reste de la division euclidienne)
Enfin, on a le droit d’utiliser les parenthèses (), avec les mêmes règles qu’en mathématiques.
La multiplication et la division ont « naturellement » priorité sur l’addition et la soustraction.
Les parenthèses ne sont ainsi utiles que pour modifier cette priorité naturelle.

Opérateur alphanumérique : &


Cet opérateur permet de concaténer, autrement dit de coller, deux chaînes de caractères.
Exemple :
Algorithme Test3 ;
Var A, B, C : Caractère ;
Début
A ← "VELO" ;
B ← "VTT" ;
C ← A & B ;
Fin.
La valeur de C est : « VELOVTT »
Opérateurs logiques (ou booléens) :
Il s’agit du ET, du OU, du NON.
Exercice :
Que produit l’algorithme suivant ?

Algorithme Test4 ;
Var  A, B, C : Caractère  ;
Début
A ← "423" ;
B ← "12" ;
C ← A & B ;
Fin.
Solution 4  :
C="42312" 
Opérateurs de comparaisons ;
= (égal),
< (strictement inferieur),
> (strictement supérieur),
<= (inferieur ou égal),
>= (strictement inférieur),
< > (différent)
7.4. Lecture et écriture

Il y a des instructions qui permettent à l’utilisateur de rentrer des valeurs au clavier pour
qu’elles soient utilisées par le programme. Cette opération est la lecture.
Dans l’autre sens, d’autres instructions permettent au programme de communiquer des
valeurs à l’utilisateur en les affichant à l’écran. Cette opération est l’écriture.
Remarque :
L’opération de lecture ou d’écriture c’est vis-à-vis de la machine et non de l’utilisateur.
Exemple :
Lire(A,X) ;
Ecrire(B,Y) ;
Ecriture de message :
Ecrire "Tapez votre nom : " (c’est l’ordinateur qui affiche cette phrase à l’écran)
Lire Benali (c’est l’utilisateur qui doit taper son nom, à la suite de la phrase précédente)
Des que le programme rencontre une instruction Lire, l’exécution s’interrompt, attendant la
frappe d’une valeur au clavier (ici Benali).
Exercice :
Ecrire un programme qui demande un nombre à l’utilisateur, puis qui calcule et  affiche le
carré de ce nombre.

Solution :
Algorithme Calcul ;
Var Nb, Carr : reel;
Début
Ecrire( "Entrez un nombre:");
Lire (Nb)  ;
carr ← Nb * Nb  ;
Ecrire( "Son carré est : ", Carr) ;
Fin.
7.5. Structure d’un test

Il y a deux formes possibles pour un test :


Si booléen Alors
Instructions ;
FinSi.

La deuxième forme est plus complexe :


Si booléen Alors
Instructions1 ;
Sinon
Instructions2 ;
FinSi.

Remarque :
Un booléen est une expression dont la valeur est VRAI ou FAUX.
Exemple1 :
Si test Alors instruction1 ;
Finsi ;
(Ici test est une variable de type booléen, elle prend la valeur vrai ou faux).
Exemple2 :
Soit à écrire l’algorithme qui donne les solutions si elles existent.
Algorithme Equation_Second_Ordre ;
Var a, b, c, Δ, x1, x2 : Réel ;
Début
Lire (a, b, c) ;
Δ b2-4ac ;
Si Δ< 0 Alors
Ecrire ("L’équation n’admet pas de solutions") ;
Sinon Si Δ= 0 Alors
Début
x1 -b/2a ;
Ecrire("L’équation admet une racine double x1=x2= " , x1) ;
Finsi ;
Sinon
Début
x1 (-b+√ Δ) /2a ;
x2 (-b-√ Δ) /2a ;
Ecrire(" L’équation admet deux racines distinctes x1 et x2") ;
Ecrire(x1) ;
Ecrire(x2) ;
Fin ;
FinSi ;
Exercice1 : établir l’organigramme de cet algorithme.
Exercice2 :
Ecrire un algorithme qui demande l’âge d’un enfant à l’utilisateur. Ensuite, il l’informe de sa
catégorie :
Les catégories sont :
 "Poussin" de 6 à 7 ans
 "Pupille" de 8 à 9 ans

 "Minime" de 10 à 11 ans

 "Cadet" après 12 ans

Solution :

Algorithme Catégorie ;

Var Age : Entier ;


Début
Ecrire( "Entrez l’âge de l’enfant : ") ;
Lire (Age) ;
Si Age >= 12 Alors
  Ecrire ("Catégorie Cadet") ;
SinonSi Age >= 10 Alors
  Ecrire( "Catégorie Minime") ;
SinonSi Age >= 8 Alors
  Ecrire( "Catégorie Pupille") ;
SinonSi Age >= 6 Alors
  Ecrire( "Catégorie Poussin") ;
Finsi ;
Fin.
On peut évidemment écrire cet algorithme de différentes façons.

7.6. Les Boucles 


Il arrive que dans certains problème on a besoin de réitérer un certain nombre d’instructions
tant qu’une condition est vérifiée, on appelle ce genre d’itération une boucle.
Pour réaliser une boucle on peut utiliser : tant que, Pour, etc.
Nous donnerons la syntaxe des deux cas.
 Les boucles avec tant que
TantQue booléen(ou condition) Faire
 …
  Instructions
 …
FinTantQue
Le principe est simple : le programme arrive sur la ligne du TantQue. Il examine alors la
valeur du booléen (qui, il faut le rappeler, peut être une variable booléenne ou, plus
fréquemment, une condition). Si cette valeur est VRAI, le programme exécute les instructions
qui suivent, jusqu’à ce qu’il rencontre la ligne FinTantQue. Il retourne ensuite sur la ligne du
TantQue, procède au même examen, et ainsi de suite. On sort de la boucle lorsque le booléen
prend la valeur FAUX.

Exercice :

Ecrire un algorithme qui demande un nombre de départ, et qui calcule sa factorielle.


NB : la factorielle de 7, notée 7 !, vaut 1 x 2 x 3 x 4 x 5 x 6 x 7

Algorithme Factorielle ;

Var N, i, F : Entier ;


Début
Ecrire ("Entrez un nombre : ") ;
Lire (N );
F ← 1 ;
i ← 2 ;
TantQue i<=N Faire
Début
F ← F * i ;
i ←i+1 ;
Fin ;
FinTantQue
Ecrire ( "La factorielle est : ", F) ;
Fin.
 Les boucles avec POUR

Algorithme Factorielle ;

Var N, i, F : Entier ;


Début
Ecrire ("Entrez un nombre : ") ;
Lire (N );
F ← 1 ;
Pour i allant de 2 jusqu’à N Pas de 1 Faire
  F ← F * i ;
FinPour ;
Ecrire ("La factorielle est : ", F) ;
Fin.
Les structures Pour sont employées dans les situations où l’on doit procéder à un traitement
systématique sur les éléments d’un ensemble dont le programmeur connaît d’avance la
quantité.

7.7. Structure de données Complexes


o Les Tableaux

Les tableaux permettent de mémoriser dans une même structure différente valeurs de même
type. Ils sont utiles pour représenter les listes, les vecteurs et les matrices, par exemple pour
représenter les mois d’une année, on a besoin d’espace contigu en mémoire qu’on appelle
vecteur ou tableau.
1 2 3 4 5 6 7 8 9 10 11 12
Janvier Février Mars Avril Mai Juin Juillet Aout Septembre Octobre Novembre Décembre

Si nous appelons ce tableau Mois, alors Mois[1]= "Janvier" et Mois [12]= "Décembre".
Janvier et Décembre sont de type caractere.
On a coutume d'appeler le 1, 2,….., 12 des indices, ils indiquent l’emplacement de la donnée
dans le tableau. 12 est aussi la taille du tableau, qui est ici de dimension 1.
Chaque fois que l’on doit désigner un élément du tableau, on fait figurer le nom du tableau,
suivi de l’indice de l’élément, entre crochets, on l’appelle une variable indicée.
On déclare un tableau de la manière suivante :
Var <Nom du tableau> : Tableau [1...Taille] de <Type>;
Exemple1 :
Algorithme LectureTab ;
Var Mois : Tableau [1...12] de Char ;
I : Entier ;
I 1 ;
Début
Tant que I<= 12 Faire
Début
Lire (Mois [I]) ;
I I+1 ;
Fin ;
FinTantQue ;
Fin.

Exemple2 :
Algorithme EcritureTab ;
Var Mois : Tableau [1...12] de Char ;
I : Entier ;
I 1 ;
Début
Tant que I<= 12 Faire
Début
Ecrire (Mois [I]) ;
I I+1 ;
Fin ;
FinTantQue ;
Fin.
Le tri par sélection

Le principe de l'algorithme de tri par sélection consiste à fixer le premier élément du vecteur
comme minimum, puis le comparer aux autres éléments du tableau, s’il existe un élément
inferieur au minimum fixé alors on fait la permutation, on recommence jusqu’à arriver au
dernier élément du tableau.

Algorithme Tri_selection

Var T : tableau [1.. 20] de entier ;

i, j, Temp : entier ;

Début

Pour i allant de 1 jusqu’à 20 Pas de 1 Faire

Lire ( T[i]) ; (* cette partie consiste à remplir le tableau*)

Finpour ;

Pour i allant de 1 jusqu’à 19 Pas de 1 Faire

         Pour j allant de (i + 1) jusqu’à 20 Pas de 1 Faire

                 Si T[j] < T[i]      Alors

Début

Temp           T[j] ;

T[j] T[i] ;

T[i] Temp ;

Fin ;

      Fin si ;

         Finpour ;

Finpour ;

Fin.

Il existe d’autres algorithmes de tri, comme le tri par bulle, le tri par comptage etc.
o Les Matrices

Les matrices sont des tableaux à deux dimensions (les tableaux à plus de 2 dimensions sont
rares d’utilisation), Prenons le cas de la modélisation d’un jeu d’échec, et du déplacement des
pions sur un échiquier. L’informatique nous offre la possibilité de déclarer des tableaux dans
lesquels les valeurs ne sont pas repérées par une seule, mais par deux coordonnées.

Un tel tableau se déclare ainsi :


MAT : Tableau [1..8, 1..9] de Entier ;

1 2 3 4 5 6 7 8 9

1 56 2 22 78 4 12 32 7 1
2 14 5 32 7 33 40 91 66 2
3 28 98 31 74 20 9 10 57 6
4 33 65 0 86 66 90 77 1 9
5 6 8 22 36 91 28 37 97 1
6 0 1 5 9 6 55 4 7 4
7 0 1 5 9 52 78 5 4 55
8 0 1 5 97 1 5 9 33 3

On écrira MAT [5,4] = 36, le premier indice (5) indique la 5eme ligne et le deuxième (4)
indique la 4eme colonne.

(36) est le contenu de la cellule correspondant à l’intersection de la 5eme ligne et la 4eme


colonne.

Exercice
Ecrire un algorithme qui calcule la différence de deux matrices (MAT1 - MAT2), MAT1 et
MAT2 étant deux matrices carrées de taille 3.
MAT1 - MAT2 = MAT3
12 5 9 4 5 8 8 0 1
3 4 1 5 6 3 -2 -2 -2
0 7 1 1 5 6 -1 2 -5

Algorithme DifferenceMat ;
Var MAT1, MAT2, MAT3 : Tableau [1..3, 1..3] de Entier ;
I, J : Entier ;
Pour I allant de 1 jusqu’à 3 Pas de 1 Faire
Début
Pour J allant de 1 jusqu’à 3 Pas de 1 Faire
Début
MAT3 [I,J] MAT1[I, J]- MAT2[I, J] ;
Fin ;
FinPour ;
Fin ;
FinPour ;
Fin.

o Les enregistrements

Un enregistrement est un ensemble d’éléments regroupant des informations sur une entité ou
une personne, pouvant être de type différent mais référencés par la même variable.
Imaginons que l’on veuille écrire un programme gérant un carnet d’adresses. Les informations
s’y trouvant ne sont pas de même type. Nous pouvons utiliser un enregistrement. Nous avons
le nom, le prénom, le numéro de téléphone et l’email. Les enregistrements sont stockés dans
des fichiers.
Déclaration d’un enregistrement :
Type < Nom variable > = Enregistrement
Info1 :< type> ;
Info2 :< type> ;
.
.
InfoN :< type> ;

Exemple :
Prenons toujours le cas classique, du carnet d'adresses. Le fichier est destiné à mémoriser les
coordonnées d'un certain nombre de personnes. Pour chacune, il faudra noter le nom, le
prénom, le numéro de téléphone et l'email. Dans ce cas, il peut paraître plus simple de stocker
une personne par ligne du fichier (par enregistrement). Autrement dit, quand on prendra une
ligne, on sera sûr qu'elle contient les informations concernant une personne, et uniquement
cela.
Type Personne = Enregistrement
Nom : chaine ;
Prénom : chaine ;
Mobile : entier ;
Email : chaine ;
Fin ;

Nom Prénom mobile Email


BenAli Mohamed 213666666666 Benali@gmail.com

Lecture d’un enregistrement :


Algorithme Lect_Enregistrement;
Type Personne = Enregistrement
Nom : chaine ;
Prénom : chaine ;
Mobile : entier ;
Email : chaine ;
Fin ;
Var Contact: Tableau [1..N] de Personne;
i : entier;
Début
Pour i allant de 1 jusqu’à N Faire
Lire (Contact[i].Nom, Contact[i].Prénom, Contact[i].Mobile, Contact[i].email) ;
FinPour ;
Fin.
Exercice :Ecrire un algorithme qui permet à l’utilisateur de saisir au clavier un nouvel
individu qui sera ajouté à ce carnet d’adresses.

8. Références et bibliographie
 Données et Algorithmique : Patrick Trau, entre autres nombreux
cours, propose cet exposé riche et pédagogique. Peut être un peu difficile
d'accès pour les vrais débutants, surtout s'ils ne sont pas matheux.

 Algorithmique et langage Pascal : beaucoup de choses dans ce site,


dont certaines techniques de programmation un peu évoluées (pointeurs). A
signaler un intéressant historique de l'algorithmique.

 Algorithmique et programmation : un site riche lié aux cours du CNAM,


avec de nombreux exemples d'algorithmes. Plutôt orienté sur le
perfectionnement que sur les débutants.

 Cours d’algorithmique http://achraf.exen.fr/algo/

 Algorithmique et programmation C, Mc Belaid, Ed. Pages bleues 2006.

www.pagesbleues-rims.com