Fiche Élève - Gradus ad Mathematicam
Transcription
Fiche Élève - Gradus ad Mathematicam
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 ?