Vous êtes sur la page 1sur 53

UNE INTRODUCTION A L’ALGORITHMIQUE

1. MOTIVATION

1.1 Le Problème

Un algorithme peut se définir comme un cheminement à suivre dans la


résolution d’un problème donné.
A l’analyse, cette définition souffre de deux insuffisances majeures qui
sont :
- la liberté de choix d’un langage et d’une méthode pour poser
un problème peut entrainer différentes interprétations d’un même
problème ;
- la liberté de choix d’un langage et d’une méthode pour la
description du cheminement proposé peut entrainer différentes
interprétations d’un même algorithme.
Afin de garantir une convergence des différentes interprétations, l’on
doit définir une démarche dite objective qui sera adoptée pour poser
correctement un problème et pour la description d’un algorithme
exempte de toute forme et de toute espèce d’ambigüité.
Une démarche dite objective se caractérise par :
- le principe de base (ou l’axiome définissant la condition initiale :
une définition de l’être en question) ;
- les notions de base (les outils nécessaires au développement de
la démarche) ;
- les étapes et les relations existant entre celles – ci (les actions à
développer au niveau de chaque étape).
Afin d’exclure toute forme et toute espèce d’ambigüité, une
démarche objective et un langage formel seront adoptés pour la
description des outils et pour la formulation des actions à développer.

1.2 L’Objet du cours

L’objet du cours est donc l’apprentissage de la démarche objective


préconisée et des structures du langage formel qui seront adoptés.

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 1


2. UNE PRESENTATION DE LA DEMARCHE

2.1 Objectif

L’objectif est la présentation de la démarche qui sera adoptée pour la


description ou la construction d’un algorithme.

Rappel : une démarche se caractérise par :


- le principe de base ou l’axiome de base ;
- les mécanismes ou les outils de base ;
- les étapes et les relations existant entre elles.

2.2 Le principe de base

L’on souhaite construire un algorithme permettant de résoudre un


problème se caractérisant par :
- l’énoncé du problème : les données nécessaires (ou données
disponibles) et les relations existant entre celles – ci ; les résultats
escomptés et les relations existant ceux – ci ;
- l’objectif : les contraintes décrivant le contexte et la recherche
du cheminement à suivre pour passer des données aux résultats
escomptés
Alors, poser un problème consiste à demander les actions à
développer pour passer des données aux résultats escomptés tout en
observant les contraintes.
Un algorithme devient alors une machine logique développant un
ensemble fini d’actions sur des données qu’elle admet en entrée, pour
fournir en sortie les résultats escomptés.
Elle peut être représentée à l’aide du schéma ci – dessous.

Données Résultats
Actions escomptés

Schéma 1 : une représentation schématique d’un algorithme

Un algorithme est une machine logique qui converge au voisinage


des résultats escomptés : un algorithme s’arrête dès l’obtention des

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 2


résultats escomptés.

2.3 Les notions de base

Les caractéristiques d’un algorithme deviennent alors les données


disponibles, les résultats escomptés et les actions.
Les notions de base sont celles nécessaires pour :
- la description et la spécification des données et des résultats (les
résultats intermédiaires et les résultats escomptés);
- la formulation des actions à développer.

L’ensemble des résultats est composé des résultats escomptés et des


résultats intermédiaires.

2.4 Les étapes

Pour la description d’un algorithme l’on devra procéder par :


- la description et la spécification de l’ensemble des données et
de l’ensemble des résultats ;
- la formulation des actions à développer pour passer des données
aux résultats escomptés tout en observant les contraintes.

Afin d’éviter toute forme et toute espèce d’ambigüité l’on devra


adopter un langage formel. Un langage est dit formel quand il exclue
toute forme et toute espèce d’ambigüité (par opposition au langage
naturel).

2.5 La préoccupation

Notre préoccupation est l’apprentissage de la démarche pour la


construction des algorithmes de base (ou algorithmes élémentaires):
- la présentation des notions de base ;
- la présentation de la structure d’un algorithme ;
- la présentation des structures de base du langage formel qui sera
adopté pour la description d’un algorithme.

3. LES NOTIONS DE BASE

3.1 Objectif

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 3


L'objectif est la définition des notions de base nécessaires pour la
description d'un algorithme.

3.2 Notion de variable

Une variable représente soit une donnée soit un résultat ; alors ses
caractéristiques sont les suivantes :
- un identificateur qui est un moyen permettant de désigner de
façon unique un être ou une entité ;
- un type décrivant sa structure algébrique à savoir :
- sa forme logique qui est l’ensemble des composants et leur
mode d’agencement ;
- l'ensemble des opérateurs autorisés ou applicables à la
forme logique ;
- l'espace de valeurs possibles.
Nous ne parlerons pour l’instant que des types de base en vue de
faciliter l’apprentissage. Les types qui sont obtenus par combinaisons
linéaires des types de base feront l’objet d’autres cours.

3.3 Notion de type de base (élémentaire)

Nous distinguons quatre types de base qui sont :


- le type Réel dont les caractéristiques sont les suivantes :
- la forme est :
<Signe> < Séquence de chiffres> . < Séquence de
chiffres> ;
- l'ensemble d'opérateurs autorisés est {+,-,*,/} ;
- l'espace de valeurs possibles est IR.
- le type Entier dont les caractéristiques sont les suivantes :
- la forme est <Signe> < Séquence de chiffres> ;
- l'ensemble d'opérateurs autorisés est {+,-,*,/} ;
- l'espace de valeurs possibles est ZZ (l’ensemble des entiers
relatifs).
- le type Booléen dont les caractéristiques sont les suivantes :
- la forme est un code ;
- l'ensemble d'opérateurs autorisés est {┐,V,^} ;
SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 4
- l'espace de valeurs possibles est {0,1}.
- le type Caractère dont les caractéristiques sont les suivantes :
- la forme est un code ;
- l'ensemble d'opérateurs autorisés est vide ;
- l'espace de valeurs possibles est l’ensemble des symboles
élémentaires.

3.4 Notion d'opérateur de base

Les opérateurs de base sont les suivants :


- ceux qui sont autorisés sur les types de base à savoir {+,-,*,/,
┐,V,^ } ;
- les comparateurs à savoir {≤,< , ≥,>,=,≠}.

3.5 Notion d'expression de base

Une expression est l’application d’opérateurs à des variables ; une


expression est donc une combinaison linéaire d'opérateurs et de
variables. Si les variables sont de types de base et les opérateurs sont
de base alors l'expression est dite de base.

Elle est dite élémentaire quand ne combine que des variables et des
opérateurs en observant leur compatibilité. Les variables et l’opérateur
doivent être compatibles (de types identiques ou de types
imbriqués) :
- si l’opérateur est arithmétique alors les variables doivent être de
type Réel ou Entier et l’expression est de type Réel ou Entier ;
- si l’opérateur est logiques alors les variables doivent être de type
Booléen et l’expression est de type booléen ;
- si l’opérateur un comparateur alors les variables doivent être de
type Entier ou de type Réel et l’expression est de type booléen.
• Question :
Quel devra être le type des variables et celui de l’expression dans les
cas suivants :
-x*y
-a<b

3.6 Notion d'affectation

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 5


Une affectation est l'évaluation d'une expression et l'attribution du
résultat à une variable. Alors dans une affectation l'expression et la
variable doivent être de types identiques.

