Algorithmique
Le mot algorithme vient du nom de lauteur persan Al-Khuwarizmi (n vers 780 - mort vers 850)
qui a crit en langue arabe le plus ancien trait dalgbre abrg de calcul par la compltion et la
simplification 1 dans lequel il dcrivait des procds de calcul suivre tape par tape pour rsoudre
des problmes ramens des quations 2 .
On dfinit parfois les algorithmes de la manire suivante : un algorithme est une suite finie de rgles
appliquer dans un ordre dtermin un nombre fini de donnes pour arriver, en un nombre fini
dtapes, un certain rsultat et cela indpendamment des donnes . Le rsultat doit donc sobtenir
en un temps fini.
Dans ce chapitre, nous allons nous intresser la notion de variable. Une variable est une sorte de
bote dans laquelle on peut stocker une information (texte, nombre, liste de nombres, figure,. . .) ;
une variable est nomme (elle a un nom) par exemple MaVariable, a, Nombre1, . . . sont des noms de
variables. Dans un algorithme, a b signifie que le contenu de la bote b vient se mettre
la place du contenu de la bote a. noter que le contenu initial de b reste aussi dans b il est en
quelque sorte recopi dans a.
Dans une premire partie nous crirons un algorithme permettant de ranger une liste de nombres
dans lordre croissant puis nous nous initierons la programmation avec le logiciel Xcas que vous
pouvez tlcharger gratuitement sur internet (dans un moteur de recherche, Xcas donne le lien
de tlchargement).
Le tri bulles
Cette partie provient largement dune activit propose sur le site internet de lirem de Lille par
Jean-Marc Duquesnoy et Raymond Moch.
Le tri bulles ou tri par propagation est un algorithme de tri qui consiste faire remonter progressivement les plus grands lments dune liste, comme les bulles dair remontent la surface dun liquide.
Lalgorithme parcourt la liste, et compare les couples dlments successifs. Lorsque deux lments
successifs ne sont pas dans lordre croissant, ils sont changs. Aprs chaque parcours complet de la
liste, lalgorithme recommence lopration. Lorsquaucun change na lieu pendant un parcours, cela
signifie que la liste est trie : lalgorithme peut sarrter. (Source : Wikipdia)
1. Apparemment, on peut ranger deux nombres donns a et b laide de lalgorithme suivant :
1
2
3
4
5
6
7
8
9
10
11
Entres :
nombres a et b ;
Sorties :
minimum puis maximum des nombres a et b ;
dbut
si a > b alors
a b;
b a;
fin
Afficher a, b
fin
Algorithme 1 : crire deux nombres a et b dans lordre croissant ?
1. Le mot arabe utilis pour nommer la compltion ou restauration se lit Al-Jabr, ce qui donna naissance notre
mot algbre.
2. Notamment, les quations du segond degr.
1
2
3
4
5
6
Entres :
nombres a et b ;
Sorties :
minimum puis maximum des nombres a et b ;
dbut
si a > b alors
changer a et b ;
fin
Afficher a, b
fin
Algorithme 2 : crire deux nombres a et b dans lordre croissant
On voit que le problme est dchanger le contenu des deux variables a et b.
Question - Donner une solution utilisant une variable auxiliaire c. La rponse sera donne en
compltant le cadre vide de lalgorithme ci-dessous :
Entres :
nombres a et b ;
Sorties :
minimum puis maximum des nombres a et b ;
dbut
si a > b alors
fin
Afficher a, b
8
9
10
fin
Algorithme 3 : crire deux nombres a et b dans lordre croissant
Entres :
nombres a et b ;
Sorties :
minimum puis maximum des nombres a et b ;
dbut
si a > b alors
a a+b ;
b ab ;
a ab ;
fin
Afficher a, b
fin
Algorithme 4 : crire deux nombres a et b . . . . . . . . . . . . . . . . . . . . . . . .
Entres :
A = a1 , . . . , an , liste dau moins deux nombres ;
Sorties :
la liste obtenue en rangeant A dans lordre croissant ;
dbut
n longueur de la liste A ;
pour k = 1, . . . , (n 1) faire
pour j = 1, . . . , (n k) faire
si aj > aj+1 alors
c aj ;
aj aj+1 ;
aj+1 c
fin
fin
fin
Afficher A
fin
Algorithme 5 : Algorithme du tri bulles
Questions :
a. peut-on lamliorer de sorte que le traitement aille plus vite ?
b. modifier cet algorithme pour que ltat initial de la liste A soit conserv et affich en mme
temps que le rsultat.
Avec Xcas
2.1
Le logiciel Xcas
Xcas est un logiciel de mathmatiques multi-fonctions : il permet de calculer (avec des nombres
et mme avec des lettres !), de tracer des courbes, de construire des figures, de programmer, et plein
dautres choses. Nous allons, ici, lutiliser pour programmer.
Au lancement, on obtient un cran qui ressemble 3 la figure 2.1 (page 5). En saisissant 2+2, puis
Entre, a confirme ce que je disais prcdemment : il sait calculer !
En saisissant developper((a+b)^2), il dveloppe lidentit remarquable !
Bon, placez-vous maintenant sur une ligne vide, et cliquer sur Prg puis sur Nouveau Programme ;
effacer le : ; sil existe. Vous tes prts programmer.
3. Cela dpend de votre ordinateur, de votre systme dexpoitation et de votre version de Xcas.
2.2
2.2.1
Premiers programmes
changisme !
Pour crer un programme, il faut lui donner un nom, par exemple Echange et lui indiquer les variables
dont il a besoin (ici deux nombres a et b changer ). Pour cela, on crit : Echange(a,b):={
On crira notre programme aprs laccolade ouvrante { et on le conclura par une accolade fermante
} (quon peut crire tout de suite pour ne pas loublier. . .).
Avec Xcas, laffectation cest--dire le remplissage dune bote par une information (ce quon
indiquait dans les algorithmes par ) se fait avec := . Ainsi pour affecter la variable c le
nombre 5 on crit c:=5; (Chaque instruction du programme doit se terminer par un ;
).
crivons la partie de programme de lalgorithme 1 qui devait changer les contenus des variables a
et b :
Echange(a,b):={// Tout ce qui est plac aprs deux "/" est ignor par Xcas
a:=b;// Il est important de commenter ses programmes.
b:=a;
return a,b;// linstruction return permet de renvoyer un rsultat lutilisateur
}
Une fois le programme crit, il faut le compiler 4 en cliquant sur OK. Si tout se passe bien, un
message Success compiling Echange apparat. Dans une nouvelle ligne, taper Echange(5,3)
et constater que lalgorithme 1 tait bien faux !
Il reste le corriger ( laide des algorithmes 3 ou 4 au choix) pour quil soit correct, le compiler
nouveau, et le tester : au boulot !
Pour enregistrer ce programme, Cliquer sur Prog (juste ct du numro de la ligne o vous avez
crit votre programme), puis sur Sauver comme. Slectionner le dossier Mes documents et saisir le
nom Echange.
Remarque : avec Xcas, linstruction a,b:=b,a change directement les contenus des variables a et
b.
4. La compilation est la traduction du programme crit dans le language de programmation en instructions que
lordinateur peut excuter.
Placer le curseur sur une nouvelle ligne blanche vide. Crer un nouveau programme par le menu Prg
puis Nouveau.
Saisir alors TriCroissant(a,b):={ et crire le programme correspondant lalgorithme 4.
Pour la condition Si. . . , cliquer sur ajouter puis sur test et enfin sur si alors sinon. Il reste
complter les blancs .
Si loption en franais nest pas disponible, il faut slectionner If [Then] Else, mettre la condition
dans les parenthses, les instructions si la condition est remplie dans les premires accolades et les
instructions du sinon dans les deuximes accolades.
Par exemple un programme qui testerait si deux nombres sont gaux scrirait :
En franais :
En anglais :
Egalite(a,b):={
si a==b alors//test dgalit : "=="
afficher("ils sont gaux");
sinon
afficher("ils sont diffrents");
fsi;
}// Fin du programme
Egalite(a,b):={
if (a==b) {// dbut du "oui"
afficher("ils sont gaux")}// fin
else {// dbut du "sinon
afficher("ils sont diffrents");
}// fin du sinon
}// fin du programme
2.3
Le tri bulles
2 Avec Xcas
2.1 Le logiciel Xcas . . . . . . . . . . . .
2.2 Premiers programmes . . . . . . . . .
2.2.1 changisme ! . . . . . . . . . .
2.2.2 Tri croissant de deux nombres
2.3 Le tri bulles . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
4
5
5
6
6
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
2
2
3
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.