Vous êtes sur la page 1sur 14

Section A : Adami_Jalil

Chapitre III : Les Algorithmes

Le terme algorithme vient d’Al Khawarizmi, mathématicien arabe du IXe siècle. Le livre
d’Al Khawarizmi constitue la base de la notation décimale moderne.
Au départ, le mot “algorithme” désignait les règles nécessaires pour effectuer des calculs
arithmétiques en utilisant la notation décimale. Le terme algorithme apparaît au XVIIIe siècle.

Un algorithme comme présenté dans le chapitre précédent est :

· Ensemble de règles opératoires dont l’application permet de résoudre un problème énoncé


au moyen d’un nombre fini d’opérations.

· Suite d’instructions, qui une fois exécutée correctement, conduit à un résultat donné.

III-1 Analyse d’un problème :

La résolution d’un problème donnée doit passer par plusieurs étapes, l’étape la plus importante
est l’analyse du problème, cette étape consiste à :
* Définir le problème : lire et comprendre l’énoncé du problème
* Définir les données et les variables : cette étape consiste à définir les variables en entrée et
en sortie du problème.
* Définir les structures de données à utiliser.
* Trouver une méthode de résolution adéquate
* Choisir le langage de programmation pour l’implémentation.

III-2 Structure générale d’un algorithme :


III-2.1 Langage de Définition algorithme LDA :

Un LDA utilise un ensemble de mots-clés et de structure permettant de décrire de manière


complète, claire, l’ensemble des opérations à exécuter sur des données pour obtenir des résultats ;
on n’hésitera donc pas à agrémenter un LDA de nombreux commentaires. L’avantage d’un tel
langage est de pouvoir être facilement transcrit dans un langage de programmation.

1
Dans un Langage de Définition Algorithmique certains mots sont réservés pour un usage
bien défini, on les nomme les mots clés. Ce sont les mots que le langage utilise pour son
fonctionnement. Un mot clé ne peut pas être déclaré comme identificateur. Ils ne peuvent être
utilisés comme variables.

les mots clés commenceront toujours par une majuscule. Ceux qui nous permettent de définir la
structure :

- Algorithme : permet de définir ou de donner le nom à l’algorithme.

- Début : marque le commencement de l’algorithme.

- Fin Algorithme : marque la fin de l’algorithme

Le schéma ci-dessous montre la structure générale d’un algorithme :

· L’entête : Cette partie permet tout simplement de donner un nom à notre algorithme. Ce
nom n’influence en rien le bon déroulement de l’algorithme. En générale il faut donner
des noms parlants à nos algorithmes, ceci pour permettre au lecteur d’avoir une idée de ce
que fera l’algorithme qu’il lira.

2
· les déclarations : c’est une liste exhaustive des objets, grandeurs utilisés et manipulés
dans le corps de l’algorithme. Cette liste est placée en début d’algorithme.
· le corps : dans cette partie de l’algorithme sont placées les tâches (instructions
opérations) à exécuter par notre algorithme.

Tous les mots clés commencent par une lettre majuscule.

III-3 Objets d’un algorithme :


III-3.1 les identificateurs (mots clé) :
Les identificateurs sont des mots qui servent à désigner, à nommer et à identifié les entités, les
objets, les actions, les procédures et les fonctions manipulé dans un algorithme ou un programme.

III-3.2 les commentaires :


Dans un algorithme, pour éclaircir certains passages, l’utilisateur (Le programmeur) peut y
« glisser » des commentaires. Les commentaires débutent et se termine par le symbole spéciale %

Exemple : % Ceci est un commentaire%

III-3-3 les constantes :


Ce sont des identificateurs qui gardent la valeur qu’on leur a attribué durant tout l’algorithme.
Leur valeur ne peut être modifiée. Une constante se déclare de la manière suivante :

Const identificateur = valeur ou expression.

Exemple Const pi=3.14

III-3-4 les variables :


Une variable est une zone mémoire où l’on peut stocker des informations identifiées par
l’identificateur. Elle peut être modifiée dans le corps de l’algorithme. Une variable est déclarée
via l’instruction suivante :