L’affectation est notée ← et se lit reçoit.


• Question :
Quel devra être le type de chacune des variables dans
l'affectation suivante : Z ← X + Y
L’on peut distinguer différentes familles d'affectation dont :
- l'affectation classique (celle dont nous venons de parler) ;
- l'initialisation ;
- l'incrémentation ;
- le cumul.

3.6.1 Initialisation

Une initialisation est une affectation dans laquelle l'expression est


substituée par une constante.

Elle est de la forme x ← Cte

3.6.2 Incrémentation

Une incrémentation est une affectation de la forme :

x <— x + Cte

3.6.2.1.1 Interprétation

L'on peut noter la présence de la même variable à gauche et à droite


de l'affectation.

Cette formulation s'interprète de la façon suivante :


- la variable de gauche représente la valeur courante (ou nouvelle
valeur) ;
- la variable de droite représente la valeur précédente ;
- pour obtenir la valeur courante ; la valeur précédente sera
augmentée de la valeur d’une constante.

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 6


Question :
Que vous rappelle cette formulation et comment s’appelle – t – elle ?

3.6.2.1.2 Simulation

Exemple :
- L’on voudrait qu’une variable (x) parcourt les valeurs 0 , 5, 10 , 15
- La formulation est la suivante :
- x <— 0 {définition de la valeur
initiale} ;
- x <— x + 5 {définition de
l’incrémentation}.
Si nous exécutons l’incrémentation un nombre fini de fois (dans le cas
d’espèce 3 fois), nous obtenons le tableau ci – dessous.

étape valeur expression valeur


précédente courante de
1 de0x 0+5 5x
2 5 5+5 10
3 10 10 + 5 15

Si la Cte est négative alors, l’on obtient une décrémentation.

3.6.3 Cumul

Un cumul est une affectation de la forme :


X <— X + Valeur (a)
3.6.3.1.1 Interprétation

L'on peut noter la présence d'une même variable à gauche et à droite


de l'affectation dans cette formulation.

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 7


Cette formulation s'interprète de la façon suivante :
- la variable de gauche recevra la valeur courante ;
- la variable de droite recevra la valeur précédente ;
- à la valeur précédente sera ajoutée une valeur pour obtenir la
valeur courante.

3.6.3.1.2 Simulation

Exemple :
- L'on veut calculer la somme des nombre suivants : 15, 10 et 40
- La formulation est la suivante :
- x <— 0 {définition de l’initialisation}
- x <— x + a {définition du cumul}
En exécutant (3) fois le cumul (a) avec les valeurs successivement de
(a) qui sont 15, 10 et 40, nous obtenons le tableau ci – dessous.

étape valeur valeur de expression valeur


précéd (a) à courante
1 ente
0 ajouter
15 0+15 15
2 15 10 15 + 10 25
3 25 40 25 + 40 65

4. NOTIONS DE BASE DE LA LOGIQUE FORMELLE

4.1 Objectif

Un algorithme étant une machine logique, alors l’objectif de cette


partie est l’introduction des notions de base de la logique formelle
nécessaires pour une bonne construction : notions du calcul
propositionnel.

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 8


Une proposition est une affirmation qui est soit vraie soit fausse. Elle ne
peut prendre qu'une et une seule valeur à la fois : principe de base de
la logique formelle.

Une proposition peut donc être représentée par une variable de type
Booléen.

L’objectif est l’apprentissage du calcul des propositions élémentaires :


- combinaison linéaire de deux variables de type booléen et d’un
connecteur ;
- combinaison linéaire de deux variables de type Entier ou de type
Réel et d’un comparateur.

4.2 L’étude des connecteurs de base

Cette étude s’effectuera par :


- la présentation de la table de vérité de chaque opérateur ;
- la formulation des expressions logiques déduites de la table de
vérité ;
- l’interprétation des expressions logiques.

4.2.1 La négation

4.2.1.1 La table de vérité :

p ┐p
0 1
1 0

4.2.1.2 Les interprétations :

Quand une proposition (P) est vraie sa négation est fausse ; par contre
quand elle est fausse sa négation est vraie.
Question :
Que donne la double négation d’une même proposition ? Et comment
l’appelle – t – on ?

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 9


4.2.2 La conjonction

4.2.2.1 La table de vérité :

P Q P ^ Q
0 0 0
0 1 0
1 1 1
1 0 0

4.2.2.2 Les expressions logiques :

Nous pouvons distinguer deux expressions logiques :


- la première regroupe les cas dans lesquels la conjonction est
vraie ;
- la seconde regroupe les cas dans lesquels la conjonction est
fausse.

4.2.2.3 Les interprétations :

- une conjonction n’est vraie que si toutes ses composantes sont


vraies ;
- pour qu’une conjonction soit fausse, il suffit qu'une composante
soit fausse.

Question :
La différence entre une condition dite nécessaire et une condition dite
suffisante

4.2.3 La disjonction

4.2.3.1 Table de vérité

p Q P V Q
0 0 0
0 1 1
1 1 1
1 0 1

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 10


4.2.3.2 Les expressions logiques

Nous pouvons distinguer deux expressions logiques :


- la première regroupe les cas dans lesquels la conjonction est vraie ;
- la seconde regroupe les cas dans lesquels la conjonction est fausse.

4.2.3.3 Interprétations

- pour qu’une disjonction soit vraie, il suffit qu’une composante soit


vraie ;
- une disjonction n’st fausse que quand toutes ses composantes sont
fausse ;

Question :
La différence entre une conjonction et une disjonction

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 11


4.2.4 L'implication

4.2.4.1 Table de vérité

P Q P Q
0 0 1
o 1 1
1 1 1
1 0 0

4.2.4.2 Expressions logiques

Nous avons deux expressions logiques :


- la première regroupe les cas dans lesquels la conjonction est
vraie ;
- la seconde regroupe les cas dans lesquels la conjonction est
fausse.

4.2.4.3 Interprétations

Analysons le comportement ou le bon fonctionnement d’un


algorithme en interprétant les situations suivantes :
- en sortie d’un algorithme nous avons des résultats justes à
partir de données justes (troisième ligne) ;
- en sortie d’un algorithme nous avons des résultats faux à partir
de données fausses (première ligne) ;
- en sortie d’un algorithme nous avons des résultats faux à partir
de données justes (quatrième ligne) ;

4.2.5 L'équivalence

4.2.5.1 Table de vérité

p Q p Q
0 0 1
0 1 0
1 1 1
1 0 0

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 12


4.2.5.2 Expressions

Nous avons deux expressions logiques : la première regroupe les cas


dans lesquels la conjonction est vraie et la seconde regroupe les cas
dans lesquels la conjonction est fausse.

4.2.5.3 Interprétations

L’on dit que deux propositions ne sont équivalentes que quand elles
ont la valeur de vérité.

4.2.6 L'exclusion mutuelle

4.2.6.1 Table de vérité

p Q P w Q
0 0 0
0 1 1
1 1 0
1 0 1

4.2.6.2 Expressions logiques

Nous avons deux expressions logiques : la première regroupe les cas


dans lesquels la conjonction est vraie et la seconde regroupe les cas
dans lesquels la conjonction est fausse.

4.2.6.3 Interprétations

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 13


L’on dit que deux propositions s’excluent mutuellement que quand
l’une est la négation de l’autre.

