Vous êtes sur la page 1sur 78

Ministre de lEnseignement Suprieur, de la Recherche Scientifique et de la

Technologie
Universit Virtuelle de Tunis





Algorithmique



Concepteur du cours: Mme Leila Ben Ayed
& Mr Mohamed Jemni


Attention l
Ce produit pdagogique numris est la proprit exclusive de
l'UVT. Il est strictement interdit de la reproduire des fins
commerciales. Seul le tlchargement ou impression pour un
usage personnel (1 copie par utilisateur) est permis.

Algorithmique


2 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis


LES OBJECTIFS
Un cours dalgorithmique est, depuis longtemps, dispens dans la
grande majorit des tablissements denseignement suprieur en
informatique ainsi que dans dautres disciplines telles que la gestion,
lconomie, etc, ...
La rcente rforme des tudes en Informatique a prvu un cours
dalgorithmique, durant la premire anne. Lobjectif de ce cours est
dintroduire lesprit de ltudiant une mthodologie de dveloppement
dun algorithme qui convient la rsolution dun problme donn en
informatique. Il devra tre capable danalyser un problme et de le
comprendre, trouver une solution moyennant les oprations de base
dun ordinateur et, en suite, crire, dans un algorithme, la squence
doprations pour la rsolution de ce problme.
En sinspirant de ces orientations, nous avons dvelopp un cours
dalgorithmique suffisant pour permettre aux tudiants de premire
anne de dmarrer.
Le premier chapitre introduit les tapes de rsolution dun problme en
informatique ainsi que la structure gnrale dun algorithme pour initier
ltudiant la logique du raisonnement algorithmique.
Comme un algorithme consiste en une squence dactions, les
diffrents types dactions seront prsents par la suite. Le deuxime
chapitre introduit les actions simples. Le troisime prsente les actions
conditionnelles. Le traitement itratif est prsent au quatrime
chapitre. Nous nous focalisons, par la suite, sur la dcomposition
modulaire dun algorithme o chaque module traite un sous problme
du problme initial et nous introduisons ainsi les procdures et les
fonctions. Une forme particulire de ces procdures et fonctions utilise
la rcursivit. Cette forme est prsente au cinquime chapitre.
Les oprations de base dun ordinateur manipulent des donnes qui
sont enregistres en mmoire centrale, ainsi des types de donnes sont
utilises savoir les types simples (entier, rel, caractre et boolen) et
les types composs, construits partir des types de base (les tableaux,
les enregistrements, les chanes, les pointeurs et les listes chanes).
Ces derniers types permettent de structurer un certain nombre
dinformations de types homognes ou htrognes ; ils forment ainsi
des structures de donnes. Le 6eme, 7eme et 8eme chapitre

Algorithmique


3 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

sintressent la prsentation de la structure de donnes tableau. Nous
introduisons cette structure ainsi que quelques algorithmes assez
connus pour le tri dun tableau ainsi que pour la recherche dun lment
dans un tableau. Les chanes de caractres feront lobjet du chapitre 10.
Les enregistrements seront introduits au chapitre 11 et, dans les deux
derniers chapitres, nous introduisons les listes chanes simples et
doubles.
En mettant au point ce cours, nous esprons contribuer la ralisation
dun certain nombre dobjectifs :
La mise en place dune rfrence commune tous les enseignements
qui disposent dun cours introductif lalgorithmique.
La mise la disposition de ltudiant dun support multimdia pouvant
laider, au cours des tudes et au cours de la rvision.
I.1 Introduction

I.1 Introduction

Ce chapitre introduit les diffrentes tapes de rsolution dun problme
en informatique partir de lanalyse du problme jusqu lexcution
dun programme en passant par lcriture dun algorithme. Un
algorithme peut tre dfini comme la conjonction des oprations de
base dun ordinateur pour la rsolution du problme pos.
La structure gnrale dun algorithme fait lobjet de la deuxime partie
du chapitre.
I.2 Les tapes de rsolution d'un problme en informatique

Cette partie prsente les tapes de rsolution d'un problme en
informatique depuis la spcification des besoins exprims par

Algorithmique


4 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

l'utilisateur jusqu l'criture d'un algorithme et l'obtention d'un
programme informatique qui rpond aux besoins spcifis

Ces tapes sont les suivantes :

.2 Les tapes de rsolution d'un problme en informatique
I.2.1 Dfinition et analyse du problme
La premire tape de la dmarche consiste analyser
le problme, dfinir les donnes et leurs
caractristiques et notamment leurs types, dfinir les
rsultats et les relations entre rsultats-donnes et rsultats entre eux.
Cette tape dfinie le cahier des charges du problme.

Supposons par exemple que nous avons ordonner (ou trier) une suite
de nombres entiers.
Les donnes sont les entiers ordonner.
Le rsultat en sortie sera une suite constitue par les mmes nombres
en entre mais mis en ordre.
La sortie est donc le rsultat d'une permutation ou rorganisation des
donnes en entre.

.2 Les tapes de rsolution d'un problme en informatique
I.2.2 Ecriture d'un algorithme

Dfinition 1

Une dfinition informelle d'un algorithme est la suivante :
Un algorithme est une squence d'tapes de calcul qui utilise des
donnes en entre pour arriver des rsultats en sortie.


Algorithmique


5 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Exemple
L'entre : suite de n nombres (a 1, a 2, .a n )
La sortie : suite de n nombres (b 1, b 2, . b n)/ { b 1, . b n} = { a1,
. an} et b 1 b 2 b 3. b n

Le rsultat en sortie est une suite de nombres ordonns rsultant de la
permutation ou rorganisation de la suite en entre.

Dfinition 2
On peut aussi considrer un algorithme comme la spcification d'un
schma de calcul sous forme d'une succession d'oprations de base
pour rsoudre un problme donn.

Ces oprations de base regroupent :
Les oprations arithmtiques et logiques
Lopration de lecture dune donne de la
mmoire,
Lopration dcriture dune donne dans la
mmoire,
Lopration de comparaison dune valeur une
autre.
La rptition dune opration plusieurs fois ou un
nombre fini de fois,
Un algorithme est dit correct si pour chaque donne un entre (dite
instance) il se termine en donnant la sortie qui lui correspond.
I.2 Les tapes de rsolution d'un problme en informatique
I.2.3 Programmation de l'algorithme
Un programme est l'expression de l'algorithme dans un langage connu
par l'ordinateur. La programmation dun algorithme consiste choisir
un langage de programmation et ensuite traduire lalgorithme et les
donnes sur lesquelles il opre sous forme dun programme exprim
dans ce langage.
Un programme est un ensemble dinstructions dcrivant les diffrentes
actions dun algorithme en respectant des rgles dcriture du langage
(syntaxe). On obtient ainsi un fichier (programme source). Cest un
fichier texte cr et modifi par un diteur de texte.


Algorithmique


6 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

I.2 Les tapes de rsolution d'un problme en informatique

I.2.4 Compilation du programme

La compilation consiste traduire le programme source crit dans un
langage de haut niveau en un programme excutable crit dans un
langage binaire de bas niveau.
Au cours de cette traduction, le compilateur dtecte des ventuelles
erreurs (lexicales et/ou syntaxiques)
I.2 Les tapes de rsolution d'un problme en informatique

I.2.5 Excution et test du programme

Le concepteur de l'algorithme doit s'assurer que le programme donne
un rsultat correct dans tous les cas et dans toutes les ventualits. Il
faut ainsi valider et tester le programme construit.

Pour ce faire, on procde de la sorte :
On construit des jeux dassai, c-a-d des chantillons de donnes de
base correspondant aux diffrents cas,
On excute le programme pas pas sur lordinateur,
On vrifie lexactitude des rsultats fournis par le programme,
Si tous les rsultats sont valides
accepter le programme (Jusqu preuve du contraire)
le documenter.
Si non
rviser lalgorithme et le modifier

Algorithmique


7 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

I.3 Structure gnrale d'un algorithme
I.3.1 Structure gnrale d'un algorithme
Un algorithme comporte essentiellement
deux parties :

Une partie dclarative suivie dune partie corps de lalgorithme qui
consiste en une squence dactions faisant appel des oprations de
base de lordinateur.



Une action peut tre une :
Action daffectation,
Action dentre/sortie,
Action de contrle conditionnelle simple ou choix multiple,
Action de rptition en nombre de fois connu ou inconnu lavance

.3 Structure gnrale d'un algorithme
I.3.2 Dfinition d'une variable
Une variable est un emplacement mmoire capable de contenir des
valeurs de type dfini au pralable. Elle peut tre dfinie comme une
boite. Cette boite admet un nom, une taille, un contenu (valeur) et une
adresse. Le nom de la variable s'appelle "identificateur de variable". La
taille dpend du type de la variable (2 octets pour le type entier, 1
er
octet

Algorithmique


8 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

pour le type caractre, 4 octets pour le type rel, etc, .). Ladresse
dsigne le numro du 1er octet occup par cette variable, en mmoire
centrale. La valeur est reprsente en binaire (base 2) ; cest une suite
de chiffres 0 ou 1.
Le compilateur fait implicitement la correspondance entre l'identificateur
et l'adresse mmoire de la variable.
Dans un algorithme, les variables sont dclares comme suit :
Var Liste1 variables spares par , : Type1
Liste2 variables spares par , : Type2
..
Listei variables spares par , : Typei
On peut avoir 0 ou plusieurs variables.

Exemple
Dclaration de deux variables contenir deux valeurs entires.
Var x, y : entier
I.3 Structure gnrale d'un algorithme
I.3.3 Dfinition d'une constante
La dfinition d'une constante est identique celle d'une variable la
diffrence que la valeur dune constante reste inchange dans
l'algorithme.
Les constantes apparaissent dans un algorithme comme suit :
Const identificateur constante 1 = valeur 1
identificateur constante 2 = valeur 2
identificateur constante i = valeur i
Exemple.
Si on gre des numros de places dans un vol qui vont de 10
200, on peut alors dfinir deux constantes min_num et max_num
apparaissant, dans un algorithme, comme suit :
Const Min_num = 10

Algorithmique


9 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Max_num = 200
I.3 Structure gnrale d'un algorithme
I.3.4 Les types de base
A une variable est attribu un type. Ce type indique lespace
mmoire qui peut tre rserv cette variable aussi bien dun point
de vu taille que contenu. Il existe des types simples qui sont
prdfinis tels que les types entier, rel, caractre ou boolen :
Le type entier : dsigne un ensemble de valeurs entires.
Exemples : -10, -6, 0, 5, 1001 ...
Le type rel : dsigne l'ensemble des valeurs relles.
Exemples : 1.55, -224.25 ...
Le type caractre : dsigne l'ensemble de tous les symboles.
Exemples : 'a', 'b', 'c', 'A', 'B', '*', '+', ';' ...
Le type boolen : dsigne un ensemble de deux valeurs : VRAI ou
FAUX.
Il existe aussi des types composs dfinis partir des types de base
tels que les tableaux, les enregistrements, les chanes de caractres,
etc. .
On peut dfinir un nouveau type et lui attribuer un nouveau nom.
Vous allez voir ce genre de dfinitions dans les chapitres VII, X, XI et
XII.
I.3 Structure gnrale d'un algorithme
I.2.5 Exemple d'un algorithme
Exemple d'un algorithme
Pour le calcul et l'affichage du maximum de deux entiers.
Entre : deux nombres entiers saisis au clavier
Sortie : un nombre entier max des deux
Traitement : enregistrer les deux nombres entiers en mmoire
Comparer les deux nombres en cherchant le
max
afficher le rsultat

