Vous êtes sur la page 1sur 8

Chapitre 2 Introduction à l’algorithmique

1 Notions d’algorithme et de programme


1.1 Définitions
□ Un algorithme représente l'enchaînement des actions (instructions) nécessaires pour résoudre un
problème donné. Un algorithme s'écrit le plus souvent en pseudo-langage de programmation (appelé
langage algorithmique).
□ Un algorithme n'est donc pas exécutable directement par aucune machine. Mais il a l'avantage
d'être traduit facilement dans tous les langages de programmation.
□ Un programme est un assemblage et un enchaînement d’instructions élémentaires écrit dans un
langage de programmation, et exécuté par un ordinateur afin de traiter les données d’un problème et
renvoyer un ou plusieurs résultats.
□ Trouver une solution informatique à un problème revient à trouver un ensemble d’actions permettant d’aboutir
aux résultats demandés (objectifs). Du problème à la solution automatisée (programme informatique), on passe
généralement par les étapes suivantes et qui peuvent être réparties en deux phases :

Phase I : Analyse et proposition de solution au problème


1 ère étape : Analyse du problème
Il s’agit ici de comprendre le problème et ce qui est demandé. En particulier, il s’agit de déterminer les données en
entrée et les résultats demandés. De plus, il faudra trouver les traitements nécessaires permettant de manipuler les
données en entrée pour obtenir les résultats souhaités.
2 ème étape : Elaboration de l’algorithme
Durant cette étape, la solution au problème est exprimée sous forme d’un algorithme. En utilisant un langage
algorithmique formel, un algorithme est une succession logique d’instructions (actions) pour passer des données aux
résultats (objectifs).
Une forme graphique est notamment utilisée qu’on appelle organigramme.
3 ème étape : Tests à la main (sans machine)
Il s’agit ici de dérouler manuellement l’algorithme afin de le vérifier. C'est-à-dire suivre les étapes de l’algorithme
pour vérifier s’il répond (aboutit) aux besoins exprimés en utilisant un jeu de tests.

Phase II : Implémentation (mise en œuvre)


1 ère étape : programmation
Une fois l’algorithme mis au point, il faut le traduire dans un langage de programmation donné. Exemples : pascal,
fortran, C, basic, c++, java, caml, python, …
En effet, le même algorithme peut être traduit dans plusieurs langages de programmation. A la fin de cette étape,
on obtient un programme source qui correspond à l’algorithme établi lors de la phase précédente.
2 ème étape : compilation
Cette étape est automatique et est réalisée grâce à un compilateur. Celui-ci est un programme qui traduit un
programme source en un programme exécutable par la machine.
3 ème étape : tests sur machine
Une fois le programme exécutable généré après la compilation, il faudra comparer les résultats rendus par ce
programme par rapport aux résultats obtenus manuellement (durant la 3 ème étape de la phase I). Ceci permet de
constater des erreurs et des incohérences dans les résultats obtenus qui pourraient être dues aux erreurs d’analyse ou de
programmation. Dans ce cas, il faudra faire des corrections jusqu’à ce que les résultats soient satisfaisants.
Ce qu’il faut signaler, c’est que l’automatisation d’un traitement est un processus itératif (répétitif) car il y aura
1
souvent des erreurs de programmation ou d’analyse du problème qu’il faudra corriger dans l’une des étapes précédentes.
Par exemple, un résultat final incohérent pourrait être causé par une erreur de programmation même si l’algorithme est
entièrement correct ou alors une erreur de conception de la solution.
4 ème étape : Rédaction d’une documentation pour l’utilisateur
La documentation servira comme mode d’emploi du programme final (testé et validé). Elle est nécessaire quand le
programme est difficile à manipuler (quand il offre beaucoup de fonctionnalités).

1.2 Propriétés d’un algorithme


