Vous êtes sur la page 1sur 18

Chapitre3

Algorithmique et programmation

1. 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.…

2. 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.

3. 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.


4. 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.

5. 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.

Exemple :

Les étapes à suivre sont :

a) Le problème :

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

b) 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.

c) 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.
d) Organigramme correspondant

Début

Lire (T,X)

M (T+X)/2

Ecrire (M)

Fin
Figure 1:Organigramme de l’algorithme Moyenne

e) Le programme

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

6. 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 et doit être différent d’un mot clé.

6.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, 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. 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.
Var Nom, Prénom, Lieu_de_naissance : chaine ;
Sexe : caractère ;
Age : entier ;

6.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

6.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.
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)
6.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 prénom : ") (c’est l’ordinateur qui affiche cette phrase à l’écran)
L’utilisateur doit taper son prénom, à la suite de la phrase précédente.
L’utilisateur tape par exemple Mohamed
Lire(Prénom) ;
Dès que le programme rencontre une instruction Lire, l’exécution s’interrompt, attendant la
frappe d’une valeur au clavier (ici la valeur est Mohamed, elle sera stockée dans la variable
Prénom).
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 : Entier ;
Début
Ecrire( "Entrez un nombre :");
Lire (Nb) ;
carr ← Nb * Nb ;
Ecrire( "Son carré est : ", Carr) ;
Fin.
6.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
(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 d’une équation du second degré si elles
existent.
Algorithme EquationSecondOrdre ;
Var a, b, c, Δ, x1, x2 : Réel ;
Début
Ecrire (" taper trois nombres a,b,c ") ;
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=", x1) ;
Ecrire("x2=", x2) ;
Finsi ;
FinSi ;
Exercice : établir l’organigramme de cet algorithme.
Exercice :
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.

6.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 rappeller, 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é.

6.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 Sept Oct Nov Déc

Si nous appelons ce tableau mois, alors Mois[1]= "Janvier" et Mois [12]= "Décembre".
Janvier et Décembre sont de type Char.
On a coutume d'appeler le 1, 2,….., 12 les 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 est de parcourir le tableau dans la recherche de
l'élément le plus petit et le placer à sa position ;

Pour le premier élément, c’est la première position du tableau.

Ce processus se refait sur le reste du tableau où la position de début est augmentée de 1. A


chaque étape c’est le ième élément qui est rangé à sa position où i varie entre indice1 et indice2
– 1. Le dernier élément est bien classé à partir du moment où ceux qui lui précèdent ont été
bien placés.

N est supposé être déclaré comme une constante dans l’algorithme principal qui fait appel à la
procédure de Tri par sélection.

Algorithme Tri_selection

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


var i, j, imin, temp : entier ;

Début

Pour i de 1 à (N - 1) faire

imin <-- i

Pour j de (i + 1) à N faire

Si T[j] < T[imin]

Alors

imin <-- j

Fin si

Fin pour

Si imin <> i

Alors temp <-- T[i]

T [i] <-- T[imin]

T [imin] <-- temp

Fin si

Fin pour

Fin

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 5 eme ligne et la 4eme


colonne.

Exercice
Ecrire un algorithme qui calcule M1-M2, M1 et M2 étant deux matrices carrées de taille 3.
M1 - M2 = M3
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 SoustractionMat ;
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
Donc 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.
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

Vous aimerez peut-être aussi