Vous êtes sur la page 1sur 7

Cours A.

Denise du lundi 13 septembre 2004

Chapitre I : Bases de lalgorithme


I.

Introduction

Le nom algorithme vient dun mathmaticien arabe Abu Ja Far Mohammed Ibn
ms Al-Kha-Rizme (Bagdad, vers 780 850 ). Mais la notion dalgorithme est plus
ancienne. Dans lantiquit par exemple, lalgorithme dEuclide (300 avant J-C) permettait de
trouver les PGCD (Plus Grand Commun Diviseur) :
PGCD (42,63) = 21
42/21 = 2
63/21 = 3
La notion dalgorithme est indpendante de celle dordinateur.
Dfinition : Un algorithme est Une suite finie dinstructions qui dcrit un traitement
sur un nombre fini de donnes structures, et qui doit se terminer aprs un nombre fini
doprations pour donner un rsultat.
Larchitecture de lalgorithme doit tre rflchie, selon une dcomposition du
problme en sous problmes.
Pour comprendre :
Pour faire un gratin dendives au jambon (pour 4 personnes)
- 4 endives
- un plat en pyrex
- 4 tranches de jambon
- du gruyre
- ingrdients pour une bchamel
-

faire cuire les endives la vapeur *


les entourer de jambon
les mettre dans un plat allant au four *
prparer une sauce bchamel
recouvrir les endives de bchamel
rper le gruyre, le mettre sur le plat
mettre gratiner 20 minutes au four

Certaines tapes devraient tre dtailles (*), mais pour quun algorithme soit lisible,
il ne faut pas tout crire dun coup ( par exemple : aller acheter du jambon cher lpicier, sil
est fermer aller au supermarch, etc. )

II.

Un premier algorithme informatique

Action DureDeVol
/* Demande lheure et la minute de dpart et lheure et la minute darrive
dun avion, puis crit la dure de vol. On suppose que le dpart et larrive ont
lieu le mme jour et quil ny a pas de dcalage horaire. */

Spcification
Que fait le
programme ?

lexique
hd, md, /*heure & minute de dpart */
ha, ma, /* heure & minute darrive */
ht, mt, /* heure et minute de la dure du trajet */
cd, ca: /* conversion en minutes des horaires de dpart & darrive */
entiers
dbut
lire (hd, md, ha, ma)
cd 60 x hd + md /* est le symbole daffectation */
ca 60 x ha + ma
mt ca cd /*mt contient la dure du voyage en minutes */
ht mt div 60 /* division entire ou euclidienne */
mt mt mod 60 /* donne le reste de la division entire */
crire (ht, mt)

Ralisation
Comment le
fait-il ?

fin
Les spcifications sont trs importantes pour les personnes susceptibles de reprendre le
programme, par exemple pour linclure dans un autre programme plus complexe.
Lcriture dun algorithme est assez libre. On nest pas oblig de tout crire, par
exemple en ce qui concerne les interactions utilisateur / machine. Dans le programme, il faut
crire ces instructions pour que lutilisateur comprenne.

III.

Les instructions
1. Laffectation

< nom de variable > < expression >


ou
< nom de variable > := < expression >
Laffectation calcule la valeur de lexpression et range cette valeur dans la variable.
Exemples :
a2
x 2y + 1
Il ne faut pas utiliser = pour laffectation, pour quil ny ait pas dambigut avec le
test dgalit ( si a=3 alors )
Pb : En langage C, laffectation scrit := et loprateur dgalit scrit = = .

2. Lecture et criture
Pour que lordinateur communique avec lutilisateur :
- lecture : sur le clavier (ou dans un fichier, )
- criture : sur lcran ( ou fichiers, imprimante, )
lire ( <nom de variable > )
Range dans la variable la valeur que lutilisateur tape au clavier.
Exemple :
lire ( < var1 >, < var2 >, < var3 >, , < var n > )

crire ( < expression > )

Exemples :
Ecrire ( 3 )
Ecrire ( x ) /* si x est une variable */
Ecrire ( Bonjour )
Ecrire ( 3x 7 )
Ecrire ( Bonjour je mappelle , mon_nom, jai, mon_age, ans )

3. Squence et bloc dinstructions

Squence dinstructions

lire ( x, y )
y y +2
crire ( x y )
ou
lire ( x, y ) ; y y+2 ; crire ( x y )

Bloc dinstructions

dbut
lire (x)
yy+2
crire ( x y )
fin
On peut remplacer dbut et fin par des accolades { }.

4. Instructions conditionnelles
Si < expression boolenne >
Alors < instruction ou bloc >
Sinon < instruction ou bloc >
Une expression boolenne est une expression dont la valeur est soit VRAI soit FAUX.