Var identificateur : type

3
Exemple : Var x :integer (entier)

V-3-5 les types :


Voici un tableau résumant tous les types :

Plage de valeurs acceptées


Type de données Signification Taille (en octet)
(domaine de définition)
Char Caractère 1 -128 à 127
Unsigned char Caractère non signé 1 0 à 255
Short int Entier court 2 -32 768 à 32 757
Unsigned short int Entier court non signé 2 0 à 65 535
2 (processeur 16bits) -32 768 à 32 767
Int Entier
4 (processeur 32 bits) -2 147 483 à 2 147 483 647
2(processeur 16bits) 0 à 65 535
Unsigned int Entier non signé
4 (processeur 32 bits) 0 à 4 294 967 295
Long int Entier long 4 -2 147 483 648 à 2 147 483 647
Unsigned long int Entier long non signé 4 0 à 4 294 967 295
Float Flottant (réel) 4 -3.4*10 à 3.4*10
Double Flottant double 8 -1.7 *10 à 1.7*10
Long Double Flottant double long 10 -3.4*10 à 3.4*10
Prend deux valeurs : 'true' et
'false' mais une conversion
Meme taille que le implicite (valant 0 ou 1) est faite
Bool Booléen type int, parfoins 1 sur par le compilateur lorsque l'on
quelques compilateurs affecte un entier (en réalité toute
autre valeur que 0 est considérée
comme égale à True).

III-4 Opérateurs :
V-4-1 Opérateurs arithmétiques :
Opérateurs Signification
+ Addition
- Soustraction
* Multiplication
/ Division
Div Division entière
Mod ou Modulo Modulo (reste de la division entière)

4
III-4-2 Opérateurs logiques et binaires :
Opérateurs Signification
Pas Négation
Et Et logique
Ou Ou logique
Ou Exclusif Ou exclusif logique

Les opérandes associés à ces opérateurs peuvent être des entiers (on parle alors d’opérateurs
binaires) ou des booléens (on parle d’opérateurs logiques)

III-4-3 Opérateurs de chaînes de caractères

Opérateurs Signification
+ Concaténation de deux chaînes de caractères

Pour concaténer deux chaînes de caractères, nous utilisons l’opérateur « «+ ». Le résultat est
de type chaîne.

III-4-4 Opérateurs de chaînes de caractère :


Opérateurs Signification
= égale
<> Différent de
< Inférieur à
> Supérieur à
<= Inferieur ou égale à
>= Supérieur ou égale à

III-5 Les instructions simples :


Un algorithme se compose d’un certain nombre d’instructions. Ces dernières sont classées par
catégorie. Nous étudions tout d’abord les instructions standards traitant l’information :
L’assignation, la lecture et l’écriture. Ensuite, celles définissant l’ordre d’exécution d’un
programme : la séquence, le choix et la boucle. Nous terminerons par les sous programmes
(fonctions et procédures)

5
III-5-1 l’assignation :
L’assignation est une instruction qui permet d’attribuer une valeur à une variable ou à un
identificateur de fonction afin de renvoyer le résultat. Cette valeur retournée, doit etre du même
type que la variable. La syntaxe suivante :

VAR identificateur = <expression>

VAR identificateur := <expression>

III-5-2 les instructions d’Entrée/Sortie


L’instruction d’entrée LIRE : offre à l’utilisateur la possibilité d’entrer plusieurs valeurs
(données) à des variables suivant la syntaxe ci-dessous :

Lire x ;

L’instruction de sortie : affiche les données et reste sur la même ligne, sa syntaxe est :

Ecrire x ;
Ecrire ‘’la valeur de x est ‘’, x ;

Exemple
Algorithme Moyenne ;
Var
x, y:entier ;
moy : réel ;
Début
Ecrire ‘’donner la valeur de la 1ere note ‘’ ;
Lire x ;
Ecrire ‘’donner la valeur de la 2eme note ‘’ ;
Lire y ;
Moy=(x+y)/2 ;
Ecrire ‘’la moyenne des deux notes est ’’, moy ;
Fin.