Algorithme Max

Algorithmique


10 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Var X, Y : entier
Dbut
Ecrire (Donner deux entiers)
Lire (X, Y )
Si X > Y alors
Ecrire (X)
Si NON
Ecrire (Y)
FIN SI
Fin
Trois actions ont t utilises :
dcriture par Ecrire
de lecture par Lire
et une action conditionnelle simple par Si Alors Si Non Fin Si

II Les actions simples

II.1 Introduction

II.2 L'action d'affectation

II.2.1 Les expressions arithmtiques

II.2.1 Les expressions logiques

II.3 L'action de lecture ou d'entre

II.4 L'action d'criture ou de sortie

II.5 Exemples
II.1 Introduction
Ce chapitre prsente les actions simples utilisant les oprations de
base dun ordinateur.

Ces actions sont :

Algorithmique


11 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Laction daffectation qui permet daffecter une variable (enregistrer
dans un emplacement mmoire) une valeur qui peut tre donne ou
calcule partir dune expression. Vous trouvez ainsi les diffrents
types dexpressions : les expressions arithmtiques et les expressions
logiques.
Laction de lecture qui met en ouvre lopration de lecture dune valeur
partir de lentre standard dun ordinateur et de lenregistrer dans un
emplacement mmoire.
Laction dcriture qui permet dafficher, sur la sortie standard dun
ordinateur, un rsultat qui peut tre alphabtique ou numrique.

II.2 L'action d'affectation
Laction daffectation a pour effet dcrire la valeur dune variable dans la
zone mmoire rserve la variable en question.

Syntaxe
Une action daffectation a la forme suivante :

<identificateur de variable> <expression>

Nous distinguons deux types dexpressions :arithmtiques ou logiques

Traitement
Lexcution dune action daffectation consiste dabord valuer la
valeur de l'expression et ensuite crire cette valeur dans l'espace
mmoire correspondant la variable en question.

Compatibilit de types
Une action d'affectation doit se faire entre deux types compatibles.
C-a-d la valeur affecte doit tre d'un type compatible avec celui de la
variable identifie qui reoit cette valeur (entier un entier, entier un
rel, boolen un boolen,...).
Il n'est pas possible d'affecter un rel un entier ou un boolen un
caractre,...

II.2.1 Les expressions arithmtiques

II.2.1 Les expressions logiques


Algorithmique


12 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis


II.2 L'action d'affectation
II.2.1 Les expressions arithmtiques
Une expression arithmtique exp_arith peut tre :
une constante, exemple 5
ou
une variable, exemple x
ou
exparith~ oparith exparith~ ou oparith designe un operateur arithmetique
de l'ensemble , -, /, *}
Exemple d'expression arithmtique : 5
X
(y/2) x*3

Exemple d'action daffectation : H (y/2) + x*3
II.2 L'action d'affectation
II.2.1 Les expressions logiques
Une expression logique exp_log est une expression qui peut avoir vrai
ou faux comme valeur. Elle peut tre :
une constante boolenne (vrai ou faux)
une variable boolenne
<exp_arith> op_rel <exp_arith>
o op_rel dsigne un oprateur relationnel de comparaison
appartenant l'ensemble {<,>, <=, >=, =}
<exp_log> op_log <exp_log>
o op_log est un oprateur logique exemple ET (conjonction), OU
(disjonction), OU NON

(ngation))

Algorithmique


13 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis


avec, pour deux expressions logiques e et f :

e ET f est - vraie si e est vraie et f est vraie.
fausse si e est fausse ou f est fausse
e OU f est - vraie si e est vraie ou f est vraie.
fausse sinon
NON e est - vraie si e est fausse
fausse sinon

Exemple d'expressions logiques : (x < 6)
Vrai
(x < 6) ET (y = 206)
non (x = y)

L'expression (x < 6) ET (y = 206) vaut vrai si x<6 et y=206. Dans le
cas contraire elle vaut faux. Par exemple, elle est vraie pour x = 5 et y
=206 et fausse pour x = 7 ou bien y = 300
L'expression NON (x = y) vaut vrai si on n'a pas x=y c-a-d si x = y.
Dans le cas contraire elle vaut faux.
Exemple d'action d'affectation: Z (x < 6) ET (y = 206)
II.3 L'action de lecture ou d'entre
Une action de lecture permet lutilisateur dintroduire des informations
pour effectuer un traitement par lordinateur. Par exemple, liste de
nombres ordonner, liste de noms dtudiants archiver, etc.. Ces
informations sont ranges dans des cases mmoires.

Syntaxe

L'action de lecture a la forme :

Lire (identificateur de variable)

ou plus gnralement :

Lire (liste d'identificateurs de variables spars par des virgules `,)

Cette action permet de lire une ou plusieurs valeurs partir des
priphriques d'entres (par dfaut : c'est le clavier) et puis les ranger

Algorithmique


14 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

dans les cases mmoires associes aux variables identifies dans
laction.

Traitement

L'action lire (x) renferme trois oprations internes:
Lecture dune valeur partir du clavier.
Vrification de la compatibilit du type de la valeur lue avec le type de la
variable.
Ecriture de la valeur dans l'espace mmoire rserv la variable x.
L'action lire (x, y) permet de lire deux valeurs partir du clavier : la
premire valeur est pour x et la deuxime pour y (il faut respecter
l'ordre de l'appellation).
II.4 L'action d'criture ou de sortie
Une action d'criture permet dafficher des rsultats sur un priphrique
de sortie (par dfaut : lcran).
Un rsultat peut tre :
Une chane de caractres dlimits par des apostrophes
La valeur dune variable dont lidentificateur est spcifie dans laction
La valeur dune expression
Syntaxe