Un algorithme doit être :
a/ Clair : pour éviter toute ambiguïté dans les exécutions d’opérations.
b/ Fini : l’algorithme doit être fini c'est-à-dire toutes les actions doivent être exécutées en un temps fini.
c/ Efficace: l’algorithme doit assurer (mener) le bon résultat (objectif) en utilisant le minimum de
ressources (exp : minimum de variables pour un espace mémoire occupé minimal).
d/ Général : l’algorithme ne doit pas être valable uniquement pour un cas particulier, il doit répondre à
tous les cas qui peuvent se présenter pour un type de problème donné.

2 Syntaxe générale de l’algorithme


Algorithme <nom algo> ; {en-tête de l’algorithme}
< partie déclarations> ;
Debut
<partie instructions> ;
Fin.

Remarque : notion d’identificateur


Un identificateur est un nom qu’on donne à un objet pour le désigner (référencer). Il doit être composé
d’une suite de lettres et de chiffres et il doit toujours commencer par une lettre alphabétique. Les
caractères spéciaux ne sont pas autorisés excepté le caractère « souligné ». Certains mots sont prédéfinis
dans le langage algorithmique (mots réservés) et ils ne peuvent être redéfinis par l’utilisateur.
Exemples d’identificateurs non permis :
moy g , (car il contient un espace , moyg : juste)
1note ( faux car il commence par un chiffre , donc note1 , n1ote : justes)
Algorithme, debut, fin sont quelques uns des mots réservés du langage, ils ne peuvent être des identificateurs.

2.1 En-tête d’un algorithme


Est composé du mot réservé algorithme suivi du nom de l’algorithme qui doit être un identificateur.

2.2 Partie déclarations :

A/ Déclaration des constantes :


Une constante est une donnée dont on décide de garder la valeur inchangée tout le long d’un algorithme.
La partie déclaration des constantes commence par le mot clé const.

Syntaxe : const <identificateur constante > = <valeur constante> ;

Exemples : const pi = 3,14 ;


g = 9,80 ;

Remarque : Les types standards

2
En algorithmique, on distingue 5 types standards de donnée principaux :

□ Entier représente les entiers (les nombres sans virgule) ;


