Accueil > Productions > Ressources pédagogiques > Lycée > Algorithmique pour grands débutants > V - Boucles "tant que" > Sept exercices sur "V - Boucles tant que"
Sept exercices sur "V - Boucles tant que"
mercredi 21 octobre 2009, par
Énoncé n° 1 [*] : Calculer la somme des nombres entiers impairs inférieurs ou égaux à n. |
Commentaires généraux : On ajoute 2 à 1, puis 5 à la somme obtenue et on continue tant que le nombre impair qui vient est .
Commentaires détaillés Scilab : Le fichier « AF_Somimp.sce » est une simple boucle "tant que" (boucle avec arrêt conditionnel).
Pour calculer la somme des entiers impairs de 1 à 500 par exemple, on charge ce fichier dans scilab à l’aide de
— >exec("chemin_du_fichier")
puis « Entrée ». Si on veut la somme des entiers impairs de 1 à 500, il suffit de taper la commande
— >S=Somimp(500)
(sans le signe ; pour que le résultat s’affiche).
Commentaires détaillés JavaScript :
Énoncé n° 2 [***] :
|
Commentaires généraux : Cet exercice, que nous soumettons à nos collègues et non à leurs élèves, est déjà un sujet élaboré. Quand on y réfléchit, il apparaît tout de suite que l’on doit distinguer les cas et , ce qui va se traduire par une instruction conditionnelle : "si alors on fait ceci, sinon, on fait cela". Dans le cas où , on regarde si , , etc. On continue tant que l’inégalité est vraie. Quand elle cesse d’être vraie, on a atteint la partie entière de . Il y aura une boucle "tant que". Le cas est analogue.
Commentaires Scilab : Dans le script scilab ci-dessous, la fonction qui à associe ses parties entière et décimale est notée "Lille"
(pourquoi pas ?). On peut l’appeler (en indiquant son chemin si ce script a été téléchargé). Ensuite, pour obtenir la partie entière de , il suffit de taper
— >[a,b]=Lille(10^6*%pi)
ce qui donne a=3141598, b=0.6535898, puis
— >partieentiere=a
ce qui donne partieentiere=3141598.
On remarquera que ce calcul dure longtemps car la boucle "tant que" tourne assez longtemps.
Commentaires Javascript :
Énoncé n° 3 [***] : Ranger trois réels donnés , et dans l’ordre croissant. |
Commentaires généraux : Nous proposons ici un tri à bulles, c’est à dire une succession de passages en revue de la suite en nombre suffisant, un passage consistant à échanger et si , puis - dont la valeur peut avoir changé - et si et de compter le nombre d’échanges effectués. Si , c’est que , et étaient dans l’ordre croissant : on s’arrête. Sinon, on continue. Cette activité est à rapprocher de l’exercice n° 4 de l’activité IV - Instructions conditionnelles
Commentaires scilab : voir le fichier de commentaires. Une solution est donnée sous forme de fichier de commande, une autre sous forme de fonction.
Commentaires JavaScript :
Énoncé n° 4 [****] Un triangle ABC est donné par les coordonnées de ses sommets A, B et C dans un repère orthonormé. Écrire un algorithme qui permette d’en déduire qu’il est isocèle (sans être équilatéral), équilatéral ou quelconque (c’est à dire, ici, non isocèle). |
Commentaires généraux : Si , et désignent les longueurs des côtés du triangle, rangées dans l’ordre croissant, il est facile d’exprimer que ce triangle n’est pas isocèle ou est isocèle sans être équilatéral ou est équilatéral, à l’aide d’une instruction conditionnelle. On verra que tester l’égalité de deux nombres donne souvent un résultat faux et qu’il faut ruser pour obtenir une solution approximative acceptable, ce qui amène à s’interroger sur les mathématiques que l’on enseigne et sur leurs applications.
Commentaires scilab : On va ranger les longueurs des côtés du triangle dans l’ordre croissant à l’aide de la fonction « foncranger » de l’exercice n° 3, version scilab. Voir le fichier de commentaires, l’algorithme exact « isocele.sce », qui ne marche pas toujours et l’algorithme approximatif, « presquisocele.sce », satisfaisant.
Commentaires JavaScript :
Énoncé n° 5 [**] :
|
Commentaires généraux : Comme une même question est posée 4 fois, on a intérêt à définir une fonction qui à tout entier associe le nombre de nombres factoriels (nombres de la forme ) inférieurs ou égaux à .
Commentaires scilab : est donné par l’instruction . Nous n’utiliserons pas cette instruction. La définition de la fonction demandée, appelée « nombfact » pose un problème de comptage très simple.
Énoncé n° 6 [*] : On admet que la longueur d’un saut de kangourou d’une certaine espèce est une variable aléatoire suivant la loi uniforme sur l’intervalle [9,43[ (en mètres). Écrire un algorithme qui donne le nombre de sauts effectués par un tel kangourou pour que la distance totale parcourue soit km. |
Commentaires généraux : Bon exercice pour aborder les boucles « tant que ». En effet, l’algorithme demandé se réduit à une telle boucle. On admet comme une évidence que si est un nombre choisi au hasard dans l’intervalle , est un nombre choisi au hasard dans l’intervalle .
Commentaires scilab : La commande « rand() » produit un nombre tiré au hasard dans l’intervalle . Si on l’utilise fois, on obtient de ces nombres, réputés indépendants. L’algorithme « SautsKangourou.sce » joint est commenté.
Énoncé n° 7 [**] (suite de l’énoncé n° 6) :
|
Commentaires généraux : La première question consiste à présenter sous forme de fonction l’algorithme de l’exercice précédent (simple boucle « tant que »). On répète fois l’expérience à l’aide d’une boucle « pour ».
Commentaires scilab : Facile. Voir la capture d’écran scilab (« CaptureScilab ») et le script « MoySautsKang.sce »