III-6 Les structures de contrôle (les tests) :


La structure de contrôle conditionnelle permet à un programme de modifier son traitement en
fonction d’une condition. Il existe trois formes d’instructions conditionnelles :

6
III-6-1 La structure de contrôle simple :

Une structure de contrôle conditionnelle est dite à dorme alternative lorsque le traitement dépend
d’une condition à deux états :

Si condition alors (si condition vérifiée) instruction


Sinon (la condition n’est pas vérifiée) instruction
Finsi

Une structure de contrôle conditionnelle est dite à forme alternative lorsque le traitement
dépend d’une condition à deux état : si la condition est évaluée à vrai le premier traitement est
exécuté sinon si la condition est évaluée à faux le second traitement est executé.

III-6-2 La structure de contrôle conditionnelle généralisée :


Une structure de contrôle conditionnelle est dites généralisée lorsqu’elle permet de résoudre
des problèmes comportant plus de deux traitements en fonction des conditions. L’exécution d’un
traitement entraine automatiquement la non exécution des autres traitements.

Si condition alors traitement1


sinon si condition 2 alors traitement2
sinon si condition3 alors traitement 3

…………
Finsi

Remarque :

-Il est préférable de mettre les évènements les plus probables en premier lieu.
-Chaque traitement peut comporter une ou plusieurs instructions.

III-6-2 La structure de contrôle conditionnelle à choix :


Une structure de contrôle conditionnelle est dites à choix lorsque le traitement dépend de la
valeur que prendra le sélecteur, cette valeur doit être de type scalaire (entier ou caractère)

Selon sélecteur faire


Valeur 1 : action 1
Valeur 2 : action 2
………
Sinon action N
finselon

7
III-7 Les boucles :
La nécessité d’exécuter certaines instructions plusieurs fois à la suite s’impose très souvent
lors de l’écriture d’un algorithme. Imaginez par exemple un algorithme qui affiche les 100
premiers nombre entiers naturels non nuls. Dans ce cas, il faut écrire 100 instructions de type
écrire (écrire(1), écrire(2),…, écrire(100)). Les instructions répétitives est un moyen pour éviter
de séquences d’instructions identiques.

III-7-1 La boucle TANTQUE


Elle indique qu’une instruction, ou un groupe d’instructions, doit être exécutée répétitivement
tant qu’une certaine condition évaluée au préalable vraie. Sa syntaxe est la suivante :

Tantque <Condition> Faire


<Groupe d’instructions>
Fait

La condition <Condition> est évaluée à chaque itération. Si elle est fausse, le groupe
d’instruction ne sera pas exécuté. Il faut donc que la partie <groupe d’instruction> soit capable de
modifier les paramètres intervenant dans la condition afin de sortir de la boucle.

Exemple
Considérons l’algorithme suivant ci-dessous qui affiche les 100 premiers nombres entiers naturels
non nuls.

Algorithme algo1 ;
i : entier ;
Début
Faire
Ecrire(i) ;
i :=i+1 ;
fait;
fin.

III-7-2 La boucle POUR :

Elle indique qu’une instruction ou un groupe d’instructions doit être exécuté répétitivement
pendant qu’une variable progresse pas à pas entre deux bornes calculées au préalable. Sa syntaxe
est la suivante :

Pour <variable de contrôle> := <valeurs initiale> haut <valeur fianle>


Faire

8
<Groupe d’instructions>
Fait ;

Ou

Pour <variable de contrôle> :=<valeurs initiale> bas <valeur finale>


Faire
<Groupe d’instruction>
Fait ;