□ Reel représente les réels (les nombres à virgule et sans virgule) ;
□ Booleen représente les booléens (qui n'ont que deux valeurs possibles: soit VRAI, soit FAUX).
□ caractere représente les caractères (lettres, chiffres, ponctuation, code des opérations, espace, retour
chariot, et plus généralement toutes les touches que l'on peut trouver sur un clavier)
□ chaine représente les chaînes de caractères (suites de caractères) ;

B/ Déclaration des variables :


Une variable peut être représentée par une case mémoire, qui contient la valeur d'une donnée. Chaque
variable possède un nom unique appelé identificateur par lequel on peut accéder à son contenu.
La valeur d'une variable peut varier au cours du programme. L'ancienne valeur est tout simplement
écrasée et remplacée par la nouvelle.
La partie déclaration des variables commence par le mot clé var.

Syntaxe : var <identificateur variable > : <type variable> ;


Exemples :
Var neco, nalgo , nalgebr : reel ;
Moy : reel ;
Admis : booleen ;
Remarque 1 : Il est possible de rassembler plusieurs variables d’un même type à condition de les séparer par
des virgules.
Remarque 2 : Si la partie déclarations contient des constantes, des types non standard et des variables,
l’algorithme doit les déclarer selon cet ordre.

2.3 Les instructions élémentaires


Les instructions élémentaires les plus courantes sont :
□ L'affectation : donner une nouvelle valeur à une variable ;
□ La saisie à travers le clavier
□ L'affichage sur l'écran ;

A/ L’affectation
L’affectation consiste à placer une valeur dans une variable (ce qui revient à changer le contenu de cette
variable).
Syntaxe :
<Identificateur variable>  <expression> (le symbole  se lit « reçoit »)
Où <expression> peut être :
□ Soit une autre variable ou constante ;
□ Soit une valeur littérale ; {exemple nalgo  15}
□ Soit une combinaison de variables, de valeurs littérales et d'opérateurs
Exemples :
A3;
BA+5;
AB;
3
B/ La saisie (lecture – entrée des données)
L’instruction de saisie permet de communiquer des données au programme. Cette instruction assigne une
valeur entrée au clavier dans une variable. Tant que l'utilisateur n'entre rien au clavier, le déroulement du
programme est stoppé.

Syntaxe lire(variable1 , variable2, …) ;

Exemples :
Lire (x); Cette instruction va lire la valeur saisie au clavier et l'affecte à la variable x.
Lire(x,y); ou lire (x) ; lire (y) ; Cette instruction lit la première valeur saisie au
clavier et l'affecte à x, puis lit la deuxième valeur saisie et l'affecte à y.
Utilité de la saisie:
Si on utilise une instruction de saisie, le choix de la valeur se fait en cours d’exécution du programme. On
peut donc utiliser le programme autant de fois que l’on veut avec des données différentes sans avoir à
modifier le programme.

C/ L’affichage sur écran


La plupart des programmes nécessitent de communiquer à l’utilisateur un certain nombre de résultats via
l’écran. Pour cela, ils utilisent des instructions d'affichage.
L’instruction d’écriture est couramment utilisée dans deux situations :
- Affichage de messages : Avant la lecture des données et l’affichage des résultats.
- Affichage des résultats
Syntaxe ecrire(expression1, expression2, …) ;
Où expression peut être un commentaire (message), une constante, une variable ou une combinaison de
ces derniers. Un message est une chaîne de caractères qui est toujours délimitée par deux apostrophes.
Exemples :
Ecrire (‘Veuillez saisir la note d’’algo1’) ; {l’apostrophe est doublée si elle fait partie du message}
Lire (nalgo1) ;
Ecrire (‘la moyenne est ‘, moy) ;

Remarque : Opérateurs et expressions


Une expression représente une succession de calculs. Une expression est formée à partir des variables, des
constantes ou d’une combinaison des deux à l’aide des opérateurs. Un opérateur spécifie l’opération à
faire.
Il existe plusieurs types d’opérateurs : arithmétiques, relationnels et logiques.

*) Les opérateurs arithmétiques


Ce sont les quatre opérations connues : addition (+), soustraction (-), multiplication ( * ) , division ( / ) .
A ceux la, on ajoute deux opérateurs : DIV (division entière) et MOD (modulo = reste de la division
entière)
Exemples : 7 / 2 = 3,5 7 Div 2 = 3 7 Mod 2 = 1

4
Le type du résultat d’une expression arithmétique est déduit de l’expression elle-même selon le tableau
suivant :
Opérateurs Types opérandes Type résultat
+-* Entier Entier
Reel reel
/ Entier Reel
Reel Reel
DIV (div. Entière) Entier Entier
MOD (reste div. Entière) Entier entier
Remarque :
Quand il y a mélange de reel et entier c’est le type reel qui l’emporte
Exemples : entier + reel = reel 5 + 3,0 = 8,0
Entier * reel = reel 5 * 3,0 = 15,0

*) Les opérateurs logiques :


Conjonction (ET), OU (disjonction) et NON (négation)
Rappelons ceux-ci par leurs tables de vérités :

A, B sont des variables booléennes

Le type du résultat d’une expression logique est booléen.


Exemples
A = vrai B = faux C = vrai
1/ A and B or C donne comme résultat vrai
2/ (A and B ) or ( A and C ) vrai

*) Les opérateurs relationnels (de comparaison):


= égalité <> différence <= >= inégalités larges < > inégalités strictes

Le résultat d’une expression de comparaison est un booléen Vrai ou Faux, répondant à la question si la
comparaison est vraie ou fausse.
Exemples
A = 20 B = 10 C = 8
1/ ( A <= B) ou ( C > B ) faux 2/ ( A > B ) et ( C <> B) vrai

Règles d’évaluation d’une expression : Le calcul de la valeur d’une expression comportant plus d’un
opérateur dépend du sens que l’on donne à cette expression. Deux règles d’évaluation sont utilisées :
priorité des opérateurs ET ordre d’évaluation de Gauche à Droite pour les opérateurs de même priorité.