4.3 L’ètude de comparateurs

Cette étude s’effectuera par de simples réécritures des expressions


élémentaires.

4.3.1 La différence

(x ≠ y) ≡ ┐(x = y)

4.3.2 Les inégalités

┐(x < y) ≡ (x ≥ y)

(x ≤ y) ≡ (x < y) v (x = y)

┐(x ≤ y) ≡ (x > y)

┐(x > y) ≡ (x ≤ y)

(x ≥ y) ≡ (x > y) v (x = y)

┐(x ≥ y) ≡ (x < y)

5. LA STRUCTURE D’UN ALGORITHME

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 14


5.1 Objet

Notre objectif étant la construction d’algorithme, alors il nous faudra


connaitre sa structure logique (sa structure algébrique).

Ainsi l’objet est la description de la structure d’un algorithme en vue de


faciliter sa construction.

5.2 Composantes d'un algorithme

Un algorithme est une structure logique alors elle est nécessairement


composée de sous structures logiques qui sont :
- l'Entête qui marque le début de l'algorithme et qui permet de
l'identifier comme une entité ;
- la Zone de Spécification des entités ou des outils nécessaires à la
formulation des actions ;
- le Corps qui décrit la séquence finie et logique d'actions à
développer.

5.3 La notation préconisée

Le langage qui sera adopté pour la spécification d’un algorithme est


formel.

Un langage formel peut se définir comme un ensemble de termes et


un ensemble de règles opératoires permettant de communiquer ; il
devient formel quand il exclu toutes les ambiguïtés possibles.

L'on peut distinguer deux principales composantes d’un langage


formel :
- le vocabulaire qui est l’ensemble des termes ;
- la grammaire qui est l’ensemble des règles opératoires des termes.
La définition d'un langage consiste alors en :
- la spécification du vocabulaire qui consiste à préciser les termes
élémentaires : l'alphabet ; et à préciser le mode de combinaison
des termes élémentaires pour obtenir les autres termes : le lexique
;
- les règles de combinaison des termes du vocabulaire pour la
construction d’une structure du langage (les règles syntaxiques);

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 15


- les règles permettant de définir des structures du langage
traduisant chacune une action à développer (règles
sémantiques);

Dans un langage formel chaque structure n’a que une et une selon
sémantique et une et seule syntaxe. L’on peut dire que le niveau
sémantique dépend du niveau syntaxique.

Dans le lexique d’un langage formel l’on distinguer deux grandes


familles de mots :

- les identificateurs qui sont mots auxquels l’on peut attribuer une
valeur prise dans un espace infini ; cette valeur est choisie par
l’utilisateur du langage ; un identificateur sera assimilé à une
variable ;

- les mots dits réservés qui ne peuvent connaitre que une et une
seule valeur ; ils seront assimilés à des constantes.

Une syntaxe étant une combinaison précise de mots réservés et


d’identificateurs, l’on devra adopter une notation afin de distinguer les
constantes des variables :
- la valeur d’un mot réservé sera précisée directement dans une
syntaxe à l’image d’une constante ;
- un identificateur sera noté entre les deux symboles < et > dans une
syntaxe, et à l’attribution d’une valeur les symboles disparaissent ;
- une composante optionnelle (un mot réservé ou un identificateur)
sera notée entre [ et ] dans une syntaxe.

6. LES STRUCTURES DU LANGAGE

6.1 Objet

L’objectif est l'apprentissage des structures du langage qui sera


adopté pour la description (ou l’écriture) de nos algorithmes.

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 16


6.2 Spécification des composantes d’un algorithme

6.2.1 L’entête d’un Algorithme

La syntaxe permettant la spécification de l’entête est la suivante :


ALGORITHME < Identificateur >
Le composant identificateur est le mécanisme permettant de désigner
de façon unique l’algorithme :

Exemple ALGORITHME Surface

La construction d'un identificateur doit observer les règles suivantes :


- la non utilisation de caractères accentués ou spéciaux ;
- la non utilisation d'espace à l'intérieur d'un identificateur ;
- la taille est finie ;
- un identificateur doit être parlant.

6.2.2 la zone de spécification des entités nécessaires

Les seules entités que nous connaissons, au stade actuel, sont les
constantes et variables. Alors la zone de spécification d’entités se
limitera à la zone de déclaration de constantes et à la zone de
déclaration de variables.

6.2.2.1 la zone de déclaration des constantes

La sous – zone de déclaration de constates est annoncée par le mot


réservé CONST.

La déclaration d’une constante s’effectue selon la syntaxe suivante :


< Identificateur> = valeur
Exemple

CONST
Pi = 3.14
Ro = 9.75123
La sous – zone de déclaration de variables est introduite par le mot
réservé VAR.

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 17


La déclaration d’une variable s’effectue de la manière suivante :
< Identificateur > : < Type de base>

Exemple

VAR
Longueur : Réel
Largeur : Réel

6.2.3 le corps :

Le corps d'un algorithme est une séquence logique et finie d'actions


délimitée par les mots réservés DEBUT et FIN :

DEBUT
action (i)

FIN

Le corps étant une structure logique, alors elle peut être décomposée
en sous structures logiques également délimitées par les mots réservés
Début et Fin. Ces sous structures devront être soit disjointes soit
imbriquées.

Le langage algorithmique a une grammaire contexte – sensitif, c’est –


à – dire que l’on ne peut manipuler ou utiliser dans une syntaxe que
des entités qui sont connues.

6.3 La formulation des actions du corps

Il s’agira d’apprendre les structures de base du langage algorithmique


permettant la description d’un algorithme.

6.3.1 La structure décisionnelle

6.3.1.1 Définition

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 18


Une structure est dite décisionnelle lorsqu’elle permet d'exécuter de
façon sélective une et une seule séquence finie et logique d'actions
parmi plusieurs. La sélection s'effectuera selon la valeur d'une condition
qui s’exprime sous forme d’une proposition.

6.3.1.2 Syntaxe

SI < Condition >


ALORS
Début
Séquence (SQ1)
Fin
SINON
Début
Séquence (SQ2)
Fin
Ou encore
SI < Condition >
ALORS

Séquence (SQ1)

SINON
Séquence (SQ2)

FinSi

6.3.1.3 Interprétations

Si la condition est vraie, alors exécution uniquement de la séquence


(SQ1) ; par contre si elle est fausse, alors exécution uniquement la
séquence (SQ2).

6.3.1.4 Exemples :

- EXO 1 : x є ]- oo , 1 0 ] alors y = 2*x- 3

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 19


x є ] 1 0 , +oo ] alors y = x+5

SI ( x < 10 )
ALORS
y ← 2*x – 3

SINON : {signifie la négation de (x < 1 0 ) ] }


y← x+5
FinSi

