Fiche Élève - Gradus ad Mathematicam

publicité
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 m de A, on
compte combien de fois n le nombre m figure dans A, on ajoute à Aneuf la suite m, …, m (m écrit n
fois) et enfin, on efface tous les m qui figurent dans A. Si la nouvelle valeur de A n’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 A rangée dans l’ordre croissant ;
début
Au départ, Aneuf est le vecteur vide ;
while A n’est pas vide do
m désigne le minimum de A
n désigne le nombre d’occurrences de m dans A
Aneuf ←− Aneuf, m,…,m (m répété n fois)
A ←− A dont 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 s t ␣ é g a l ␣ à ” ) ;
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 ␣ ”+ s t r i n g ( n ) + ” ␣ f o i s ␣ dans ␣A” ) ;
A(B ) = [ ] ;
a f f i c h e r ( ” La␣ n o u v e l l e ␣ v a l e u r ␣ 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 ␣ é g a l ␣ à ” ) ;
a f f i c h e r ( Aneuf ) ;
1
1.b - Quelle est la commande du script ci-dessus qui efface les 2 de A ? Que signifie ones(B) ?
Commentaire : On voit maintenant comment effacer les m de la liste A dans l’algorithme 1.
2 - Écrire cet algorithme sous une forme exécutable par scilab.
3 - La commande ci-dessous permet d’engendrer une liste de 100 000 nombres à 4 décimales
entre 0 et 1 :
A=t i r a g e _ e n t i e r ( 1 0 0 0 0 0 , 0 , 9 9 9 9 ) / 1 0 0 0 0 ;
3.a - Calculer le vecteur Aneuf obtenu en rangeant A dans l’ordre croissant.
3.b - Afficher les 15 derniers termes de A et de Aneuf.
3.c - Combien de fois le nombre 0.5 figure-t-il dans A ?
3.d - Ordonner A avec la commande trier de scilab. Que constate-t-on ?
Téléchargement