Sept exercices sur "V - Boucles tant que"

Samedi 23 janvier 2010, par Emmanuel Ostenne

n° 1 [*] : sommes des entiers impairs de 1 à n n° 2 [***] : parties entière et décimale d’un réel n° 3 [***] : ranger 3 nombres donnés dans l’ordre croissant n° 4 [****] : Ce triangle, donné par les coordonnées de ses sommets, est-il isocèle ? n° 5 [**] : nombres factoriels n° 6 [*] : sauts de kangourou n° 7 [**] : nombres moyens de sauts de kangourou

É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 \le n.

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 S 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).

Fonction Scilab - 169 octets
AF_Somimp.sce

Commentaires détaillés JavaScript :

texte - 181 octets
AFSomimpJS
Script
Énoncé n° 2 [***] :
  1. Programmer la fonction qui, à tout réel x, associe sa partie entière et sa partie décimale.
  2. Application : calculer la partie entière de \cos{2} et la partie décimale de -\sqrt{2}.
  3. Calculer la partie entière de 10^6\cdotp \pi.

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 x<0 et x\ge 0, ce qui va se traduire par une instruction conditionnelle : "si x<0 alors on fait ceci, sinon, on fait cela". Dans le cas où x<0, on regarde si x<-1, x<-2, etc. On continue tant que l’inégalité est vraie. Quand elle cesse d’être vraie, on a atteint la partie entière de x. Il y aura une boucle "tant que". Le cas x\ge 0 est analogue.

Commentaires Scilab : Dans le script scilab ci-dessous, la fonction qui à x 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 10^6\cdotp \pi, 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.

Fonction Scilab - 217 octets
Parties entière et décimale

Commentaires Javascript :

texte - 898 octets
AFpartJS
Script
Énoncé n° 3 [***] : Ranger trois réels donnés x, y et z 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 x,\,y,\,z en nombre suffisant, un passage consistant à échanger x et y si x>y, puis y - dont la valeur peut avoir changé - et z si y>z et de compter le nombre S d’échanges effectués. Si S=0, c’est que x, y et z é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.

PDF - 170.3 ko
Commentaires rangerxyz
Fonction Scilab - 389 octets
Fichier de commande
Script Scilab - 604 octets
Fichier fonction

Commentaires JavaScript :

texte - 525 octets
AFrangerxyzJS
Script
É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 a, b et c 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.

PDF - 172.7 ko
Commentaires scilab
Fonction Scilab - 482 octets
isocele.sce
Fonction Scilab - 576 octets
presquisocele.sce

Commentaires JavaScript :

texte - 803 octets
AFpresqueisoceleJS
Script
Énoncé n° 5 [**] :
  1. Combien y a-t-il de nombres factoriels inférieurs ou égaux à 10^6, 10^9, 10^{12} ? à 17\,! ?
  2. 3629200 et 39916800 sont-ils des nombres factoriels ?

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 p\ge 1 associe le nombre de nombres factoriels (nombres de la forme 1\cdotp 2\,\cdotp\,3\,\cdotp\,\cdots\,\cdotp\,n) inférieurs ou égaux à p.

Commentaires scilab : n\,! est donné par l’instruction gamma(n+1). 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.

PDF - 137.2 ko
Commentaires scilab
Script Scilab - 258 octets
nombfact.sci
É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 \ge 2 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 x est un nombre choisi au hasard dans l’intervalle [0,1[, 9+34*x est un nombre choisi au hasard dans l’intervalle [9,43[.

Commentaires scilab : La commande « rand() » produit un nombre tiré au hasard dans l’intervalle [0,1[. Si on l’utilise n fois, on obtient n de ces nombres, réputés indépendants. L’algorithme « SautsKangourou.sce » joint est commenté.

Fonction Scilab - 494 octets
SautsKangourou.sce
Énoncé n° 7 [**] (suite de l’énoncé n° 6) :
  1. Définir à l’aide d’un algorithme la fonction qui à toute distance d (exprimée en mètres) associe le nombre de N sauts nécessaires au kangourou pour la parcourir.
  2. Demander au kangourou de bien vouloir répéter en tout T fois l’expérience précédente ; calculer le nombre moyen de sauts qu’il aura effectués lors de ces tentatives.

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 T 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 »

PDF - 117.9 ko
CaptureScilab
Fonction Scilab - 642 octets
MoySautsKang.sce

Répondre à cet article