5
La priorité décroissante des opérateurs est:

Non
* / div mod et
+ - ou
= <> < > <= >=
Remarque :

L’utilisation des parenthèses dans une expression permet d’altérer les règles de priorité. Les sous
expressions parenthésées sont évaluées en priorité.

3 Les structures alternatives


Un algorithme n'est pas uniquement une suite linéaire d'ordres. Les traitements conditionnels permettent
d'exécuter des instructions différentes en fonction de certaines conditions.
On a quatre types d’instructions conditionnelles
□ Le test simple (tronqué) : si... alors
□ Le test complet : si... alors... sinon
□ Le test imbriqué
□ Instruction de sélection multiple : Cas … de

A/ Test complet
Syntaxe : si <cond> alors {Insts 1}
sinon {Insts 2} ;

où {Insts x} x= 1,2 :ensemble (bloc, séquence) d’instructions qui est délimité par debut et fin si elle
contient plus d’une instruction.
Fonctionnement :
La condition booléenne <cond> est tout d'abord évaluée,
□ si sa valeur est vrai, les instructions de {Insts 1} sont exécutées ({Insts 2} n’est pas exécuté),
□ si sa valeur est faux, les instructions de {Insts 2} sont exécutées ({Insts 1} n’est pas exécuté),
□ ensuite, s'il y a des instructions après {Insts 2}, elles sont exécutées.

6
B/ Test simple

Syntaxe : si <cond> alors {Insts } ;

où {Insts} est un ensemble (bloc, séquence) d’instructions qui est délimité par debut et fin si elle contient
plus d’une instruction.
Fonctionnement :
la condition booléenne <cond> est tout d'abord évaluée,
□ si sa valeur est vrai, les instructions de {Insts} sont exécutées ,
□ si sa valeur est faux, les instructions de {Insts } ne sont pas exécutées ,
□ ensuite, s'il y a des instructions après {Insts }, elles sont exécutées.

Remarque : La condition <cond> peut être


 simple (comparaison composée de 3 elts : val1 op. relationnel val2 exemple : n>0
a+b = 5*y -2
 composée : plusieurs conditions simples reliées par des opérateurs logiques
exp : (a>20) et (a < 25)
 une variable booléenne

C/ Test imbriqué lorsque plus de 2 alternants sont possibles

Si <cond 1> alors {Insts1}


Sinon si <cond 2> alors {Insts 2}
Sinon si <cond 3> alors {Insts3}
Sinon si <cond 4> alors {Insts 4}
.
.
.
Sinon si <cond n > alors {Insts n}
Sinon {Insts n+1} ;
D/ Instruction de sélection multiple ( Cas …de)

7
Cette instruction remplace, dans certains cas, plusieurs tests imbriqués. Il s’agit de sélectionner une
instruction parmi plusieurs.

Syntaxe : Cas <expression> de <expression> appelée aussi sélecteur


<domaine 1> : {insts 1} ;
<domaine 2> : {insts 2} ;
.
.
.
<domaine n> : {insts n} ;
[Sinon {insts n+1} ;] []
facultatif fin ;
Où {Insts x} est un ensemble d’instructions qui est délimité par debut et fin s’il contient plus d’une
instruction.
<expression> peut être de type entier, caractère, booléen ou énuméré mais pas reel ni chaine de caractères.
<domaine x> représente une liste de constantes (séparées par des virgules) ou un intervalle (val1..val2)
de même type que <expression>.
Fonctionnement
Suivant la valeur de <expression> exécuter :
{insts 1} si valeur de <expression> appartient au <domaine 1>
{insts 2} si valeur de <expression> appartient au <domaine 2>
{insts n} si valeur de <expression> appartient au <domaine n>
Si la valeur de <expression> ne correspond à aucun des domaines <domaine x> et si l’option sinon est
mentionnée alors exécuter {insts n+1} sinon aucune instruction n’est exécutée.

Vous aimerez peut-être aussi