L'action dcriture est de la forme :
Ecrire (expression)
Ou plus gnralement :
Ecrire (liste d'expressions spares par des Virgules `,)
Ecrire (expression1, expression2, ., expression n)

Ou une expression peut tre :
Une chane de caractres dlimits par des apostrophes
Une expression arithmtique.
Traitement
Laction Ecrire (expression1, expression2, ., expressionn) amne
l'ordinateur, pour chaque i {1, ., n}, valuer tout d'abord
l'expression numro i et ensuite afficher la valeur obtenue
II.5 Exemples
Considrons la squence suivante dactions :

Algorithmique


15 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Lire (Somme)
Lire(Nombre)
Ecrire (`La MOYENNE est: , Somme/Nombre)

Pour des valeurs en entre : 120 et 10, le rsultat qui sera affich est le
suivant :

La MOYENNE est: 12


Exemple 1:
Un algorithme qui lit deux entiers X
et Y et qui affiche leurs valeurs
avant et aprs permutation

Algorithme permutation
Var A , B : entier
Debut
Ecrire ('Introduire deux
entiers')
Lire (A , B)
Ecrire ('Avant permutation A = ',A,'
et B =',B)
Ecrire ('Aprs permutation A = ',B,'
et B =',A)
Fin






Exemple 2:
Un algorithme qui lit trois entiers et qui
calcule et affiche leur somme, leur produit
et leur moyenne

Algorithme somme_produit_moyenne
Var A , B , C : entier
S , P , M :rel
Dbut
Ecrire ('Donnez trois entiers A , B
,C')
Lire (A , B , C)
S <-- A+B+C
Ecrire ('la somme est = ', S)
P <-- A*B*C
Ecrire ('le produit est = ', P)
M <-- (A+B+C)/3
Ecrire ('la moyenne est = ', M)
Fin



III Les actions conditionnelles

III.1 Introduction


III.2 L'action conditionnelle simple


III.3 L'action conditionnelle choix multiples

Algorithmique


16 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis


III.1 Introduction
Ce chapitre prsente des actions exploitant les oprations de
comparaison qui peuvent tre effectues par lordinateur.
Deux actions sont prsentes :
Laction conditionnelle simple qui consiste valuer une condition
(expression logique valeur vrai ou faux) et deffectuer le traitement
relatif la valeur de vrit trouve.
Laction conditionnelle choix multiple qui consiste valuer une
expression qui nest pas ncessairement valeur boolenne (elle peut
avoir plus de deux valeurs) et selon la valeur trouve, effectue un
traitement.
III.2 L'action conditionnelle simple
Une condition est une expression logique. Une action conditionnelle
permet dvaluer une condition et selon sa valeur elle excute 0 ou
plusieurs actions. Deux formes dactions conditionnelles sont considres
Forme 1 :
Si condition
Alors action(s)
Fin si

Forme 2 :
Si condition
Alors action(s) 1
Sinon action(s) 2
Fin si

Algorithmique


17 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Dans cette forme, la condition
est value. Si elle vaut vrai alors
c'est la squence d'actions qui
est excute sinon c'est l'action
qui suit l'action conditionnelle
dans l'algorithme qui est
excute.

Dans cette forme, la condition
est value. Si elle vaut vrai
alors c'est la premire
squence d'actions qui est
excute sinon c'est la
deuxime qui est excute
Exemple 1
Un algorithme qui lit
un nombre entier et
qui affiche sa valeur
absolue

Algorithme
valeur_absolue
Var X , A : entier
Dbut
Ecrire ('Donner un
nombre entier')
Lire (X)
Si X > 0
Alors A X
Sinon A X
Fin si
Ecrire ('la valeur
absolue de ', X ,' est
gale ', A)
Fin





Exemple 2
Un algorithme qui lit
trois nombres entiers et
qui affiche leur
maximum

Algorithme max_3
Var A, B, C, Max :
entier
Dbut
Ecrire ('Donnez trois
entiers: A, B, C ')
Lire (A ,B ,C )
Si A > B
Alors si A > C
Alors
Max
A
Sinon
Max
C
Fin si
Sinon si B >
C
Alors
Max
B
Sinon
Max
C
Fin si
Fin si
Ecrire ('le max de ces
trois entiers est =
',Max)
Fin
Version 2

Exemple3
Un algorithme pour la rsolution d'une quation du
premier degr
Algorithme quation_1_degre
Var A , B : entiers
Dbut
Ecrire ('Donnez les deux cfficients de l'quation du
1er degr :')
Lire (A , B)
Si A=0
Alors
si B=0
Alors
Ecrire ('Solution infinie')
Sinon
Ecrire ('Solution indtermine')
Fin si
Sinon
Ecrire ('Solution unique = ',-B/A)
Fin si
Fin




III.3 L'action conditionnelle choix multiples
Une action conditionnelle choix multiple permet dexcuter un bloc
dactions parmi plusieurs selon la valeur produite par une expression qui
joue le rle dun slecteur.

Algorithmique


18 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

La forme gnrale de cette action est la suivante:
Selon <slecteur> faire
valeur 1 : action(s)
valeur 2 : action(s )
valeur 3 : action(s)
....
valeur n : action(s)
Sinon action (s) /* facultative
Fin selon
Le prfixe sinon peut ou non apparatre et il regroupe les valeurs qui
nont pas t explicitement spcifies. Il constitue le dernier choix.



Exemple 1:
Un algorithme qui lit un nombre entier et qui
affiche sa valeur absolue

Algorithme valeur_absolue
Var X , A : entier
Dbut
Ecrire ('Donner un nombre entier')
Lire (X)
Si X > 0
Alors A X
Sinon A X
Finsi
Ecrire ('la valeur absolue de ', X ,' est
gale ', A)
Fin

Algorithmique


19 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

IV Le traitement itratif
IV.1 Introduction
Ce chapitre prsente les actions qui permettent de rpter un
traitement (squence dactions) un nombre de fois connu ou inconnu
lavance.
Vous trouvez ainsi, pour le nombre de fois inconnu lavance, les
actions suivantes :
Tant que qui permet de rpter un traitement tant quune condition
est vraie.
Rpter qui permet de rpter un traitement jusqu ce quune
condition devienne vraie.
Pour rpter un traitement un nombre de fois connu lavance, vous
allez voir laction rptitive Pour.
Vous aurez aussi des tableaux de comparaison des diffrentes
actions de rptition pour tre capable de dcider chaque fois
laction qui convient un traitement qui se rpte.
IV.2 L'action "Tant que"
Laction itrative (ou rptitive ou de rptition) Tant que permet de
rpter lexcution dun bloc dactions 0 ou plusieurs fois.

Syntaxe

Elle a la syntaxe suivante :
Tant que condition faire
action(s)
Fin tant que

O condition est une expression logique.

Traitement
Tant que la condition fournit la valeur vrai, le bloc dactions est excut
et on revient pour rpter la mme chose. Si la condition fournit la
valeur faux alors cest laction qui suit laction tant que dans lalgorithme
est excute.

Exemple


Algorithmique


20 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

calcul de la factoriel d'un entier

Algorithme factoriel version 1
Var i, n, fact : entier
Dbut
Ecrire ('Entrez un entier :')
Lire (n)
Fact 1
i 1
Tant que (i<=n) faire
Fact fact * i
i i + 1
Fin tant que
Ecrire ('le factoriel de ',n,' est = ',fact)
Fin


IV.3 L'action "Rpter"
Laction itrative (rptitive ou de rptition) rpter permet de rpter
lexcution dun bloc dactions 1 ou plusieurs fois.

syntaxe

Laction Rpter a la forme gnrale suivante :

Rpter
action (s)
jusqu' condition

Traitement


Algorithmique


21 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Le bloc dactions est excut la premire fois. Ensuite la condition est
value.
Tant que la condition fournit la valeur vrai, le bloc dactions est excut.
Autrement dit le bloc dactions continu sexcuter au moins une fois et
jusqu ce que la condition devienne fausse.

Tableau comparatif entre les actions itratives tant que et rpter

Tant que Rpter
La condition est value avant le bloc
d'actions
La condition est value aprs le bloc
d'actions
Le bloc d'actions est excut au moins 0 fois Le bloc d'actions est excut au moins 1
fois

Exemple

Calcul de la factorielle d'un entier en sassurant que lentier est l 0

Algorithme factoriel version 2
Var i, n, fact : entier
Dbut
Rpter
Ecrire ('Entrer un entier :')

Algorithmique


22 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Lire (n)
Jusqu n >= 0
Fact 1
i 1
Tant que (i<=n) faire
fact fact * i
i i + 1
Fin Tant que
Ecrire (' La factorielle de ',n,' est = ',fact)
Fin
Autres exemples

Exemple1

calcul de la moyenne des notes d'une classe
Algorithme moyenne_classe
Var S, M, N, i : entier
Debut
i 1
S 0
Rpter
Ecrire('Introduire la note de l'tudiant N ',i,' Note =')
Lire(N)
S S+N
i i+1
Jusqu' (i>30)
MS/30
Ecrire ('La moyenne de la classe est ',M)
Fin

Algorithmique


23 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis


Exemple 2

Lecture d'un nombre >0 et affichage de son carre.
Algorithme carr
Var n : rel
Dbut
Rpter
Ecrire ('Introduire un nombre entier >0')
Lire (n)
Jusqu' (n>=0)
Ecrire ('Le carre de ',n, est :', n*n)
Fin


Exemple 3
Affichage des nombres entiers entre 3 et 8.
Algorithme affichage_de_3__8
Var i : entier
Dbut
Rpter
Ecrire (i, ' ')
i i+1
Jusqu' (i > 8)
Fin

Exemple

calcul de la factoriel d'un entier en s'assurant que l'entier entr
est _ 0

Algorithme factoriel version 2
Var i, n, fact : entier
Dbut

Rpter
Ecrire ('Entrer un entier :')
Lire (n)
Jusqu' n>= 0
Fact 1
i 1
Tant que (i<=n) faire
Fact fact * i
i i + 1
Fin tant que
Ecrire (' le factoriel de ',n,' est = ',fact)
Fin

Algorithmique


24 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis




IV.4 L'action "Pour"

Laction itrative (ou rptitive ou de rptition) pour permet dexcuter
un bloc dactions un nombre n de fois connu lavance avec n>=0.

Syntaxe

Laction Pour a la forme gnrale suivante :

Pour compteur de valeur initiale valeur finale [pas valeur] faire
action(s)
Fin pour

Si pas _ 0
compteur valeur initiale
Tan que compteur <= valeur final faire
action(s)
compteur compteur valeur
Fin tan que
Si pas 0
compteur valeur initiale
Tan que compteur >= valeur final faire
action(s)
compteur compteur valeur
Fin tan que
Pas valeur est optionnel. Il explicite le pas dincrmentation quand il est
positif et de dcrmentation quand il est ngatif.
Un compteur identifi par un identificateur de variable est initialis
<valeur initiale> et qui sincrmente jusqu atteindre <valeur finale>.
Le traitement est rpt de <valeur compteur> gale <valeur
initiale> jusqu <valeur compteur> gale <valeur finale>.
Le pas dincrmentation est un nombre entier relatif (quand il est
ngatif, cest une dcrmentation). Par dfaut le pas dincrmentation
est gale 1, dans quel cas on a pas spcifier <pas valeur>
Initialement le compteur reoit <valeur initiale>
Ensuite les actions suivantes sont rptes
valuer la condition <valeur compteur> <= <valeur finale> si le pas
est positif, et, <valeur compteur> >= <valeur finale> si le pas est
ngatif.

Algorithmique


25 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Si la condition est value vrai alors
le bloc dactions est excut
la valeur du compteur est mise jour avec le pas
dincrmentation cette tape est rpte
Une fois la condition devient fausse, laction suivante excuter est le
qui suit laction pour.
Exemple
Calcul de la somme des n premiers entiers
Algorithme Somme_n_premiers_entiers
Var i,S,n:entier
Debut
Ecrire ('Donner un nombre entier :')
Lire (n)
S 0
Pour i de 1 n faire
S S+i
Fin pour
Ecrire ('La Somme des ',n,' premier entier est : ',S)
Fin

Version 2
Calcul de la factorielle d'un entier en sassurant que lentier est l 0

Algorithme factoriel version 3_pas positif
Var i, n, fact : entier
Dbut
Rpter
Ecrire ('Entrer un entier :')
Lire (n)
Jusqu n >= 0
Fact 1
Pour i de 1 n faire
Fact fact * i
Fin Pour
Ecrire (' La factorielle de ',n,' est = ',fact)
Fin



Algorithmique


26 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

V Les procdures et les fonctions
V V.1 Introduction
Quand on a crire un algorithme pour la rsolution dun problme
complexe, nous avons intrt dcomposer le problme en des sous
problmes. Pour chacun de ces sous problmes on crit un sous
programme qui sera appel par lalgorithme principal. Un sous
programme peut tre une procdure ou une fonction.
Un sous programme est spcifi par un nom et ventuellement une
liste de paramtres formels (paramtres dclaratifs). Les paramtres
formels, sils existent, ils spcifient des donnes et/ou des rsultats du
sous problme rsoudre.
Vous allez voir dans ce chapitre les procdures et les fonctions comme
deux types de sous programmes ou modules.
V.2 Les procdures

V.2.1 Dclaration

Une procdure a la forme gnrale suivante :

Procdure Nom (liste de paramtres formels avec leurs types spars
par des `,)
Dclaration des variables internes (ou de travail) de la procdure
Dbut

Algorithmique


27 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Liste des actions de la procdure
Fin

V.2 Les procdures

V2.2 Types et modes de passage des paramtre

V2.2.1 Types des paramtres formels

Il existe trois types de paramtres dans un sous programme :
paramtres donnes : ils ne changent pas de valeur dans le sous
programme. Leurs valeurs sont plutt utilises.
Paramtres rsultats : ils nont une signification quaprs lexcution
du sous programme.
Paramtres donnes / rsultats : ils ont une valeur avant lexcution
du sous programme et qui peut changer aprs lexcution.

V.2 Les procdures

V2.2 Types et modes de passage des paramtre

V2.2.2 Modes de passage des paramtre formels

Il existe deux modes de passage de paramtres :
Passage par valeur : (paramtres donnes) le paramtre formel
reprsente une variable locale au sous programme et tout changement
de paramtre na pas deffet sur le paramtre effectif. A lappel, les
valeurs des paramtres effectifs sont rcuprs dans les paramtres
formels sur les quels le traitement seffectue.
Passage par adresse : (paramtres donnes/rsultats ou paramtres
rsultats) le principe consiste associer aux paramtres formels

Algorithmique


28 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

ladresse des paramtres effectifs. Toute modification apporte aux
paramtres formels affecte les paramtres effectifs.
Dans la dclaration suivante :
Procedure test (p
1
: type
1
, p
2
: type
2
, ., p
n
: type
n
) les paramtres p
1
,
p
2
, . , p
n
sont passs par valeur.
Dans la dclaration suivante :
Procedure test (p
11
:type
11
,., p
1n
: type
1n
, Var p
21
:type
21
,.Var
p
2n
:type
2n
)
les paramtres p
11
, p
12
, . , p
1n
sont passs par valeur et les paramtres
p
21
, p
22
, . , p
2n
sont passs par adresse.
Remarques
Les paramtres passs par adresse sont prcds du mot cl Var.
Si Type
i
et Type
j
sont les mmes alors
la spcification p
i
: type
i
, p
j
: type
j
peut etre remplace par la
spcification p
i
, p
j
: type
i

la spcification Var p
i
: type
i
, Var p
j
: type
j
peut etre remplace par Var
p
i
, p
j
: type
i
.
V.2 Les procdures

V.2.3 Appel d'une procdure

Dans un algorithme principal, une procdure est appele dans une
action en spcifiant son nom et ses paramtres qui deviennent des
paramtres effectifs avec le mode de passage respectif (ou rels). Ainsi,
si une procdure est dclare avec lentte

Procdure test (p
11
: type
11
,., p
1n
: type
1n
, Var p
21
: type
21
,.Var p
2n
:
type
2n
) alors, au moment de lappel avec les paramtres rels ou
effectifs q
11
, .q
1n
passs par valeur et les paramtres q
21
, .q
2n
passs
par adresse,
laction prend la forme : test (q
11
,., q
1n
, & q
21
,.& q
2n
)

Algorithmique


29 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Les paramtres formels et les paramtres effectifs peuvent porter le
mme nom.

Exemple :
V2.3.1 Exemple d'un appel d'une procdure

Une procdure pour le calcul et laffichage de la somme des n premiers
entiers.



Un algorithme principal qui fait appel cette procdure effectue la saisie
dune valeur pour n et fait appel la procdure dans une action en
spcifiant le nom de la procdure et une valeur de n qui devient un
paramtre
effectif.





Version 2
V.2 Les procdures


Algorithmique


30 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

V.2.4 Exemples d'une procdure

Une procdure qui permet de calculer la factorielle dun entier positif n

Procdure factoriel (n : entier, Var f : entier)
Var i : entier
Dbut
f 1
i 1
Tant que (i<=n) faire
f f * i
i i + 1
Fin Tant que
Fin

Un algorithme principal qui fait appel cette procdure pour calculer et
afficher la factorielle dun nombre entier saisi au clavier peut etre le
suivant :

Algorithme factoriel_principal_1
Var i, n, fact : entier
Dbut
Rpter
Ecrire ('Entrer un entier :')
Lire (n)
Jusqu' n>= 0
Factoriel (n, fact )
Ecrire (' La factorielle de ',n,' est = ', fact )
Fin
V.3 Les fonctions
Une fonction est un sous programme qui rend un rsultat unique de
type scalaire (entier, rel, caractre, boolen).

V.3.1 Dclaration

Une fonction a la forme gnrale suivante :

Fonction Nom (liste de paramtres formels avec leurs types spars
par des `,) : type_rsultat

Algorithmique


31 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Dclaration des variables internes (ou de travail) de la Fonction
Dbut
Liste des actions de la fonction
Fin

Les paramtres formels de la fonction ne peuvent tre que des
paramtres donnes.

V.3 Les fonctions

V.3.2 Appel d'une fonction

Comme une fonction rend un rsultat unique, son appel seffectue dans
un algorithme principal en affectant le rsultat retourn une variable
dclare dans cet algorithme. Lappel prend la forme suivante.
Identificateur Nom_fonction (liste de paramtres effectifs)
Les types de la variable identifie et du rsultat retourn doivent tre
compatibles.
V.3 Les fonctions

V.3.3 Exemples d'une fonction

Une fonction pour le calcul de la somme des n premiers entiers.



Algorithmique


32 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Un algorithme principal qui fait appel cette fonction effectue la saisie
dune valeur pour n et fait appel la fonction dans une action qui
affecte le rsultat quelle retourne une variable dclare dans
lalgorithme.


VI La rcursivit

VI.1 Introduction
Ce chapitre prsente une classe particulire dalgorithmes. Ce sont les
algorithmes rcursifs. Un algorithme est dit rcursif sil fait appel lui
mme. Nous allons dfinir la rcursivit et, ensuite, prsenter des
exemples dalgorithmes rcursifs.
VI.2 Dfinition
Une procdure ou fonction est dite rcursive si elle fait appel elle
mme pour faire un traitement particulier. Nous distinguons deux types
de rcursivit : la rcursivit directe o un algorithme contient une
rfrence explicite lui mme et une rcursivit indirecte o un
algorithme p contient une rfrence un autre algorithme q qui fait une
rfrence directe ou indirecte p. Un algorithme rcursif est dfini par
une condition darrt et un appel rcursif.


Algorithmique


33 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Il a la forme gnrale suivante :

Si condition darrt
Alors traitement de base
Sinon Appel Rcursif
Fin si

La condition darrt doit tre dfinie dans un algorithme rcursif sinon
ce dernier boucle infiniment. Pour construire un algorithme rcursif il
faut suivre les tapes suivantes :
Dfinir les paramtres de lalgorithme,
Dfinir la condition darrt,
Dcomposer le problme de manire rcursive c-a-d dfinir le
traitement de base et lappel rcursif.
Exemple
Calcul de la factorielle d'un nombre entier n :
Paramtre : n
Condition d'arrt : n = 0 (0 ! = 1)
n ! = n * (n-1) !
Fonction Factorielle (N:entier) : entier
Dbut
Si N = 0
Alors
Factorielle 1
Sinon
Factorielle N * Factorielle (N-1)
Fin si
Fin

Pour la valeur 4, la factorielle de 4 attend le rsultat de la factorielle de 3
ainsi de suite, jusqu faire appel la factorielle de 0 et l la condition
darrt est vrifie et la valeur est retourne factorielle(0), par la suite
factorielle(1) . jusqu la factorielle de 4. On aura ainsi le rsultat et le
traitement rcursif sarrte.

VI.3 Exemple: Tour de Hanoi
On dit que les Tours de Hanoi a pour origine un rituel des prtres de
Brahman pour prdire la fin du monde. Au dbut du jeu, on dispose de
trois tours et d'un certain nombre d'anneaux de diamtres diffrents qui

Algorithmique


34 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

sont empils en ordre dcroissant sur l'une des trois tours. Il s'agit de
dplacer la pile d'anneaux de cette premire tour sur l'une des deux
autres tours (avant la fin du monde) selon les rgles suivantes :
On ne peut dplacer qu'un anneau la fois
Un anneau ne doit tre dplac que d'une tour une autre
On ne doit jamais dposer un anneau sur un autre de plus petit
diamtre
Remarque:
La procdure Dplacer (A,B) permet de dplacer un anneau dune tour
A vers une tour B
La procdure Hanoi (Dep,Int, Arrive :caractres ,N:entier) rsout le
problme de dplacement des anneaux dune tour de dpart jusqu
une tour darrive.
Elle reoit comme paramtres Dep, Int, Arrive pour identifier
respectivement les tours de dpart, interne et darrive. Le paramtre
entier N dsigne le reste des anneaux dplacer

Procdure Hanoi (Dep,Int,Arriv :caractres ,N:entier)
Dbut
Si N=1
Alors Dplacer (Dep,Arrive)
Sinon Hanoi (Dep,Arrive,Int,N-1)
Dplacer (Dep,Arrive)
Hanoi (Int,Dep,Arrive,N-1)
Fin si
Fin







VII Les tableaux
Nous avons vu et manipul dans les chapitres prcdents les types
simples de donnes savoir les types : entier, rel, caractre et

Algorithmique


35 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

boolen. Il existe des types de donnes composs construits sur la
base des types simples pour structurer plusieurs informations ayant des
types simples. Vous allez voir dans ce chapitre le type tableau comme
type compos. Plus particulirement les tableaux une ou deux
dimensions. Pour chacun des types, nous prsentons la dclaration, la
manipulation et quelques exemples dutilisation.
II.2 Dfinition d'un tableau

Un tableau est une structure de donnes homogne qui sert
stocker, dans une mme variable, un nombre fini dlments de
mme type. En mmoire, est associ cette variable un espace
mmoire dimensionn un nombre fini de cases conscutives
pouvant contenir ces lments. La variable identifie est de type
tableau. Elle peut tre dclare de deux manires diffrentes. Nous
distinguons deux types de tableau : les tableaux une dimension et
les tableaux deux dimensions .
Tableau une dimension de 5 cases

Une case i correspond llment numro i du tableau.
Tableau deux dimensions de 5 colonnes et 4 lignes

Algorithmique


36 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis



Une case i,j correspond la case de la ligne i et de la colonne j.
VII.3 Tableaux une dimension
VII.3.1 Dclaration d'un tableaux une dimension
La dclaration d'un tableau une dimension s'effectue selon deux
mthodes

Mthode 1 : en utilisant le type tableau

Var identificateur : Tableau [indice 1.. indice2] de type_contenu

Exemple:

Var A : Tableau [1 .. 10] de entier

Mthode 2 : en construisant un nouveau type

Type nom_type = tableau [indice1 .. indice2] de type_contenu
Var identificateur : nom_type

Le type identifi par nom_type est un nouveau type dfini qui sajoute
la liste des types qui peuvent tre utiliss dans les dclarations dun
algorithme qui contient la dfinition de ce type.

Exemple:

Type tableau_de_10_entiers = Tableau [1 .. 10] de entier
Var A : tableau_de_10_entiers
VII.3 Tableaux une dimension

Algorithmique


37 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

VII.3.2 Manipulation d'un tableau une dimension

Accs une case
Les cases dun tableau une dimension sont accessibles en utilisant
lidentificateur de la variable ainsi que lindice (ou le numro de la case)
comme rfrence. Cet indice doit tre entre indice1 et indice2.
id [expression]
dsigne une case du tableau id. Le numro de la case est donn par la
valeur de lexpression.

Exemple : accs une case

Si un tableau A est dclar comme suit :

Var A : Tableau[1.. 10 ] de entier
ou
Type tableau_de_10_entiers = Tableau [1.. 10] d'entier
Var A : tableau_de_10_entiers
Alors
A[3] dsigne la case numro 3 du tableau A
A[10] dsigne la case numro 10 du tableau A
A[i] dsigne la case numro i du tableau A avec i une variable devant
avoir une valeur entre 1 et 10.

Etant donn que les cases dun tableau correspondent un espace
conscutif doctets, elles jouent le rle de variables. On peut ainsi les
utiliser dans des actions daffectation, de lecture, dcriture, etc., .

Exemple : utilisation dune case
A[3] 100
Lire(A[10])
VII.4 Tableaux deux dimensions

VII.4.1 Dclaration d'un tableau deux dimensions

La dclaration d'un tableau deux dimensions s'effectue en deux
mthodes
Mthode 1
Var identificateur:Tableau [indice_lig_1.. indice_lig_2 , indice_col_1..
indice_col_2] de type_contenu

Algorithmique


38 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Exemple: (matrice 10 lignes et 2 colonnes)

Var Matrice : Tableau[1 .. 10 , 1 .. 2] de entier
Mthode 2
Type nom_type = Tableau [indice_lig_1 .. indice_lig_2 , indice_col_1 ..
indice_col_2] de type_contenu

Var identificateur : nom_type

Exemple:

Type tableau_10X2_en = Tableau [1.. 10 , 1.. 2] de entier
Var Matrice : tableau_10X2_en

VII.4 Tableaux deux dimensions

VII.4.2 Manipulation d'un tableau deux dimensions

Accs une case :

Les cases dun tableau deux dimensions sont accessibles en utilisant
lidentificateur du tableau, lindice de la ligne et lindice de la colonne
comme rfrence. Le premier indice doit tre entre indice_lig_1 et
indice_lig_2 et le deuxime doit tre entre indice_col_1 et indice_col_2.

Id[exp1 , exp2]

dsigne la case du tableau id. Le numro de ligne de cette case est la
valeur de exp1 et le numro de la colonne est la valeur de exp2.

Exemple: accs une case

Si un tableau Tab est dclar comme suit :

var tab : Tableau[1 .. 10 , 1 .. 2 ] de entier
ou
Type tableau10X2_en = Tableau [1 .. 10 , 1 .. 2 ] d'entier
Var tab : tableau_de_10_entiers

Alors

Algorithmique


39 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

tab[3 , 2], dsigne la case de la ligne 3 et la colonne 2 du tableau tab
tab[i , j] Dsigne la case de la ligne i et de la colonne j du tableau
deux dimensions tab avec i , respectivement j deux variables ayant
des valeurs entre 1 et 10 , respectivement entre 1 et 2.

Etant donn que les cases dun tableau correspondent un espace
conscutif doctets, elles jouent le rle de variables. On peut ainsi les
utiliser dans des actions daffectation, de lecture, dcriture, etc., .

Exemple: utilisation dune case

tab[3 , 2] 100
Lire(tab[10 , 1])

VII.5 Exemples

Exemple 1

Calcul de la moyenne des notes de 8 tudiants.

Algorithme moyenne_8_etu_version1_avec tableau
Var Note : Tableau [1 .. 8] de rel
i : entier
S, M : rel
Dbut
S <-- 0
Pour i de 1 8 faire
Ecrire ('Note de l'tudiant numro ',i,' :')
Lire (Note[i])
S <-- S + Note [i]
Fin pour
M = S/8
Ecrire (' La moyenne de la classe est : ',M)
Fin

Dans le cas de cet exemple lutilisation de la structure de donnes
tableau nest pas ncessaire comme on na pas besoin de garder une
trace des nombres saisis pour un traitement qui suit. On peut avoir une
version en utilisant une seule variable relle Note.

Algorithme moyenne_8_etu_version2_sans_tableau
Var Note, S, M : rel

Algorithmique


40 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

i : entier
Dbut
S <-- 0
Pour i de 1 8 faire
Ecrire ('Note de l'tudiant numro ',i,' :')
Lire (Note)
S <-- S + Note
Fin pour
M = S/8
Ecrire (' La moyenne de la classe est : ',M)
Fin

Exemple2

Calcul de la moyenne des notes de 8 tudiants et affichage du nombre
d'tudiants ayant une note suprieure ou gale cette moyenne. Cet
exemple ncessite un enregistrement des notes saisies.

Algorithme moyenne_afiichage_nombre
Var Note : Tableau[1.. 8] de rels
S, M, i : entier
Dbut
S <-- 0
Pour i de 1 8 faire
Ecrire ('Note de l'tudiant numro ',i,' :')
Lire (Note[i])
S <-- S+N[i]
Fin pour
M=S/8
Ecrire ('La moyenne de la classe est ',M)
S 0
Pour i de 1 8 faire
Si (Note[i] >= M)
Alors
SS + 1
Fin Si
Fin pour
Ecrire ('Le nombre dtudiants ayant une note suprieure ou gale la
moyenne : `, M, `est :`, S)
Fin


Algorithmique


41 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Exemple 3

Calcul du produit scalaire de deux vecteurs de taille 10.
Algorithme produit_scalaire
Type Vecteur = Tableau [1 ..10 ] de entier
Var V1, V2 : Vecteur
S, i : entier
Dbut
S <-- 0
Pour i de 1 10 faire
Ecrire ('entrer lment num ',i,' du vecteur V1 : ')
Lire (V1[i])
Ecrire (`entrer element num `,I, ` du vecteur V2 : )
Lire (V2[i])
S <-- S + V1[i] * V2[i]
Fin pour
Ecrire ('Le produit scalaire des deux vecteurs est : `, S)
Fin

Exemple 4

Calcul et affichage du produit de deux matrices carres de taille 10.
Algorithme produit_de_deux_matrices
Type Matrice = Tableau [1 ..10 , 1.. 10] de entier
Var M1, M2 , Res : Matrice
I, j, k : entier
Dbut
Pour i de 1 10 faire
Pour j de 1 10 faire
Ecrire ('entrer llment num ',i, `,, j,' de la matrice M1 : ')
Lire (M1[i , j])
Ecrire (`entrer llment num `,i, `,, j, de la matrice
M2 : )
Lire (M2[i , j])
Fin pour
Fin pour
Pour i de 1 10 faire
Pour j de 1 10 faire
Res [i , j] 0
Pour k de 1 10 faire
Res [i , j]Res [i , j] + M1[i , k] * M2[k , j]

Algorithmique


42 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Fin pour
Fin pour
Fin pour
Ecrire (`produit des deux matrices, `retour la ligne)
Pour i de 1 10 faire
Pour j de 1 10 faire
Ecrire (Res [i , j], ` `)
Fin pour
Ecrire (`retour la ligne)
Fin pour
Fin

Le problme de calcul et daffichage du produit de deux matrices peut
tre dcompos en trois sous problmes : Saisie, calcul du produit et
affichage. Nous pouvons ainsi dvelopper une procdure pour chacun
des sous problme. Lalgorithme principal fera appel ces procdures.

La version rsultante est la suivante:
Saisie(A, n, m) est une procdure qui permet de saisir les lments
dune matrice n x m identifie par A.
Calcul_produit (A , B, C, n) est une procdure qui permet de calculer,
dans une matrice C, le produit de deux matrices A et B de taille n.
Affichage (A, n, m) est une procdure daffichage des lments dune
matrice A n lignes et m colonnes.

Procdure Saisie(Var A : Matrice , n , m : entier)
Var i, j : entier
Dbut
Pour i de 1 n faire
Pour j de 1 m faire
Ecrire ('entrer llment num ',i, `,, j,' de la matrice :
')
Lire (A[i , j])
Fin pour
Fin pour
Fin

Procdure Calcul_produit (A , B : Matrice , Var C : Matrice , n : entier)
Var i , j , k : entier
Dbut
Pour i de 1 n faire

Algorithmique


43 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Pour j de 1 n faire
C[i , j] 0
Pour k de 1 n faire
C[i , j] C[i , j] + A[i , k] * B[k , j]
Fin pour
Fin pour
Fin pour
Fin
Procedure Affichage (A : Matrice , n, m : entier)
Var i, j : entier
Dbut
Pour i de 1 n faire
Pour j de 1 m faire
Ecrire (A[i , j], ` `)
Fin pour
Ecrire (`retour la ligne)
Fin pour
Fin

Algorithme calcul_affichage_produit_de_deux_matrices
Type Matrice = tableau[1..10 , 1..10] de entier
Var M1, M2, Res : Matrice
Dbut
Saisie(

nous pouvons associer
Dans le cas de cet exemple lutilisation de la structure de donnes
tableau nest pas ncessaire comme on na pas besoin de garder une
trace des nombres saisis pour un traitement qui suit. On peut avoir une
version en utilisant une seule variable relle Note.
Algorithme moyenne_version2_sans_tableau
Var Note : rel
S, M, i : entier
Dbut
S <-- 0

Algorithmique


44 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Pour i de 1 8 faire
Ecrire ('Note de l'tudiant numro ',i,' :')
Lire (Note)
S <-- S + Note
Fin pour
M = S/8
Ecrire (' La moyenne de la classe est',M)
Fin

VIII Les algorithmes de tri
VIII.1 Introduction

Trier des informations revient rorganiser ces informations
relativement un critre donn.
Trier une liste de notes revient les ordonner en ordre croissant ou
dcroissant. Par contre trier une liste dtudiants identifis par un nom,
une date de naissance, une matricule et une moyenne revient mettre
cette liste en ordre croissant ou dcroissant sur lordre alphabtique des
noms, sur la matricule, sur la date de naissance ou bien sur la
moyenne.
L'opration de tri facilite l'accs l'information et la recherche d'un
lment dans une quantit trs grande d'informations.

Vue l'importance de l'opration de tri, plusieurs algorithmes
performants pour effectuer cette opration ont t proposs. Vous
verrez les algorithmes de :
VIII.2 Tri par slection

a)principe

Le principe de l'algorithme de tri par slection est de parcourir le tableau
dans la recherche de l'lment le plus petit et le placer sa position ;
pour le premier lment, cest la premire position du tableau.
Ce processus se refait sur le reste du tableau o la position de dbut est
augmente de 1.
A chaque tape cest le ime lment qui est rang sa position o i
varie entre indice1 et indice2 - 1. Ainsi, lindice du minimum est
initialis i, ensuite il est modifi chaque fois quil y un indice j entre
i+1 et n qui contient une valeur < au contenu de la case numro indice

Algorithmique


45 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

min. A la fin du traitement, les valeurs i et indice minimum sont
permutes.

b)La procdure de Tri par slection d'un tableau
de N entiers

La procdure de Tri par slection reoit comme paramtre le tableau de
N entiers. Ce paramtre est pass par adresse par ce quon veut
rcuprer sa mise jour aprs lappel de la procdure.
N est suppose tre dclare comme une constante dans lalgorithme
principal qui fait appel la procdure de Tri par slection du minimum.
imin est lindice du

Procdure tri_selection (Var T : tableau[1.. N] de entier)

var i, j, imin, temp : entiers
Dbut
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

VIII.3 Tri par permutation

a)principe
Le principe de l'algorithme de tri par permutation consiste placer
chaque tape le i me lment en ordre sa position o i varie entre
indice1 et indice2 - 1. Le dernier lment est bien class partir du
moment o ceux qui lui prcdent ont t bien placs. La permutation

Algorithmique


46 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

se fait systmatiquement chaque fois quun lment numro j se
trouve infrieur au i me lment placer. j varie entre i+1 et indice2.

La diffrence par rapport au Tri par slection est que :
Dans lalgorithme de Tri par slection, pour classer llment i lindice de
llment le plus petit est dabord cherch dans i_min et ensuite la
permutation seffectue entre la case i et la case i_min.
Dans lalgorithme de Tri par permutation, pour classer llment i,
chaque fois quun lment plus petit que le ime est trouv dans une
case j (j entre i + 1 et N), la permutation se fait entre llment num i
et celui num j et la recherche continue.
b)La procdure de Tri par permutation
Procdure tri_permutation (Var T : tableau[1..N] )
Var i, j, imin, temp : entier
Dbut
Pour i de 1 (N - 1) Faire
Pour j de (i + 1) N Faire
Si T[j] < T[i]
Alors
temp <-- T[i]
T[i] <-- T[j]
T[j] <-- temp
Fin si
Fin Pour
Fin Pour
Fin
VIII.4 Tri par insertion
a)principe
Le principe de l'algorithme de tri par insertion consiste placer
chaque tape le i me lment sa position sachant que i-1 lments
ont t dj bien placs avec i varie entre indice1 + 1 et indice2. Pour
ce faire, chaque tape il faut :
Chercher une position dinsertion i_insert du ime lment,
Si la position est parmi les i-1 positions qui ont t occupes alors :
dcaler vers la droite les lments de i_insert jusqu i-1,

Algorithmique


47 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

ranger llment la position i_insert
Si non placer llment insrer la position i.
b)Algorithme de Tri par insertion dun tableau
de N entiers

Procedure tri_insertion (T : tableau[1..N] de entier)
Var i, j, temp :entier
Dbut
Pour i de 2 N faire
Temp <-- T[i]
i_insert <-- 1
Tantque temp > T[i_insert] ET i_insert < i Faire
j <-- j+1
Fin Tantque
Si j < i_insert
Alors
Pour j de i_insert i-1 faire
T[j+1] <-- T[j]
Fin pour
Fin Si
T[i_insert] temp
Fin pour
Fin


VIII.5 Tri bulles

Le principe de l'algorithme de tri par slection est de parcourir le tableau
dans la recherche de l'lment le plus petit et le placer sa position,
cest la premire position du tableau.
Ce processus se refait sur le reste du tableau o la position de dbut est
augmente de 1. A chaque tape cest le ime lment qui est rang
sa position o i varie entre indice1 et indice2 - 1. Le dernier lment est
bien class partir du moment o ceux qui lui prcdent ont t bien
placs.
Algorithme de Tri par slection dun tableau de N entiers

Procdure tri_selection (Var T : tableau[1.. N] de entier)


Algorithmique


48 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

var i, j, imin, temp : entiers
Dbut
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
IX Les algorithme de recherche
.1 Introduction
Dans ce chapitre, nous prsentons des algorithmes de recherche dun
lment dans un tableau. Deux types de recherche seront prsents :
la recherche squentielle qui concerne un tableau dont les lments ne
sont pas ordonns et la recherche dichotomique qui concerne les
tableaux ordonns (ou tris). Pour chaque type de recherche vous
aurez plusieurs versions dcriture de lalgorithme associ.
Nous prsentons quelques algorithmes de recherche dun lment dans
un tableau. Le premier effectue une recherche squentielle dans un
tableau dont le contenu na pas t dj ordonn. Le deuxime est

Algorithmique


49 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

algorithme de recherche dichotomique utilis dans le cas de recherche
dun lment dans un tableau ordonn (ou tri).
IX.2 Recherche squentielle
IX.2.1 Introduction
La recherche squentielle dun lment dans un tableau consiste
parcourir les cases du tableau du dbut jusqu la fin, et de comparer
chaque fois l'lment contenu dans la case l'lment recherch. Une
fois llment est trouv, lalgorithme sarrte et affiche une rponse
positive. Si le tableau a t entirement parcouru sans que llment
soit trouv, une rponse ngative est, dans ce cas, affiche.
IX.2 Recherche squentielle
IX.2.2 Prsentation de la recherche squentielle
Soit T un tableau de N entiers. Un algorithme de recherche dun
lment quelconque reoit en entre un tableau de N lments et un
lment X. Il rpond par oui si cet lment a t trouv au moins une
fois dans le tableau T et par non dans le cas contraire.
Le traitement consiste rpter la comparaison de llment X au
contenu dune case I du tableau T jusqu ce quune galit soit
trouve ; I varie entre 1 et N. Le processus sarrte si
Pour un I dans lintervalle [1..N], la condition X = T[I] est vrifie. Dans
ce cas, la rponse est positive.

Algorithmique


50 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

La condition I > N est vrifie, cest dire que tout le tableau a t
parcouru et la condition X = T[I] na pas t vrifie, X napparat pas
dans le tableau. La rponse est, dans ce cas, ngative.
IX.2 Recherche squentielle
IX.2.3 Algorithme de la recherche squentielle
Version 1

Lalgorithme suivant permet de saisir des entiers et de les enregistrer
dans un tableau, il effectue par la suite la saisie de llment chercher
et effectue la recherche squentielle. Il termine par afficher une rponse
positive si llment a t trouv ou ngative dans le cas contraire.

Un algorithme recherche_squentielle

Algorithme recherche_squentielle
Const N = valeur
Var X,I : entier
T : Tableau[1..N] de entier
Dbut
Ecrire (`Donner la taille du tableau )
Lire (N)
I<--1
Tant que I<=N faire
Ecrire (`Donner llment numro `, I)
Lire (T[I])
I I + 1
Fin Tant que
Ecrire (`Donner la valeur chercher)
Lire (X)
I<--1
Tant que T[I] <> X ET I<=N faire
I<--I+1
Fin Tant que
/* Ici la boucle tant que est interrompue une
fois la condition T[I] <> X ET I<=N devient
fausse c-a-d soit avec T[I] = X soit avec I >

Algorithmique


51 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

N*/
Si I>N
Alors
Ecrire (X,' n existe pas dans ce tableau')
Sinon
Ecrire (X,' est un lment du tableau')
/* le cas du sinon correspond NON (I>N)
tout en tant aprs lexcution de laction tant
que*/
Fin si
Fin

Version 2

Une deuxime version de lalgorithme de recherche est une Fonction ayant comme
paramtres le tableau et llment recherch et qui retourne 1 si llment a t
trouv et 0 dans le cas contraire.

Fonction recherche_squentielle (T : tableau[1..n] de entier, X : entier) : entier
Var I : entier
Dbut
I1
Tant que T[I] <> X ET I<=N faire
II+1
Fin Tant que
/* Ici la boucle tant que est interrompue une
fois la condition T[I] <> X ET I<=N devient
fausse c-a-d soit avec T[I] = X soit avec I >
N*/
Si I>N
Alors
Recherche_squentielle 0
Sinon
Recherche_squentielle 1
/* le cas du sinon correspond NON (I>N)
tout en tant aprs lexcution de laction tant
que*/
Fin si
Fin
Un algorithme principal qui fait appel la fonction recherche_squentielle peut
tre le suivant :
Algorithme recherche_squentielle2
Const N = valeur

Algorithmique


52 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Var X,I, Res : entier
T : Tableau[1..N] de entier
Dbut
I<--1
Tant que I<=N faire
Ecrire (Donner llment numro , I)
Lire (T[I])
I I + 1
Fin Tant que
Ecrire (Donner la valeur chercher)
Lire (X)
I<--1
Res recherche_squentielle(T, X)
Si Res = 0
Alors
Ecrire (X,' n existe pas dans ce tableau')
Sinon
Ecrire (X,' est un lment du tableau')
Fin si
Fin


Version 3

Une troisime version de lalgorithme de recherche est une Procdure ayant comme
paramtres le tableau, llment recherch et la rponse qui aura comme valeur 1 si
llment a t trouv et 0 dans le cas contraire.

Procdure recherche_squentielle (T : tableau[1..n] de entier, X : entier, Var Rep :
entier)
Var I : entier
Dbut
I<--1
Tant que T[I] <> X ET I<=N faire
I<--I+1
Fin Tant que
/* Ici la boucle tant que est interrompue une
fois la condition T[I] <> X ET I<=N devient
fausse c-a-d soit avec T[I] = X soit avec I >
N*/
Si I>N
Alors
Rep 0
Sinon
Rep 1
/* le cas du sinon correspond NON (I>N)

Algorithmique


53 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

tout en tant aprs lexcution de laction tant
que*/
Fin si
Fin

Un algorithme principal qui fait appel la procdure recherche_squentielle
peut tre le suivant :

Algorithme recherche_squentielle3
Const N = valeur
Var X,I, Res : entier
T : Tableau[1..N] de entier
Dbut
Ecrire (Donner la taille du tableau)
I<--1
Tant que I<=N faire
Ecrire(Donner llment numro , I)
Lire(T[I])
I I + 1
Fin Tant que
Ecrire (Donner la valeur chercher)
Lire (X)
I<--1
recherche_squentielle(T, X, Res)
Si Res = 0
Alors
Ecrire(X,' n existe pas dans ce tableau')
Sinon
Ecrire (X,' est un lment du tableau')
Fin si
Fin


IX.3 Recherche dichotomique
La recherche dichotomique dun lment dans un tableau est utilise
pour la recherche dun lment dans un tableau ordonn ou tri.
IX.3.1 Prsentation de la recherche dichotomique
Etant donn un tableau T de N entiers, la recherche dichotomique dun
entier X dans ce tableau consiste :
Diviser le tableau en deux,
Calculer lindice du milieu (division entire) dans une variable milieu,

Algorithmique


54 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Comparer llment cherch llment du milieu,
Ramener la recherche dans une des moitis [1..milieu-1] ou bien
[milieu+1..N]
Rpter la mme chose en considrant la moiti comme un tableau
initial. Lalgorithme sarrte quand llment du milieu est llment
recherch ou quand lindice dbut de la portion du tableau en cours
dpasse lindice de fin. Dans ce cas llment nest pas trouv.
IX.3 Recherche dichotomique
IX.3.3 Algorithme de la recherche dichotomique
Algorithme recherche_dichotomique
Var X,M,N, Dbut,Fin : entier
T: tableau[1..N] de entier
Dbut
Ecrire ("Donner la taille du tableau")
Lire (N)
I<--1
Tant que I<=N faire
Ecrire ("Donner llment numro ", I)
Lire (T[I])
I I + 1
Fin Tant que
Ecrire (' Donner la valeur chercher')
Lire (X)
Dbut<--1
Fin<--N
M<--(Dbut+Fin) div 2
Tant que X<>T[M] ET Debut<=Fin faire
Si X >T[M]
Alors
Dbut<--M+1
Sinon
Fin<--M-1
Fin si
M<--(Dbut+Fin) div 2
Fin Tant que
Si Dbut<=Fin
Alors
Ecrire ('lment trouv')

Algorithmique


55 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Sinon
Ecrire ('lment non trouv')
Fin si
Fin

Version 2
Une deuxime version de lalgorithme de recherche dichotomique est une fonction
qui reoit en entre un tableau et un lment recherch et retourne 1 si llment est
trouv et O si non.

Fonction recherche_dichotomique (T : tableau [1 .. N] de entier, X : entier)
Var M, Dbut, Fin : entiers
Dbut
Dbut<--1
Fin<--N
M<--(Dbut+Fin) div 2
Tant que X<>T[M] ET Dbut<=Fin faire
Si X >T[M]
Alors
Dbut<--M+1
Sinon
Fin<--M-1
Fin si
M<-- (Dbut+Fin) div 2
Fin Tant que
Si Dbut<=Fin
Alors
Recherche_dichotomique 1
Sinon
Recherche_dichotomique 0
Fin si
Fin

Un algorithme qui fait appel la fonction recherche_dichotomique est le
suivant :

Algorithme recherche_dichotomique2
Const N = Valeur
Var X,M,N, Debut,Fin, Rep : entier
T: tableau[1..N] de entier
Dbut
I<--1
Tant que I<=N faire
Ecrire ("Donner llment numro ", I)
Lire (T[I])
I I + 1
Fin Tant que

Algorithmique


56 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Ecrire ("Donner la valeur chercher")
Lire (X)
Rep recherche_dichotomique(T, X)
Si Rep = 1
Alors
Ecrire('element trouv')
Sinon
Ecrire('element non trouv')
Fin si
Fin

X Les chanes de caractres
.1 Introduction

Ce chapitre prsente le type de donnes chaine de caractres qui peut
etre manipul comme un tableau de caractres mais qui diffre dans la
dclaration. Nous allons prsenter la dclaration, la manipulation ainsi
que quelques exemples dutilisation.
X.2 Dfinition

Une chane de caractres est une structure de donnes homogne qui
sert stocker, dans une mme variable, un nombre fini dlments de
types caractres. En mmoire, est associ cette variable un espace
mmoire dimensionn un nombre fini de cases de dimensions 1 octet
pouvant contenir des caractres. Une variable de type chane de
caractres est dclare de la manire suivante.

Algorithmique


57 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

X.3 Dclaration
Var identificateur : chane

Exemple:
var Nom : chane
X.4 Accs une case
Les cases dune chane de caractres sont accessibles en utilisant
lidentificateur de la variable chane et le numro de la case.

Exemple:
Nom [1], Nom [30]

Etant donn quune chane de caractres correspond un espace
conscutif doctets, elle joue le rle dune variable. On peut ainsi lutiliser
dans les actions de lecture / criture pour lire (respectivement crire)
une squence de caractres. On peut aussi utiliser les cases dune
chane de caractres dans les actions daffectation.

Exemple: Utilisation
Lire (Nom)
Ecrire (Nom)
Nom `ABCDE
Nom [1] `A
Nom [4] `D
Ecrire (Nom [30]) criture du caractre numro 30 de la chane "Nom"
Lire (Nom [30])

Exemple:

avec la variable Etudiant de type enregistrement
Var Etudiant : Enregistrement
Nom : chaine
Adresse : chaine
CIN : entier
Fin enregistrement
On peut avoir les actions suivantes
Etudiant.Nom `ABCDE
Etudiant.Adresse 34 rue Medjerda BARDO 2000 Tunis Tunisie
Lire (Etudiant. Adresse)

Algorithmique


58 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

X.5 Fonctions prdfinies sur les chanes de caractres
Aprs la saisie dune chane de caractres, le nombre de caractres lus
est donn par la fonction Longueur (identificateur) o identificateur est
le nom de la variable chane.

Exemple:

Voici un algorithme qui de lire une chane de caractres et dafficher le
nombre doccurrences dun caractre donn.

Algorithme Nombre occurrences
Var CH : chane
C : caractre
Nbre, i : entier

Dbut
Ecrire (`Donner une chane de caractres)
Lire (CH)
Ecrire (`Donner le caractre recherch)
Lire (c)
Nbre 0
i 1
Tant que i <=longueur (CH) Faire
Si CH[i] = C
Alors Nbre Nbre + 1
Fin Si
i i + 1
Fin Tant que
Ecrire (`le nombre doccurrences du caractre `, C, `dans la chane `,
CH, `est : `, Nbre)
Fin
XI Les enregistrements
XI.1 Introduction

Algorithmique


59 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Dans ce chapitre, nous prsentons le type de donnes Enregistrement
qui est utilis pour reprsenter, dans une mme variable, un nombre
fini de donnes de types htrognes.
Vous allez trouver la dclaration, la manipulation ainsi que quelques
exemples dutilisation dune variable de type enregistrement.

XI.2 Dfinition

Un enregistrement est une structure de donnes qui sert stocker,
dans une mme variable, un nombre fini dlments de types
htrognes. En mmoire, est associ cette variable un espace
mmoire dimensionn un nombre fini de cases de dimensions
htrognes pouvant contenir ces lments. Une variable de type
enregistrement est dite une variable compose.
XI.3 Dclaration


Une variable de type enregistrement peut tre dclare selon deux
mthodes
XI.3 Dclaration

XI.3.1 Mthode1

Var identificateur: Enregistrement
Champ 1: Type lment 1
Champ 2: Type lment 2
.

Algorithmique


60 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Champ n: Type lment n
Fin

Exemple:

var tudiant: Enregistrement
Nom: chane
Prnom: chane
CIN: entier
Age: entier
Adresse: chane
Fin

XI.3 Dclaration

XI.3.1 Mthode2

Type nom_type = Enregistrement
Champ 1: Type lment 1
Champ 2: Type lment 2
.
Champ n: Type lment n
Fin
Var identificateur: nom_type

Exemple:

Type identit = Enregistrement
Nom: chane
Prnom: Chane
CIN: entier
Age: entier
Adresse: chane
Fin
Var tudiant: Identit
XI.4 Accs un champ d'un enregistrement
Les champs dune variable de type enregistrement sont accessibles en
utilisant lidentificateur de la variable et le nom du champ.


Algorithmique


61 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Exemple:
Etudiant.Nom
Etudiant.Adresse

Etant donn que les champs dun enregistrement correspondent un
espace conscutif doctets, ils jouent le rle de variables. On peut ainsi
les utiliser dans des actions daffectation, de lecture, dcriture, etc, .

Exemple:
Etudiant.CIN 34567891
Lire (Etudiant.Nom)
Ecrire (Etudiant.Nom)

XI.5 Exemples
Considrons un vecteur examen qui dcrit les rsultats dun examen
auquel ont particip 100 candidats. Chaque tudiant est identifi par un
nom et une note de type indiquant la note obtenue par le candidat. On
veut imprimer les noms de tous les candidats qui ont obtenu une note
>= 10. Dans ce qui suit, on va dfinir
lentre, la sortie et le traitement raliser
les structures de donnes utilises
et on va Ecrire un algorithme pour la rsolution de ce problme
Entre : 100 noms et 100 notes de type rel.
Sortie : les noms des candidats ayant une note >= 10
Traitement : Il consiste :
Saisir pour chaque tudiant son nom et sa note
pour chaque tudiant :
comparer la note 10
Si cette note est suprieure 10 alors le nom est affich
Une structure de donne qui peut tre utilise est la structure
tableau denregistrement. Le tableau est de 100 cases et chaque
case est une enregistrement deux champs : nom de type
chane de caractres et note de type rel.


Algorithmique


62 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis



Nous dfinissons deux types Etudiant et Examen comme suit :

Type Etudiant = Enregistrement
Nom : chaine
Note : rel
Fin
Examen = tableau [1.. 100] de Etudiant

Nous dfinissons une procdure affichage qui permet, une fois les
donnes sur les tudiants sont saisies, dafficher les noms des
tudiants ayant une note >= 10.

Procedure Affichage (E : Examen)
Var i : entier
Dbut
Pour i de 1 100 Faire
Si E[i].Note >= 10 alors
Ecrire (E[i].Nom)
Fin Si
Fin Pour
Fin

Lalgorithme principal fait la saisie des donnes dans un tableau de type
examen et ensuite fait appel la procdure affichage.

Algorithme Principal

Type Etudiant = Enregistrement
Nom : chane
Note : rel
Fin
Examen = tableau [1.. 100] de Etudiant

Algorithmique


63 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Var Vecteur : Examen
j : entier

Dbut
Pour j de 1 100 faire
Ecrire (`Donner le nom de ltudiant numro, j)
Lire (Vecteur[j].Nom)
Ecrire (`Donner Note de ltudiant numro, j)
Lire (Vacteur [j].Note)
Fin Pour
Affichage (Vecteur)
Fin


XII Les listes chanes
XII.1 Introduction
Une liste chane est une structure de donne permettant de contenir
une liste dlments de mme type chans entre eux. Ce type peut
tre simple ou compos. Si les tableaux sont statiques cest dire
reprsentent une liste dlments en nombre fixe, les listes chanes
sont des structures dynamiques cest dire reprsentent une liste
dlments en nombre variable. Cette variation est le rsultat dune
succession doprations dajout et de suppression dun lment dans la
liste concerne. Lutilisation des listes chanes a lavantage de pouvoir
grer dynamiquement la mmoire centrale.
Vous verrez dans ce chapitre deux types de listes :
Les listes chanes simples o partir dun lment on peut accder
llment suivant
Les listes chanes doubles o partir dun lment on peut accder
aussi bien llment suivant qu llment prcdent. Les listes
chanes sont la base des pointeurs o une variable pointeur est une
variable qui contient ladresse dune autre variable. Nous commenons
ainsi par introduire les pointeurs.
XII.2 Les listes chanes simple
XII.2.1 Dfinitions

Algorithmique


64 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

XII.2.1.1 Dfinition d'un pointeur
Une variable de type pointeur est une variable susceptible de contenir
ladresse dune autre variable dun type dfini. Elle est dclare de la
manire suivante.

Var Identificateur_variable_pointeur : ^ Type_lment_point

Exemple

VAR Adresse : ^ entier

Lentier point par la variable Adresse est dsign par

Adresse^.




Adresse^ joue le rle dune variable. On peut ainsi lutiliser dans toute
action dun algorithme. Ainsi, aprs laction

Adresse^ 2003

la variable adresse contiendra ladresse dun espace mmoire associ
un entier. Cet espace va contenir la valeur 2004.
Un pointeur peut aussi pointer sur un type enregistrement.

Exemple

Type Etudiant = Enregistrement
Nom : Chane
Prnom : Chane
CIN : entier
Adresse : Chane
Fin

VAR ptr_Etudiant : ^Etudiant

Algorithmique


65 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis


Lespace mmoire associ lenregistrement est dsign par :
ptr_Etudiant^. Dune faon gnrale, un champ dun enregistrement
point par Ptr_enregistrement est dsign par
Ptr_enregistrement^.Nom_champ
Par exemple, le champ CIN est accessible par : ptr_Etudiant^.CIN
Une liste chane simple est pointe par un pointeur sur liste qui
contient ladresse du premier lment de la liste si cette dernire nest
pas vide. Dans le cas contraire, il contient la valeur NIL.
XII.2 Les listes chanes simple
XII.2.1 Dfinitions
XII.2.1.2 Dfinition d'une liste chane simple
Une liste chane simple est une liste dlments chanage simple o
partir dun lment on peut accder son suivant. A chaque lment
de la liste est associ, en mmoire, un emplacement reprsentant un
enregistrement contenant au moins deux champs o le premier
contient llment et le deuxime contient ladresse de lemplacement
mmoire de llment suivant. Cest un pointeur sur un enregistrement
de mme type. En labsence dun lment suivant, le champ pointeur
contiendra la constante NIL.

En mmoire, une liste chane simple a la reprsentation suivante :

La dclaration de cette structure est la suivante

Type LS = ^Cellule
Cellule = Enregistrement
valeur : Type_lment
suivant : LS
Fin Enregistrement
Var Liste : LS

Un nouveau type LS est dfinit. Cest un pointeur sur une cellule o
une cellule est un enregistrement deux champs. Le premier contient

Algorithmique


66 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

un lment de la liste et le deuxime contient ladresse dune cellule
suivante si elle existe si non la valeur NIL.
Ladresse de la premire cellule de la liste est sauvegarde dans une
variable Liste. Cette variable est donc de
type pointeur sur une cellule.
Si P est un pointeur qui pointe sur une cellule de type liste chane
simple alors il est dclar par :
Var p : LS
Ainsi,

P^.valeur dsigne le champ valeur qui contient llment de la liste.
P^.suivant dsigne ladresse de la cellule qui suit la cellule pointe par
P.
La valeur de llment qui suit llment point par P est
P^.suivant^.val
Si P pointe sur la premire cellule alors P^.valeur dsigne la valeur
`valeur lment1 et P^.suivant^.val dsigne la valeur `valeur
lment2.
La cration dune cellule de la liste se fait par la fonction prdfinie
crer().
Ainsi,
pour une variable p de type LS, crer(p) a pour effet dallouer, en
mmoire centrale un espace de type Cellule et met ladresse de cet
emplacement dans la variable P.
XII.2 Les listes chanes simple
XII.2.2 Les oprations sur les listes chanes simples
XII.2.2.1 Initialisation d'une liste chane simple

La liste est pointe par L

Procdure init (Var L :L S)
Dbut
L <--NIL
Fin


Algorithmique


67 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

XII.2 Les listes chanes simple

XII.2.2 Les oprations sur les listes chanes simples

XII.2.2.2 Ajout d'un lment une liste chane simple
a) Ajout d'un lment au sommet de la liste
Procdure ajout_sommet (L :LS , x : lment)
var p : LS
dbut
crer(p)
p^.valeur <--x
p^.suivant <--L
L <--p
Fin
Lappel de la procdure crer(p) permet de crer un emplacement
mmoire de type Cellule et daffecter son adresse p.
XII.2 Les listes chanes simple

XII.2.2 Les oprations sur les listes chanes simples

XII.2.2.2 Ajout d'un lment une liste chane simple

b) Ajout d'un lment en queue de la liste

Dans ce cas dajout dun lment en queue dune liste chane simple,
nous supposons avoir, comme le pointeur L qui pointe sur le premier
enregistrement, un pointeur queue qui pointe sur le dernier
enregistrement de la liste. Une variable queue apparat comme
paramtre de la procdure.

Ainsi dans linitialisation, la procdure devient :
Procdure init1(Var L, queue :LS)
Dbut
L <-- NIL
queue NIL
Fin

Procdure ajout_en_queue (L :LS , x : Type_lment, Var queue : LS)
var p : LS
dbut

Algorithmique


68 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

crer (p)
p^.valeur <-- x
p^.suivant NIL
Si queue = NIL
alors
L p
queue p
L p
Si non
queue^.suivant p
queue p
Fin Si
Fin
XII.2 Les listes chanes simple
XII.2.2 Les oprations sur les listes chanes simples
XII.2.2.3 Insertion d'un lment aprs une position
La procdure inserer_aprs recoit comme paramtre un pointeur sur
une liste, la position (un pointeur sur la cellule aprs la quelle le nouvel
lment doit apparatre) et un lment x. Aprs linsertion, position
pointera sur la cellule qui va contenir llment insr.

Procdure inserer_aprs(L :LS, var position: LS , x : Type_lment)
var p : LS
dbut
crer (p)
p^.valeur <--x
Si L = NIL
Alors
p^.suivant NIL
L p
Sinon
P^.suivant position^.suivant
position p
Fin si
Fin

Exemple :

Algorithmique


69 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Rcrire la procdure Ajouter lment en queue de la liste en utilisant la
procdure Insrer_aprs sachant quon dispose dun pointeur queue
qui pointe sur le dernier lment de la liste. Ce pointeur pointe sur NIL
si la liste est vide.

Procdure ajout_en_queue(x: Type_lment,var L:LS, var queue :LD)
Dbut
Insrer_aprs(L, queue, x)
Fin
XII.2 Les listes chanes simple
XII.2.2 Les oprations sur les listes chanes simples
XII.2.2.4 Suppression d'un lment de la liste
a) Suppression d'un lment du dbut de la liste
La liste est suppose tre non vide (L NIL) cest dire elle nest appel
que si la condition (L = NIL) renvoie la valeur faux.
procdure suppresion_sommet (var L:L S)
Var p : L S
Dbut
p <-- L
L <-- L^.suivant
Librer (p)
Fin
Lappel de la procdure Librer (p) permet de librer lespace mmoire
qui tait occup par lenregistrement point par p. Cette opration est
ncessaire, il faut librer les espaces mmoires non exploits pour
permettre dautres allocations dynamiques de la mmoire.

XII.2 Les listes chanes simple

XII.2.2 Les oprations sur les listes chanes simples

XII.2.2.4 Suppression d'un lment de la liste

b) Suppression d'un lment aprs une position donne


Algorithmique


70 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

L'lment point par position est suppos avoir un suivant

Procdure suppression aprs (var L: L S, position: L S)
Var p: L S
Dbut
p <-- position^.suivant
position^.suivant position^.suivant^.suivant
Librer (p)
Fin
XII.2 Les listes chanes simple
XII.2.2 Les oprations sur les listes chanes simples
XII.2.2.5 Suppression d'un lment d'une position de la liste
La procdure suppression_position permet de supprimer la cellule
numro position de la liste. Ici position nest pas le pointeur sur la cellule
qui contient llment dans la liste mais cest le numro de llment
supprimer.

Procdure suppresion_position (position: entier, var L:LC)
var p,q: LS
i: entier
dbut
i= 1
q <-- L
Tant que (i<=position-1) faire
p q
q <-- q^.suivant
i <-- i+1
Fin Tantque
p^.suivant <-- q^.suivant
Librer (q)
Fin
XII.2 Les listes chanes simple

Algorithmique


71 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis


XII.2.3 Exemple d'utilisation des oprations sur une liste chane
simple

Il sagit dcrire un algorithme qui permet de saisir une chane de
caractres avec un caractre deffacement & qui efface le caractre
prcdemment saisi. Cette chane se termine par le caractre #.
Lalgorithme doit afficher la chane rsultante de leffacement.
Exemple si la chane en entre est : Aa&bcd&&gh&v#
Alors aprs effacement, la chane devient : Abgv

Solution
Nous allons saisir la squence de caractres dans une liste chane
simple avec lajout au sommet de la liste et la suppression se fait aussi
du sommet de la liste. Ainsi, on va rpter jusqu avoir le caractre #,
la squence dactions suivante :
Si le caractre est diffrent de &, alors on lajoute au sommet, si non, et
comme le caractre prcdemment lu sil existe se trouve au sommet
de la liste, alors on le supprime de la liste.
A la fin du traitement, le dernier caractre saisi se trouve au sommet de
la liste et le premier saisi se trouve en queue de la liste.
Pour afficher la chane rsultante, il faut linverser dans une autre liste
avec lajout au sommet et ensuite afficher le contenu de la deuxime.

Nous utilisons pour cela les procdures :

init (Var L :LS)
ajout_sommet(var L :LS , x : Type_lment)
suppresion_sommet (var L:LS) et
Inverser_chaine (L : LS , var L_res : LS)
Qui permet dinverser le contenu de la liste L dans une liste rsultante
L_res.

Procedure Inverser_chaine (L :LS , var L_res : LS)
Var p : LS
e : Type_lment
Dbut
Init (L_res)
Tant que L NIL Faire
e L^.valeur

Algorithmique


72 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Ajout_sommet (L_res, e)
Suppression_sommet (L)
Fin Tant que
Fin

La procdure qui permet dafficher la chane rsultante est la suivante :

Procedure Affichage(L :LS)
Var p : LS
Dbut
p L
Tant que p NIL Faire
Ecrire (p^.valeur)
p p^.suivant
Fin Tant que
Fin

Lalgorithme est donn comme suit :

Algorithme chaine_aprs_effacement
Type LS = ^ Cellule
Cellule = Enregistrement
valeur : caractre
suivant : LS
Var L, L_res : LS
c : caractre
Dbut
init (L)
Lire (c)
Tant que c `# Faire
Si c `&
Alors
Ajout_sommet (L, c)
Sinon
Si L NIL
Alors
Suppression_sommet(L)
Fin Si
Fin Si

Algorithmique


73 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Lire (c)
Fin Tant que
Inverser (L, L_res)
Affichage (L_res)
Fin
XII.3 Les listes chanes doubles
XII.3.1 Dfinition
Une liste chane double est une liste dlments o partir dun
lment on peut accder aussi bien son suivant qu son prcdent.
Cest une liste chanage double. A chaque lment de la liste est
associ, en mmoire, un emplacement mmoire reprsentant un
enregistrement trois champs o le premier contient llment, le
deuxime contient ladresse de lemplacement mmoire de llment
prcdent et le troisime contient ladresse de lemplacement mmoire
de llment suivant. Les deux derniers champs sont des pointeurs sur
des enregistrements de mme type. En labsence dun lment suivant
ou prcdent, le champ pointeur correspondant contiendra la constante
NIL.
En mmoire, une liste chane double a la reprsentation suivante :

La dclaration de cette structure est la suivante
Type LD = ^Cellule
Cellule = Enregistrement
valeur : Type_lment
prcdent : LD
suivant : LD
Fin Enregistrement
Var Liste : LS

Un nouveau type LD est dfinit. Cest un pointeur sur une cellule o une
cellule est un enregistrement trois champs. Le premier contient un
lment de la liste, le deuxime contient ladresse dune cellule
prcdente si elle existe si non la valeur NIL et le troisime contient
ladresse dune cellule suivante si elle existe si non la valeur NIL.
Ladresse de la premire cellule de la liste est sauvegarde dans une
variable Liste. Cette variable est donc de type pointeur sur une cellule.

Algorithmique


74 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis


Si q est un pointeur sur une cellule de la liste dclar par :

Var q :LD
Alors
q^.prcdent dsigne ladresse de la cellule prcdente.
q^.suivant dsigne ladresse de la cellule suivante.
XII.3 Les listes chanes doubles
I.3.2 Les oprations sur les listes chanes doubles
XII.3.2.1 Initialisation d'une liste chane double
Procdure init ( var L : LD)
Dbut
L NIL
Fin

XII.3 Les listes chanes doubles
I.3.2 Les opration sur les listes chanes doubles
XII.3.2.2 Ajout d'un lment une liste chane double
a) Ajout d'un lment au sommet de la liste
procdure ajout-tete (x :val ,varL :LCD)
variable : p^noeud
Dbut
Crer (p)
p^valeur <--x
p^prcdent <--nil
Si L.tete <--nil

Algorithmique


75 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Alors L.queue <--p
L.tete <--p
p^suivant <--nil
Sinon L.tete^prcdent <--p
p^suivant <--L.tete
L.tete <--p
Fin si
Fin
XII.3 Les listes chanes doubles
I.3.2 Les oprations sur les listes chanes doubles
XII.3.2.2 Ajout d'un lment une liste chane double
b) Ajout d'un lment en queue de la liste

Dans ce cas dajout nous supposons avoir, comme le pointeur L qui
pointe sur le premier enregistrement, un pointeur queue qui pointe sur
le dernier enregistrement de la liste. Une variable queue apparat
comme paramtre de la procdure.

Ainsi dans linitialisation, la procdure devient :
Procdure init1(Var L, queue :LS)
Dbut
L <-- NIL
queue NIL
Fin

Procdure ajout_en_queue(L :LS , x : Type_lment, Var
queue : LS)
var p : LS
dbut
crer(p)

Algorithmique


76 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

p^.valeur <-- x
p^.suivant NIL
Si queue = NIL
alors
p^.prcdent NIL
L <-- p
queue p
L p
Si non
p^.prcdent queue

queue^.suivant p
queue p
Fin Si
Fin
XII.3 Les listes chanes doubles
I.3.2 Les oprations sur les listes chanes doubles
XII.3.2.3 Insertion d'un lment aprs une position dans une liste chane double
Procdure inserer_aprs (L : LD, var position: LD, x : Type_lment)
Var p, q: LD
Dbut
Crer (p)
p^.valeur <--x
Si L = NIL Alors
p^.suivant NIL
p^.prcdent NIL
L p
Sinon
P^.suivant position^.suivant
P^.prcdent position
Position p
Fin Si

Algorithmique


77 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Fin
Exemple :
Rcrire la procdure Ajouter lment en queue de la liste en utilisant la
procdure Insrer_aprs sachant quon dispose dun pointeur queue
qui pointe sur le dernier lment de la liste. Ce pointeur pointe sur NIL
si la liste est vide.
Procdure ajout_en_queue (x: Type_lment, var L:LS, var queue :
LS)
Dbut
Insrer_aprs (L, queue, x)
Fin
XII.3 Les listes chanes doubles
I.3.2 Les oprations sur les listes chanes doubles
XII.3.2.4 Suppression d'un lment dans une position donne

Remarque : la procdure recherche permet de vrifier si llment x
existe dans la liste. Elle renvoie vrai ou faux dans un paramtre trouve
pour indiquer si llment x a t trouv ou non et, dans un paramtre
q, ladresse de lenregistrement contenant cet lment s'il existe.
procdure: supprime (x : Type_lment , var L:LD)
Var trouve : boolen
q : LD
Dbut
Recherche (x,L,trouve ,q)
Si trouve
Alors
Si q L ET q^.suivant NIL
/* llment nest ni en tte ni en queue de la liste*/
Alors
q^.prcdent^.suivant <--q^.suivant
q^.suivant^.prcdent <-- q^.prcdent
Sinon
Si L^.suivant = NIL
/* Llment est le seule dans la liste*/
Alors
L <-- NIL
Si non

Algorithmique


78 Concepteur du cours: Mme Leila Ben Ayed & Mr Mohamed Jemni

Universit Virtuelle de Tunis

Si q = L
Alors
q^.suivant L^.suivant
q^.prcdent NIL
L = q
Si non
q^.prcdent^.suivant NIL
Fin Si
Fin Si
Fin Si
Fin Si
Librer (q)
Fin
Procdure Recherche (x : Type_lment, L : LD , var trouve : boolen ,
var q : LD)
Dbut
q L
Tant que q NIL ET q^.valeur x Faire
q q^.suivant
Fin Tant que
Si q = NIL alors
Trouve Faux
Si non
Trouve Vrai
Fin Si
Fin


dF
dl q P

Vous aimerez peut-être aussi