Exemple :
Si x mod 2 = 0
Alors crire ( nombre pair)
Sinon crire ( nombre impair)
Si lexpression est VRAIE, excute le alors puis passe linstruction suivante. Si elle
est FAUSSE, excute le sinon puis passe linstruction suivante.
Si < expression boolenne >
Alors < instruction ou bloc >
Si lexpression est VRAIE, excute le alors puis passe linstruction suivante, sinon
passe directement linstruction suivante.
Exemple :
Si x < 0
Alors x -x
Ecrire (x)
Si x < 0
Alors
yx+2
x-x

Ce nest pas un bloc dinstructions

Ecrire (x)
Il faut crire :
Si x < 0
Alors {
yx+2
x-x}
Ecrire (x)
Mardi 14 septembre 2004

selon le cas

Si a = 0 alors
Sinon si a = 1 alors
Sinon si a = 2 alors
Sinon
 Selon le cas permet de simplifier la syntaxe :
Selon le cas a
a=0:
a=1:
a=2:
Sinon
Syntaxe gnrale :
Selon le cas < nom de variable >
< expression boolenne sur la variable > : < instruction ou bloc >

< expression boolenne sur la variable > : < instruction ou bloc >
< expression boolenne sur la variable > : < instruction ou bloc >

[Sinon < instruction ou bloc >]


/* Les [] signifient que cette instruction est
optionnelle */
 excute linstruction ou le bloc dinstruction correspondant la premire
expression VRAIE dans la liste. Si aucune nest vraie, excute linstruction ou le bloc du
sinon sil y en a un. Puis passe linstruction suivante.
Exemple :
Lire (n)
Selon le cas n :
n = 1 : crire ( lundi )
n = 2 : crire ( mardi )
n = 3 : crire ( mercredi )
n = 4 : crire ( jeudi )
n = 5 : crire ( vendredi )
n = 6 : crire ( samedi )
n = 7 : crire ( dimanche )
sinon crire ( le numro doit tre compris entre 1 et 7 )

5. Itrations
Exemple : /* sans itration */
Action TableDeMultiplication

/* Lit un entier et crit sa table de multiplication */

Lexique
n : entier
Dbut
Lire (n)
Ecrire ( 1 x, n , = , n )
Ecrire ( 2 x, n , = , 2 x n )
Ecrire ( 3 x, n , = , 3 x n )

Ecrire ( 10 x, n , = , 10 x n )
Fin
Problme : Si on veut crire jusqu 1000 x n, le programme devient trs long.
 On fait une itration ( ou boucle ) qui permet de faire une mme instruction en
changeant une variable chaque tour de boucle

La boucle pour

Pour < nom de variable >


allant de < expression entire 1>
< expression entire 2 >
faire < instruction ou bloc >

La variable prend la valeur de la premire expression, puis le bloc est excut ( * ),


puis la variable est incrmente de 1.
Si sa valeur est infrieure ou gale lexpression 2, on revient ( * ), sinon on passe
linstruction suivante.
Exemple :
Lexique
n, i : entiers
Dbut
Lire (n)
Pour i allant de 1 10 faire
Ecrire ( i, x, n, =, i x n )
Fin
Il est interdit de :
-

modifier la valeur de lindice de boucle ( i ) lintrieur de la


boucle
modifier les valeurs des bornes lintrieur de la boucle, par
exemple quand on a :
b4
pour j allant de a b faire
j0
b 2b

Remarque : Si a>b, le bloc ne sexcute pas.


Mercredi 15 septembre 2004

Les boucles tant que

Il en existe deux :
1. Tant que < expression boolenne >
Faire < instruction ou bloc >
2. Faire < instruction ou bloc >
Tant que < expression boolenne >
La boucle 1. : (*) Regarde la valeur de lexpression
Si elle est VRAIE, excute linstruction ou le bloc et revient (*)
Sinon, passe linstruction suivante
La boucle 2. : (*) Excute linstruction ou le bloc, puis
Si lexpression a pour valeur VRAI, revient en (*)
Sinon passe linstruction suivante
Dans la version 2, linstruction (ou bloc) est excute au moins une fois, ce qui nest
pas le cas dans la version 1.
Exemples :

- Tables de multiplication :
lire (x)
i1
tant que i 10 faire
{
crire (i, *, x, =, i * x)
ii+1
}
- /* Nombre de fois quun nombre entier est divisible par 2*/
lire (x)
compteur 0
tant que n mod 2 = 0 faire
{
n n div 2
compteur compteur +1
}
crire (compteur)