Les valeurs initiales et finales ne sont évaluées qu’une seule fois lorsqu’on rencontre
l’instruction pour ; elles doivent être du même type scalaire (entiers ou caractère) que la variable
de contrôle Si la valeur initiale est supérieure dans le cas de haut (ou inférieure dans le cas de
bas) à la valeur finale, le groupe d'instructions n'est pas exécutée et on passe à l'instruction qui
suit le fait (s'il y en a). La variable de contrôle prend successivement les valeurs croissantes dans
le cas de haut (décroissantes dans le cas de bas) dans son type. A la sortie normale d'une boucle
pour, la valeur de la variable de contrôle est indéfinie.

Exemple:
Considérons l'algorithme ci-dessous qui affiche les 100 premiers nombres entiers naturels non
nuls.

Algorithme algo2 ;
i : entier ;
Début

Pour i:=1 haut 100


faire
Ecrire(i) ;
fait;
fin.

On remarque qu’on peut remplacer une boucle pour par une boucle tantque.

III-7-2 La boucle Répéter :


Elle a la syntaxe suivante :

Répéter <Groupe d’instructions> jusqu’à <Condition>

Le groupe d’instructions est exécuté au moins une fois. L répétition éventuelle de ce groupe
d’instructions est commandé par la valeur de la condition <condition> qui est évaluée après
chaque itération : si elle est vraie, on passe à l’instruction suivante (s’il y en a).

9
Exemple :
Considérons l’algorithme ci-dessous qui affiche les 100 premiers nombres entiers naturels non
nuls.

Algorithme Algo5 ;
i : entier ;
Début
i:=0 ;
Répéter
i :=i+1 ;
Ecrire (i);
Jusqu’à i=100
Fin.

III-8 Les procédures et les fonctions :

V-8-1 Les procédures :


Une procédure peut être vue comme un algorithme indépendant, caractérisé par des conditions
portant sur les données et les résultats. Les variables et les données qui permettent à la procédure
de communiquer avec les autres algorithmes sont appelés « paramètre », ils réalisent l’interface
entre la procédure et l’algorithme qui utilise la procédure.

Sa syntaxe à la forme suivante :

Procédure identificateur de la procédure (liste de paramètres formels séparés par des point -
virgule) ;
Début
Instructions
Fin ;

Ou, si l’on ne désire pas utiliser des paramètres.

Procédure identificateur de la procédure ;


Déclaration ;
Début
Instructions ;
Fin ;

Une procédure est définie dans la partie déclarations de l’algorithme où elle est utilisée.
L’appel d’une procédure se fait au moyen de l’instruction :

<Identificateur de la procédure> (liste de paramètres effectifs séparés par des virgules) ;

10
Si l’on ne désire pas utiliser des paramètres Identificateur de la procédure

Les paramètres effectifs sont les valeurs substituées aux paramètres formels.

Les objets définis dans une procédure sont appelés objets locaux (exemple : variable locale) et
sont indéfinis avant l’appel de la procédure. Ces objets ne sont accessibles que par les
instructions définies dans la procédure. Si on redéfinit un objet dans une procédure, le premier est
« masqué » par le second dans cette procédure, il ne sera plus accessible.

Remarque : Considérons les remarques suivantes.

-Le domaine d’accessibilité d’un objet est la procédure où il est défini.

-Les objets déclarés dans l’algorithme (principal) sont accessibles par toutes les instructions et les
procédures de celui-ci (ils sont dits « objets globaux », par exemple : variable globale).

-La correspondance entre paramètres formels et paramètres effectifs est étable par leur position
dans les deux listes

III-8-1-1Paramètres :
Il existe trois types de paramètres : les paramètres d’entrée ou données, les paramètres de
sortie ou résultats et les paramètres d’entrée et de sortie ou données et résultats.

· Paramètres d’entrée :
Ils constituent la (ou les) condition(s) initiale(s) d’exécution de la procédure.

Le paramètre formel est une variable locale de la procédure appelée. Il reçoit comme valeur
initiale, la valeur de l’expression (une constante ou une variable sont des cas simples) du
paramètre effectif. On peut modifier dans la procédure de la valeur de ce paramètre formel, mais
il sera détruit à la sortie de la procédure comme les autres variables locales et on ne peut donc pas
transmettre de résultats en retour.

Pour définir des paramètres d’entrée, on utilise la syntaxe suivante :

E <identificateurs de variables séparés par des virgules> : <type de données>

· Paramètres de sortie :
Ce sont des objets globaux. Ils sont utilisés lorsqu’on veut transmettre un résultat à l’algorithme
appelant.

Remarque : Considérons les remarques suivantes.

-Un paramètre de sortie doit recevoir une valeur dans tous les cas de figure.

11
-Il est interdit d'utiliser un paramètre de sortie en partie droite d'une affectation ou dans une
condition.

Pour définir des paramètres de sortie, on utilise la syntaxe est la suivante :

S <identificateurs de variables séparées par des virgules> : <type de données>

· Paramètres d'entrée/sortie

Il arrive quelquefois que le but d'une procédure soit de modifier la valeur d'un paramètre :
celui-ci est donc à la fois une donnée, par sa valeur à l'entrée de la procédure, et un résultat, par
sa valeur à la sortie de la procédure. Ce sont donc, des objets globaux.

Ils combinent les caractéristiques des deux types de paramètres : ils ont initialement des
valeurs et la procédure leur définit de nouvelles valeurs lors de son exécution.

Pour définir des paramètres d'entrée /sortie, on utilise la syntaxe suivante :

E/S <identificateurs de variables séparées par des virgules> : <type de données>.

III-8-2 Les fonctions :

Ce sont des algorithmes similaires aux procédures, qui fournissent un résultat par le biais de
leur nom (identificateur). L’identificateur d’une fonction est un objet d’un type donné et il est
nécessaire de lui affecter une valeur ; au moins une fois dans la partie <instruction> de la
fonction.

La déclaration d’une fonction a la syntaxe suivante :

Fonction <Identificateur de la fonction> (<liste de paramètres formels séparés par des points-
virgules>) : <type de données> ;
<partie déclaration de la fonction>

Début
<Instructions>
Fin ;
Une fonction est définie dans la partie <déclaration> de l’algorithme où elle est utilisée.
L’appel d’une fonction se fait exclusivement dans une expression qui doit etre compatible avec le
type de la fonction comme suit :

<Identificateur de la fonction> (<liste de paramètres formels effectifs séparés par des virgules>)

12
Ou, si l’on ne désire pas transmettre de paramètres

<Identificateurs de la fonction>

Remarque
Toute la procédure qui possède un seul paramètre de sortie peut être remplacée par une fonction.

Toutes les définitions, remarques et résultats relatives aux procédures restent valables pour les
fonctions

III-8-3 Les procédures et les fonctions prédéfinies :


Ils existent des fonctions et des procédures prédéfinies que l’utilisateur peut les utiliser à sa guise.

Parmi les procédures prédéfinies on trouve : lire et écrire.

Parmi les fonctions prédéfinies on trouve :

- quotient(x,y) : le quotient de la division de x par y.


- reste(x,y) : le reste de la division de x par y.
- Sin(x) : le sinus de x.
- cos(x) : le cosinus de x.
- tg(x) : la tangente de x.
- arctg(x) : la fonction réciproque de tg(x).
- ln(x) : le logarithme népérien de x.
- exp(x) : l'exponentiel de x.

Pour alléger et abréger l’écriture de certaines fonctions, on peut utiliser les formes suivantes :

- pour le carré de x.
-[x] pour la partie entière de x.
-√ pour la racine carrée de x.
- pour la division de x par y.

Exemple

Algorithme puissance;
x,p: réel;

13
n:entier;
Fonction impair(E n:entier):booléen;
Début
si reste (n, 2)6=0 alors impair:=vrai
sinon impair:=faux
fsi
fin;
Procédure puis(E x:r_eel;E n:entier;E/S p:réel);
début tantque n>0
faire
si impair(n) alors n:=n-1; p:=p*x
sinon n:=quotient(n,2); x:=x2
fsi ;
fait ;
fin;
début
lire(x,n);
p:=1;
puis(x,n,p);
écrire(p)
fin.

Pour utiliser , cette méthode utilise la forme (( . . .


qui nécessite 6 multiplications au
lieu de 14.

14

Vous aimerez peut-être aussi