- Exo2 :
x є ]-00 , 1 0 ] alors y = 2 *x -
5
x є ]10 , 50 ] alors y= x
+ 3
x є ]50, + o0[ alors y = x - 2

SI ( x < 10 )

ALORS
y ← 2 *x - 5
SINON : {signifie la négation de (x < 1O)}
SI ( x < 50) : { signifie (x ≥ 10) ET (x < 50)}
ALORS
y ← x + 3
SINON : {signifie (x ≥ 50 )}
y← x-2
FinSi

FinSi
6.3.2 Les structures répétitives

6.3.2.1 Définition

Une structure est dite répétitive quand elle permet d'exécuter une
séquence finie et logique d'actions un nombre fini de fois.

Cette répétition peut s'effectuer de deux façons :

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 20


- lorsque l’on dispose d’une condition de continuité : tant qu'une
condition est satisfaite ;
- lorsque l’on dispose d’une condition d’arrêt : jusqu'à ce qu'une
condition soit satisfaite.

6.3.2.2 Syntaxe (1)

Lorsque l'on dispose d'une condition de continuité la structure


répétitive appelée « Tant que » est utilisée avec la syntaxe suivante :

TANT QUE < Condition > FAIRE

Séquence ( SQ )

FinTq

Lorsque l'on dispose d'une condition d'arrêt la structure appelée


« répéter » est utilisée

6.3.2.3 Interprétation (1)

Le calcul de la valeur de vérité de la condition est effectué ; si elle est


vraie (condition vérifiée) alors l'on exécute la séquence d'actions (SQ) ;
et reprise de la répétition.

Par contre, si la condition est fausse l’on n’exécute pas la séquence


(SQ) et arrêt de la répétition.

6.3.2.4 Simulation (1)

Soit un cercle de rayon égal à 5 et l'on voudrait faire varier sa valeur


jusqu'à 25 avec un pas de 5. Nous nous proposons de calculer la valeur
de la surface de chaque cercle.

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 21


Nous observons que le rayon parcourt une suite numérique de valeur
initiale 5, de valeur maximale 25 et de raison 5, alors utilisation d'une
incrémentation :

- l'initialisation :
rayon ← 5 : valeur initiale du rayon
pi ← 3.14 : choix de la valeur de la variable pi

- la répétition :
TANT QUE ( rayon < 25 ) FAIRE

surface <— pi*rayon2


rayon <— rayon + 5
FinTq

valeurs du valeur de la calcul de


rayon condition (rayon la surface ?
< 25)
5 vrai oui
5 + 5= 10 vrai oui
10 + 5= 15 vrai oui
15 + 5 = 20 vrai oui
20 + 5 = 25 vrai oui
25 + 5 = 30 faux non

• Question :
Que se passerait-il si l’incrémentation avait été omise dans la
répétition ?

6.3.2.5 Syntaxe (2)

REPETER

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 22


Séquence ( SQ )

JUSQU'A < Condition >

6.3.2.6 Interprétations :

L’on exécute d’abor de la séquence d'actions (SQ) et l’on calcule la


valeur de vérité de la condition. Si la condition est fausse, alors l’on
procède à une réexécution SQ. Par contre, si elle est vraie la séquence
SQ n’est pas ré exécutée.

6.3.2.7 Simulation

Reprenons le même exemple.

Nous observons que le rayon décrit une suite numérique de valeur


initiale 5, de valeur maximale 25 et de raison 5, alors utilisation d'une
incrémentation :

- l’initialisation :
rayon <- 5 : valeur initiale du rayon
pi <- 3.14 : choix de la valeur de la variable pi
- la répétition :
REPETER
surface <— pi*rayon2
rayon <— rayon + 5

JUSQU'A ( rayon > 25 )

- l’exécution :

calcul de la valeurs du rayon valeur de la


surface ? condition

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 23


oui 5 + 5= 10 faux
oui 10 + 5= 15 faux
oui 15+5 = 20 faux
oui 20 + 5 = 25 faux
oui 25 + 5 = 30 vrai
non

6.3.3 Structure itérative

6.3.3.1 Définition

Une structure est dite itérative lorsqu’elle permet d’effectuer une


répétition avec une incrémentation implicite de pas égal à un.

6.3.3.2 Syntaxe

POUR < Identificateur > ← < borne inférieure> A < borne supérieure > FAIRE

Séquence (SQ)

Finpour

6.3.3.3 Interprétations :

Il s’agit de l’identificateur d’une variable compteur devant parcourir


l’intervalle définie par : borne inférieure et borne supérieure avec un
pas de progression de un. Pour chaque valeur de la variable compteur
l’on exécute de la séquence SQ.

6.3.3.4 Exemple :

Le calcul des surfaces des cercles dont les rayons varient de 5 à 10


avec un pas égal à un.

POUR rayon ← 5 A 10 FAIRE

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 24


surface ← pi*rayon2
Fin

- exécution
valeurs successives du calcul de
rayon la surface ?

5 oui
5+1 =6 oui
6+1 =7 oui
7+1=8 oui
8+1 =9 oui
9+ 1 = 10 oui
1O+1 = 11 non
• Question :
Proposez une réécriture de l’exemple ci – dessus en utilisant
une structure répétitive

6.3.4 Les verbes d’Entrées/Sorties

6.3.4.1 Définition

Pour fournir les résultats escomptés à son utilisateur, un algorithme a


besoin de données pour le développement des actions.

Un algorithme doit alors échanger avec tout utilisateur pour :

- La formulation d’une requête par l’algorithme ;

- la prise en compte des données nécessaires ;

- la communication des résultats escomptés.

La gestion de ces échanges s’effectue à l’aide de verbes dits


d’Entrées/ Sorties qui sont les suivants :

- le verbe LIRE pour la prise en compte de données par l’algorithme,


on parle alors d'une lecture ;

- le verbe ECRIRE pour communiquer des résultats ou pour formuler


une requête.

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 25


6.3.4.2 Le verbe LIRE

La syntaxe est la suivante : LIRE (< Identificateur >)

L'interprétation s’effectue de la manière suivante :

- l’identificateur est celui de la variable ;

- attente pour la prise en compte d’une valeur de la variable


par l'algorithme par l’usager.

Exemple :
LIRE (rayon) : attente pour la prise en compte de la valeur
de la variable ayant pour identificateur rayon
6.3.4.3 Le verbe ECRIRE

Le verbe ECRIRE peut s'utiliser pour communiquer un résultat ou pour


formuler une requête.

Les syntaxes se présentent comme suit :


ECRIRE (< message >) : pour formuler une requête
ECRIRE (< Identificateur>) : pour communiquer la valeur
d’une variable
Exemple :
ECRIRE (‘’Donnez la valeur du coté du carré’’)
LIRE (cote)
Surface ← cote × cote
ECRIRE (‘’La valeur de la surface du carré est : ‘’, Surface)

6.3.5 Le commentaire

Un algorithme doit être compris par un lecteur quelconque sans être


obligé de poser de question à l'auteur. Pour ce faire, un algorithme
doit comporté des notes explicatives ou des commentaires qui
seront délimités par { et }.

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 26


Exemple :
{Requête pour obtenir la valeur du côté du carré}
ECRIRE (‘’Donnez la valeur du coté du carré’’)
{Attente pour la prise en compte de la valeur du côté du
carré}
LIRE (cote)
{Calcul de la surface du carré}
Surface ← cote × cote
{Communiquer la valeur de la surface du carré}
ECRIRE (‘’La valeur de la surface du carré est : ‘’, Surface)

7. EXERCICES D’APPLICATION

7.1 EXERCICE N° 1

Question 1 :
Pendant une foire commerciale l’on observe que la recette de
chaque exposant augmente tous les jours de deux tiers. Il paie
le tiers de sa recette journalière à l'organisateur comme frais
d’entretient de l’espace occupé. Ecrire un algorithme qui
calcule et qui communique pour toute la foire les gains
journaliers d'un exposant.
Résolution
Pour résoudre facilement le problème posé nous adopterons une
démarche qui consistera à répertorier :

- les données nécessaires ;

- les résultats (intermédiaires et escomptés) ;

- les actions nécessaires pour passer des données aux résultats.

Nous obtenons alors ce qui suit :

- les données :

- la recette initiale de l'exposant ;

- la durée de l'exposition.

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 27


- les résultats :

- les frais au premier jour ;

- le gain au premier jour ;

- les recettes aux autres jours ;

- les frais des autres jours ;

- le gain de chacun des autres jours.

- les variables : les variables devront représenter les données et les


résultats

- les actions :

- lecture de la durée de la foire

- lecture de la recette initiale

- calcul des frais au premier jour

- calcul du gain au premier jour

- communication du gain au premier jour

- pour chaque jour à partir du deuxième faire :

- calcul de la recette

- calcul des frais

- calcul du gain

- communication du gain

Nous proposons l’algorithme suivant :


ALGORITHME Foire
{Cet algorithme calcule et communique les gains journaliers
d'un exposant}

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 28


{Déclarations des variables (données + résultats)}
VAR
recette : réel {Représente la recette journalière}
duree : entier {Représente la durée de la foire}
frais : réel {Représente les frais journaliers}
gain : réel {Représente le gain journalier}
jour : entier {Représente le compteur de jours}

{le CORPS de l'algorithme}


DEBUT
{Demande de la durée de la foire}
ECRIRE (" Donnez la durée de la foire ")
{Lecture de la durée de la foire}
LIRE (durée)
{Demande de la recette initiale}
ECRIRE ("Donnez la recette initiale de l'exposant")
{Lecture de la recette initiale de l'exposant}
LIRE (recette)
{calcul des frais au premier jour}
frais ← recette/3
{calcul du gain du premier jour}
gain ← recette - frais
{communiquer la valeur du gain au premier jour}
ECRIRE (" le gain au premier jour est ", gain)
{calcul pour chacun des autres jours à partir du deuxième}
POUR jour ← 2 A durée FAIRE
{calcul de la recette du jour}
recette ← recette + 2 * recette/3
{calcul des frais du jour }
frais ← recette/3
{calcul du gain du jour}
gain ← recette - frais
UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 29
ECRIRE (" le gain au jour " , jour , " est " , gain)
FinPour
FIN
Question 2 :
Plusieurs exposants ont participé à cette foire, alors modifiez
votre algorithme pour qu'il calcule et communique le gain total
de chaque exposant à la fin de l’exposition.
Résolution
- les données :

- la recette initiale de l'exposant ;

- la durée de l'exposition ;

- le nombre d’exposants.

- Les résultats :

- les frais au premier jour ;

- le gain au premier jour ;

- les recettes des autres jours ;

- les frais des autres jours ;

- le gain des autres jours ;

- le cumul des gains d’un exposant.

- Les variables : les variables devront représenter les données et les


résultats

- Les actions :

- Lecture du nombre d’exposants

- lecture de la durée de la foire

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 30


- pour chaque exposant

- lecture de la recette initiale

- calcul des frais au premier jour

- calcul du gain au premier jour

- initialisation du total des gains d’un exposant

- pour chaque jour à partir du deuxième faire

- calcul de la recette

- calcul des frais

- calcul du gain journalier

- calcul du total des gains journaliers

- communication du cumul des gains journaliers

Nous proposons alors l’algorithme suivant :


ALGORITHME Foire
{Cet algorithme calcule et communique la somme des gains d'un
exposant}
{Déclarations des variables (données + résultats)}
VAR
recette : réel {Représente la recette journalière}
duree : entier {Représente la durée de la foire}
frais : réel {Représente les frais journaliers}
gain : réel {Représente le gain journalier}
jour : entier {Représente le compteur de jours}
nbe : entier {Représente le nombre d'exposants}
gain_total : réel {Représente le gain total d'un exposant}
expo : entier {Représente le compteur d'exposants}
{le CORPS de l'algorithme}
DEBUT
{demande de la durée de la foire}
ECRIRE (" Donnez la durée de la foire ")
UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 31
{lecture de la durée de la foire}
LIRE (duree)
{demande du nombre d'exposants}
ECRIRE (" Donnez le nombre d'exposants ")
{lecture du nombre d'exposants}
LIRE (nbe)
{Calcul pour chaque exposant}
POUR expo ← 1 A nbe FAIRE

{demande de la recette initiale}


ECRIRE (" Donnez la recette initiale de l'exposant ", expo )
{lecture de la recette initiale de l'exposant}
LIRE (recette)
{ calcul des frais au premier jour }
frais ← recette/3
{calcul du gain du premier jour }
gain ← recette - frais
{initialisation du gain total}
gain_total ← gain
{calcul pour les autres jours}
POUR jour ← 2 A durée FAIRE

{ calcul de la recette du jour }


recette ← recette + 2 * recette/3
{ calcul des frais du jour }
frais ← recette/3
{ calcul du gain du jour }
gain ← recette - frais
{ calcul du gain total }
gain_total ← gain_total + gain
FinPour
ECRIRE (" Le gain total de l'exposant " , expo , " est " ,
SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 32
gain_total)
FinPour
FIN
Question 3 :
Modifiez votre algorithme pour qu'il calcule et communique la
somme des gains de tous les exposants et le gain de
l'organisateur à la fin de l’exposition.

ALGORITHME Foire
{Cet algorithme calcule et communique la somme des gains de
tous les exposants et le gain de l'organisateur}
{Déclarations des variables (données + résultats)}
VAR
recette : réel {Représente la recette journalière}
durée : entier {Représente la durée de la foire}
frais : réel {Représente les frais journaliers}
gain : réel {Représente le gain journalier}
jour : entier {Représente le compteur de jours}
nbe : entier {Représente le nombre
d'exposants }
gain_total : réel {Représente le gain total d'un exposant}
frais_total : réel {Représente le total des frais d'un
exposant}
expo : entier {Représente le compteur d'exposants}
som_gain : réel {Représente la somme des gains des
exposants}
som_frais : réel {Représente la somme des frais des
exposants}

{le CORPS de l'algorithme}


DEBUT
{la demande de la durée de la foire}
ECRIRE (" Donnez la durée de la foire ")

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 33


{lecture de la durée de la foire}
LIRE (duree)
{la demande du nombre d'exposants}
ECRIRE (" Donnez le nombre d'exposants ")
{la lecture du nombre d'exposants}
LIRE (nbe)
{l’initialisation de la somme des gains et de la somme des
frais}
som_frais ← 0
som_gain ← 0
{Calcul pour chaque exposant}
POUR expo ← 1 A nbe FAIRE

{la demande de la recette initiale}


ECRIRE ( " Donnez la recette initiale de l'exposant ", expo)
{la lecture de la recette initiale de l'exposant}
LIRE (recette)
{le calcul des frais au premier jour}
frais ← recette/3
{le calcul du gain du premier jour }
gain ← recette - frais
{initialisation du gain total et du total des frais }
gain_total ← gain
frais_total ← frais
{le calcul pour les autres jours}
POUR jour ← 2 A duree FAIRE

{le calcul de la recette du jour}


recette ← recette + 2 * recette/3
{le calcul des frais du jour}
frais <- recette/3
{le calcul du gain du jour}
SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 34
gain ← recette - frais
{le calcul du gain total et du total des frais
}
gain_total ← gain_total + gain
frais_total ← frais_total + frais
Finpour
{ calcul de la somme des gains }
som_gain ← som_gain + gain_total
{ calcul de la somme des frais }
som frais ← som frais + frais total
Finpour
ECRIRE (" La somme des gains des exposants est " , som_gain)
ECRIRE (" Le gain de l'organisateur est " , som_frais)
FIN

• Question 4 :
L'on a supposé jusqu'à ce stade que chaque exposant
n'occupe qu'un seul stand. En supposant alors qu'un exposant
peut occuper plusieurs stands à la fois pendant toute la foire,
modifiez votre algorithme pour qu'il calcule et communiquer le
gain total et le total des frais de chaque exposant, puis le gain
de l'organisateur.
Nous proposons les indications suivantes :
- les recettes initiales d'un exposant occupant plusieurs stands
peuvent être différentes d'un stand à l'autre ;
- le nombre de stands occupés peut être différent d'un exposant à
l'autre.
• Question 5 :
L'organisateur propose aux mêmes exposants plusieurs foires
dans l'année. En supposant que les exposants n'ont pas
participé tous au même nombre de foires, modifiez votre
algorithme pour qu'il calcule et communique le gain annuel et
les frais annuels de chaque exposant, puis le gain annuel de
l'organisateur.

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 35


7.2 EXERCICE N° 2

• Question 1 :
Une entreprise décide d'attribuer des primes mensuelles à ses
employés qui sont calculées de la manière suivante :
- le temps réel est égal au temps supplémentaire moins les
trois demis du temps d'absence
- la prime est estimée selon le tableau ci –dessous
Temps réel ( TR) Prime mensuelle
TR>35 50000
35 > TR > 25 35000
25 > TR > 10 20000
10 > TR > 5 10000
TR< 5 0

Ecrire un algorithme qui calcule et communique la prime


mensuelle d'un employé
• Question 2 :
Pour encourager les meilleurs travailleurs, l'entreprise décide
d’appliquer une formule complémentaire qui est la suivante :
- si le temps réel est supérieur ou égal à la moitié du temps
supplémentaire alors la prime est augmentée de sa moitié
- dans le cas contraire une retenue qui est égale au tiers de
la prime est effectuée
Modifiez votre algorithme pour qu'il calcule et communique la
prime mensuelle de chaque employé

• Question 3 :
Modifiez votre algorithme pour qu'il calcule et communique la
somme des primes annuelles payées, la somme des retenues
et le ratio de deux.

8. LES TYPES COMPOSÉS

8.1 Objectif

Un type est dit composé quand sa structure logique est obtenue par
combinaison linéaire d’un nombre fini de structures d’un type de base.

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 36


Notre objectif est de présenter les types composés les plus courants qui
sont :
- l'intervalle ;
- la chaîne de caractères ;
- le tableau.
L’objet est l’apprentissage à la spécification et à la manipulation de
ces types composés.

8.2 Spécification d'un objet composé

La grammaire du langage algorithmique étant contexte – sensitif alors


les types composés devront être absolument spécifié avant d'y faire
référence.

La spécification d'un objet composé consiste en la description de sa


structure logique.

La zone de spécification d'un type nouveau est annoncée


par le mot réservé : TYPE
La spécification d’un type composé s'effectue selon la syntaxe
suivante :
< Identificateur du type> = < description de la structure >

8.3 Type Intervalle

8.3.1 La description

Un intervalle est espace discret et fini de valeurs que peut parcourir une
variable. Alors il peut se décrire de deux manières :
- le mode explicite qui consiste à énumérer les différentes valeurs :
- (valeur1, valeur2, …, valeur i, …, valeur n) ;
- le mode implicite qui consiste à préciser les bornes de l'espace de
valeurs :
- <borne inférieure> .. <borne supérieure>
Le type de la variable devant parcourir l'intervalle étant
compatible avec le type des bornes, alors si les valeurs
des bornes sont entières alors la variable est de type

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 37


entier ; si les bornes sont des caractères alors la variable
est de type caractère.

8.3.2 La spécification

La spécification s’effectue selon la syntaxe suivante :


TYPE < Identificateur du type> = < description>
Pour exemple un intervalle ayant pour identificateur nombre et dont
la description est l’ensemble des valeurs entières comprise entre 0 et
9 : TYPE Nombre = [0 . . 9]

Les bornes étant des valeurs entières alors le type de la variable


pouvant parcourir l'intervalle est Entier.

Pour la définition d’un intervalle décrivant les lettres de l’alphabet, l’on


peut procéder de la manière suivante :
TYPE Alphabet = [a. . z, a..Z]

8.4 Le type tableau

8.4.1 La description

Un tableau est une séquence finie de CELLULES. Et une cellule est une
entité ayant deux caractéristiques de base qui sont son adresse ou son
index et son contenu.

Adresse

Contenu

Schéma 2 : représentation d’une Cellule

Selon la dimension de l'espace dans lequel dans lequel le tableau est


défini, l’on peut distinguer deux familles de tableau :
- le VECTEUR si la dimension de l'espace est égale à 1 (une droite) ;

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 38


- la MATRICE si la dimension de l'espace est supérieure ou égale à
2;

8.4.2 Le type Vecteur

Pour la description d'un vecteur l'on devra connaître le nombre de


cellules qui le composent et le type du contenu des cellules.

Les index des cellules du vecteur étant des valeurs entières, alors il suffit
de connaître l'intervalle de variation des index des cellules.

Ainsi, nous avons la syntaxe suivante :


[< borne inférieure>. . < borne supérieure > ] DE < Type de base
>
Alors, la spécification d’un vecteur s’effectue selon la syntaxe suivante
:
TYPE <Identificateur> = [<borne inférieure>. .<borne
supérieure> ] DE <Type de base>
Pour exemple, spécifions un vecteur composé d’une séquence de 10
valeurs réelles.
{Spécification d'un type appelé Vecteur}
TYPE Vecteur = [1 . . 10] DE Reel
VAR
{Déclaration d'une variable de type Vecteur}
Note : Vecteur

Cette variable (Note) aura la structure décrite par le schéma ci –


dessous :
1 2 3 4 5 6 7 8 9 10

Les cellules contiendront chacune une valeur réelle. Elles représentent


chacune une variable du type de son contenu.

La désignation de la variable représentée par le contenu d’une


Cellule, l’on utilise la syntaxe suivante :
UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 39
<Identificateur> = [< indexe de la Cellule>]

Exemple :
- la cellule 5 reçoit la somme de la cellule 3 et de la cellule 7
Note[5] ← Note[3] + Note[7]
- la cellule 8 reçoit le double de la cellule 2
Note[8] ← 2 * Note[2]

Exercices d'application :

Question 1 :
Ecrire un algorithme qui recherche le plus petit parmi (n)
nombres ; prenons pour simplification 20 comme valeur
maximale de (n)

ALGO recherche
{ cet Algorithme lit des nombres , recherche le plus petit d'entre eux
et l'affiche}
{ Spécification d'un type appelé VECTEUR}
TYPE Vecteur = [ 1 . . 20 ] DE Réel
VAR
{ Déclaration des variables}
Nbre : Vecteur
mini : Réel
Rang : Entier
i : Entier
n : Entier

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 40


{ Le corps de l'Algorithme}
DEBUT
{ Lecture du nombre de termes }
REPETER
ECRIRE (« DONNEZ LE NOMBRE DE TERMES « )
LIRE ( n )
jusqu'a ( (n ≥ 1 ) v ( n ≤ 20)
{Lecture de chaque nombre et mémorisation dans une Cellule}
POUR i ← 1 A n FAIRE
ECRIRE (‘’ DONNEZ LE TERME DE RANG’’, i )
LIRE ( Nbre [ i ] )
Finpour
{Supposons que la première cellule contienne le plus petit
nombre}
min ← Note [1]
{ procédons à des comparaisons successives }
POUR rang ← 2 A n FAIRE
SI ( mini > Nbre [ rang ] )
ALORS min ← Nbre[rang]
Finsi
Finpour
{Affichage du petit des n nombres }
ECRIRE (‘’LE PLUS PETIT EST ‘’ , mini )
FIN
Question 2 :
Réécrire l'algorithme de la question 1 pour afficher le plus petit
et son rang.

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 41


ALGO recherche
{ Déclaration d'un type appelé VECTEUR}
TYPE Vecteur = [ 1 . . 20 ] DE réel
VAR
{ Déclaration des variables}
Nbre :Vecteur
mini : réel
rang : entier
i : entier
n : entier

{ Le corps de l'Algorithme}
DEBUT
{ Lecture du nombre de termes }
REPETER
ECRIRE (‘’ DONNEZ LE NOMBRE DE TERMES’’)
LIRE ( n )
JUSQU'A (n > 0) v (n < 20)
{ Lecture des termes }
POUR i ← 1 A n FAIRE

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 42


ECRIRE (‘’DONNEZ LE TERME DE RANG’’ , i )
LIRE ( Nbre [ i ] )
Finpour
{ Supposons que le premier terme soit le plus petit }
min ← Note [1]
{ procédons à des comparaisons successives }
POUR i ← 2 A n FAIRE
SI ( mini > Nbre [ rang ] )
ALORS

min ← Nbre[rang]
Rang ← i
Finsi
Finpour
{ Affichage du petit des n nombres et de son rang }
ECRIRE (‘’ LE PLUS PETIT EST ’’ , mini , ‘’ ET SON RANG EST ‘’ , rang )
FIN

8.4.3 Le type Matrice

Pour la spécification d'une matrice l'on devra connaître le nombre de


cellules qui la composent et le type du contenu des cellules. Les cellules
se définissent dans un espace de dimension deux, il faut préciser le
nombre de Cellules dans chacune des dimensions.
Les index des cellules de la matrice étant des valeurs entières, alors il
suffit de préciser l'intervalle de variation des index des cellules dans
chaque dimension.
Pour la spécification d'une matrice l'on distingue deux modes :
- le mode explicite qui consiste à préciser l’intervalle de variation
des indexes lignes et des indexes colonnes :
- [ <bornes inférieure lignes> .. <borne supérieure lignes> , <bornes
inférieure colonnes> .. <borne supérieure colonnes> ] De <type
de base> ;
- TYPE <identificateur> = <Description>
- le mode implicite qui consiste à considérer qu’une Matrice est un
Vecteur de Vecteurs Lignes :

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 43


- TYPE Vecteur = [ <borne inférieure colonnes>.. <borne supérieure
colonnes> ] DE <Type de base>
- TYPE <identificateur> = [ <borne inférieure lignes> .. <borne
supérieur lignes> ] DE Vecteur

Pour exemple :
Soit un tableau ayant quatre (4) lignes, huit (8) colonnes et contenant
des nombres réels.
Le mode explicite :
{Spécification d'un type matrice }
TYPE Matrice = [ 1 .. 4 , 1 .. 8 ] DE Réel
{ Déclaration d'une variable de type matrice }
VAR
Nbre : Matrice
Le mode implicite :
TYPE
{ Déclaration d'un type vecteur représentant une ligne}
Vecteur = [ 1 .. 8 ] DE Réel
{ Déclaration du type matrice à partir du type vecteur }
Matrice = [ 1 . . 4 ] DE Vecteur

VAR
{ Déclaration d'une variable de type matrice }
Nbre : Matrice

Pour désigner une cellule d'une variable de type matrice il faut préciser
l'index ligne et l'index colonne : <Identificateur> = [ < indexe
Ligne> , <indexe Colonne> ]

Cette Cellule représente une variable du type de son contenu.

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 44


9. LES SOUS ALGORITHMES

9.1 Objectif

Pour l'écriture de nos algorithmes nous ne savons formuler que des


actions simples. Ainsi nous observons :
- des redondances de blocs d'actions ;
- une rigidité trop grande de nos algorithmes ;
- une grande difficulté pour détecter les fautes en cas d'erreur.
Or, l’on peut regrouper une séquence finie logique d'actions, ayant
d'intérêts communs, en action composée à laquelle l’on peut faire
référence plusieurs fois : notion de sous algorithme.
Ce sous algorithme devra être totalement spécifié, donc dans la zone
de spécification de l'algorithme principal, avant d’y faire référence en
fonction des besoins.
Un sous algorithme a les mêmes composantes qu’un algorithme à
savoir :
- une entête ;
- une zone de déclaration ;
- un corps.
L'objet donc est l'étude des sous algorithmes.

9.2 Classification des sous algorithmes

L'on peut distinguer deux familles de sous algorithmes selon la structure


de la sortie :

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 45


- une fonction : un sous algorithme fournissant en sortie un résultat
élémentaire (de type de base) ;
- une procédure : un sous algorithme fournissant en sortie des
résultats élémentaires ou un résultat non élémentaire.
-

9.3 La Fonction

9.3.1 Spécification d’une fonction

La spécification d'une fonction s'effectue dans la zone de spécification


de l'algorithme englobant selon la syntaxe suivante :

FONCTION <Identificateur> ( <paramètres formels> ) : < type


du résultat >
{ Zone de spécification de la fonction }
{ le corps de la fonction }
Début
Action (i)
Fin
Les paramètres d'une fonction sont les variables représentant les
données nécessaires à cette fonction pour le développement de ses
actions. A la spécification, les paramètres sont dits formels.
La spécification d'un paramètre s’effectue selon la syntaxe suivante :
- < Identificateur > : < type > { pour chaque paramètre }
- le séparateur des paramètres est la virgule
La précision < type de base > située à la fin de l'entête de la fonction
spécifie le type du résultat de la fonction. Ainsi, tout ce passe comme
l’identificateur de la fonction est celle de la variable résultat.
Toute spécification interne (Type, Fonction ou Variables) sera dite
locale à la fonction.

9.3.2 Référence à une Fonction

Une Fonction calcul et communique la valeur de la variable résultat


dont l’identificateur est celui de la Fonction. Cette variable devra donc
apparaitre dans l’expression d’une affectation (dans la partie droite).

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 46


Ainsi, la référence à une fonction s’effectue de la manière suivante :
<Identificateur> ( <paramètres effectifs> )
- attribution d’une valeur à chaque paramètre, alors les
paramètres deviennent effectifs ;
- la référence doit apparaitre à droite d’une affectation.
La référence à une fonction s’effectue dans le corps de l’algorithme
englobant.
Exercice d'application :

Question :
Ecrite un algorithme qui calcule et communique la valeur d’un
polynôme en un point. Nous supposerons que le degré du
polynôme est inférieur ou égale 3.

ALGO Polynome
{Calcul d'un polynôme de degré inférieur ou égal à trois }
{ Spécification d'un type vecteur pour stocker les coefficients }
TYPE
Vecteur = [ 1 . . 4 ] DE Réel
{ Spécification de la fonction mono }

FONCTION Mono ( a : Réel , x : Réel , n : Entier ) : Réel


{ Cette fonction calcul un monôme a * x n }
{ Spécification de variables locales}
VAR
p : réel
i : Entier
{ le corps de la fonction }
Début
{ calcul de xn }
P ← 1
POUR i ← 1 A n FAIRE
p ← p * x

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 47


{ calcul de a * x " }
m o n o ← a * p
Fin
{ Spécification de variables globales }
VAR
coef : Vecteur
i: Entier
deg : Entier
x : Réel
poly : Réel

{ Début du cors de l'algorithme }


DEBUT
{ Lecture du degré du polynôme }
ECRIRE (‘’ DONNEZ LE DEGRE DU POLYNOME’’)
LIRE (deg)
{ Lecture des coefficients du polynôme }
POUR i ← 1 A (deg+1) FAIRE
ECRIRE (‘’ DONNEZ LE COEF DE DEGRE’’ , i - 1 )
LIRE ( coef [ i ] )
Finpour
{ Lecture de la valeur du point }
ECRIRE (‘’ DONNEZ LA VALEUR DU PONIT’’ )
LIRE ( x )
{ calcul du polynôme }
p o l y <— coef [1]
POUR i ← 2 A (deg +1) FAIRE
poly ← poly + mono(coef[i],x,i-1)
Finpour
ECRIRE (‘’ LA VALEUR DU POLYNOME EN ‘’, x , ‘’ EST ‘’ , poly )
FIN

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 48


9.4 La Procédure

9.4.1 Spécification d’une Procédure

La spécification d'une Procédure s'effectue dans la zone de


spécification de l'algorithme englobant selon la syntaxe suivante :

PROCEDURE <Identificateur> ( <paramètres formels> )


{ Zone de spécification de la fonction }
{ le corps de la fonction }
Début
Action (i)
Fin
Les paramètres d'une Procédure sont les variables représentant les
données nécessaires et les résultats escomptés. A la spécification, les
paramètres sont dits formels.
Afin de distinguer les paramètres représentant les données de ceux
représentant les résultats, l’on parlera de modes de passage des
paramètres :
- mode de passage par valeur pour les paramètres représentant les
données (paramètres non modifiables dans la procédure) :
< Identificateur > : < type >
- mode de passage par référence pour les paramètres
représentant les résultats (paramètres modifiables dans la
procédure) :
Ref < Identificateur > : < type >
- le séparateur des paramètres est la virgule
Toute spécification interne (Type, Fonction ou Variables) sera dite
locale à la Procédure.

9.4.2 La référence à une Procédure

Une Procédure utilise les données qui sont passées par valeur pour
calculer les résultats qui sont passés par référence. Alors, la référence à
une Procédure s’effectue dans le corps de l’algorithme englobant en
attribuant :

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 49


- une valeur à chaque paramètre passé par valeur ;
- une valeur initiale à chaque paramètre passé par référence.
Ainsi, les paramètres deviennent effectifs avec la virgule comme
séparateur.
Exercice d'application :

Question :
Réécrire l’algorithme de l’exemple d’application de la fonction
en introduisant la notion de procédure.

ALGO Polynome
{Calcul d'un polynôme de degré inférieur ou égal à trois }
{ Spécification d'un type vecteur pour stocker les coefficients }
TYPE
Vecteur = [ 1 . . 4 ] DE Réel

{ Spécification de la fonction mono }


FONCTION Mono ( a : Réel , x : Réel , n : Entier ) : Réel
{ Cette fonction calcul un monôme a * x n }
{ Spécification de variables locales}
VAR
p : réel
i : Entier
{ le corps de la fonction }
Début
{ calcul de xn }
P ← 1
POUR i ← 1 A n FAIRE
p ← p * x
Finpour
{ calcul de a * x " }
m o n o ← a * p
Fin

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 50


{ Spécification de la fonction Somme }
Fonction Somme ( Coef : Vecteur, Deg : entir, X : réel) : Réel
VAR { Variables locales }
p : réel
i : Entier
{ le corps de la fonction }
Début
{ calcul du polynôme }
p <— coef [1]
POUR i ← 2 A (deg +1) FAIRE
p ← p + mono(coef[i],x,i-1)
Fin pour
Somme ← p
Fin

{Spécification d’une Procédure Lecture des coefficients}


PROCEDURE Lecture(n : Entier , Ref coef : vecteur)
{Cette procédure lit les coefficients du polynôme et les
mémorise dans le vecteur coef}
{ Spécification de variables locales}
VAR
i : Entier
{ le corps de la Procédure }
Début
POUR i ← 1 A n FAIRE
ECRIRE (‘’ DONNEZ LE COEFFICIENT DE DEGRE’’ , i-1)
LIRE (coef [i] )
Finpour
Fin

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 51


{ Spécification de variables globales }
VAR
coef : Vecteur
i: Entier
deg : Entier
x : Réel
poly : Réel

{ Début du cors de l'algorithme }


DEBUT
{ Lecture du degré du polynôme }
ECRIRE (‘’ DONNEZ LE DEGRE DU POLYNOME’’)
LIRE (deg)

[ lecture des coefficients du polynome }


Lecture (deg +1, Coef)

{ Lecture de la valeur du point }


ECRIRE (‘’ DONNEZ LA VALEUR DU PONIT’’ )
LIRE ( x )

Poly ← Somme (Coef,deg, X)


ECRIRE (‘’ LA VALEUR DU POLYNOME EN ‘’, x , ‘’ EST ‘’ , poly )
FIN

9.5 Règles de visibilité

SUPPORT DE COURS D’ALGORITHMIQUE - BOLI KUYO ANDRE Page 52


A la spécification, une fonction peut imbriquer d'autres fonctions ou
des procédures ; de même une procédure peut imbriquer d'autres
procédures et des fonctions.
La référence à un sous algorithme ne peut s'effectuer que dans le
corps :
- de l'algorithme principal ou du sous algorithme englobant ;
- d'un sous algorithme de même niveau.
Les variables d’un algorithme sont globales pour tous ses sous
algorithmes immédiats. Ces sous algorithmes peuvent avoir accès à
ces variables.
Par contre, ne peuvent avoir accès aux variables locales à un sous
algorithme que les sous algorithmes qu’il imbrique.
Question1 :
Réécrire l’algorithme précédent en combinant fonctions et
procédures.
Question 2 :
Réécriture de l’Algorithme de la question 3 de l’exercice
d’application 2 en utilisant les fonctions et les procédures.
Question 3 :
Utilisez l’Algorithme de la recherche du plus petit nombre parmi
plusieurs pour écrire un Algorithme de tri.

UNE PRESENTION DES ALGORITHMES DE BASE - BOLI KUYO ANDRE Page 53

Vous aimerez peut-être aussi