Trier avec scilab (1)
Fiche Élève 2e
La commande trier de scilab retourne une liste de nombres donnée après l’avoir ordonnée
dans l’ordre croissant. Nous ne savons pas comment cette commande est programmée. Nous
allons étudier ci-dessous une commande de tri plus transparente.
Trier dans l’ordre croissant, c’est très simple : un vecteur (une liste) de nombres noté Aétant
donné, on appellera Aneuf ce vecteur quand il sera rangé dans l’ordre croissant. Au début,
Aneuf est vide (Aneuf=[ ]). On commence par déterminer le plus petit nombre mde A, on
compte combien de fois nle nombre mfigure dans A, on ajoute à Aneuf la suite m, …, m(mécrit n
fois) et enfin, on efface tous les mqui figurent dans A. Si la nouvelle valeur de An’est pas vide,
on recommence. Cela se traduit par l’algorithme suivant :
Algorithme 1 : Trier à l’aide de la commande find
Entrées :
A, liste d’au moins 2 nombres ;
Sorties :
Aneuf, liste Arangée dans l’ordre croissant ;
début
Au départ, Aneuf est le vecteur vide ;
while An’est pas vide do
mdésigne le minimum de A
ndésigne le nombre d’occurrences de mdans A
Aneuf ←− Aneuf,m,…,m(mrépété nfois)
A←− Adont on a retiré tous les m
end
Afficher Aneuf
fin
Pour mettre cet algorithme sous une forme exécutable par scilab, nous nous autorisons à utiliser
les commandes min et find - taper help min et help find si nécessaire - que l’on pourrait
elles-mêmes programmer comme des fonctions scilab.
1.a - Pour comprendre la commande find et préparer la programmation de l’algorithme 1,
exécuter le script téléchargeable Exercice.sce suivant :
A= [ 1 , 2 , 3 , 2 , 4 , 5 , 2 , 6 , 7 , 2 ] ;
B=find (A==2) ;
a f f i c h e r ( ”B␣ e st ␣ é gal ␣à” ) ;
a f f i c h e r (B) ;
n=t a i l l e (B ) ;
a f f i c h e r ( ”2␣ f i g u r e ␣”+ string ( n ) + ”␣ f o i s ␣ dans ␣A” ) ;
A(B) = [ ] ;
a f f i c h e r ( ”La␣ nou v e l le ␣ valeur ␣de␣A␣ e s t ␣” ) ;
a f f i c h e r (A) ;
Aneuf =[2* ones(B) ,A ] ;
a f f i c h e r ( ” Aneuf␣ e s t ␣ égal ␣à” ) ;
a f f i c h e r ( Aneuf ) ;
1