Épreuve pratique 2009, sujet 129

mercredi 4 novembre 2009
par  Alain BUSSER

Bien que l’énoncé commence par « à l’aide d’un tableur », un langage de programmation permet tout aussi facilement de faire la simulation. Alors encore une mission pour CaRMetal !

Urnes A puis B puis C

On utilise trois variables de type chaîne de caractères, a par exemple désigne la couleur de la boule tirée de l’urne A. Comme il y a 4 jetons noirs sur 10 dans l’urne A, la couleur du jeton sera noire si r est inférieur à 0,4 et blanche sinon (r étant un nombre pseudo-aléatoire entre 0 et 1). La variable gain est un entier, égal à 0, 1 ou 2. La variable effectif est le nombre de parties pour lesquelles le gain est 2. Enfin la variable freq (comme « fréquence ») contiendra le pourcentage de parties gagnées. Voici le script :

  1. /*Programme tp 129a
  2. Correction TP 129 2009
  3. */
  4. var a,b,c;//les couleurs
  5. var gain;//entier
  6. var effectif=0;//nombre de 2
  7. var freq;
  8. for(i=0;i<500;i=i+1){
  9.         if(Math.random()<0.4){
  10.                 a="noir";//4 jetons noirs sur 10
  11.         } else {
  12.                 a="blanc";
  13.         }
  14.         if(Math.random()<0.7){
  15.                 b="noir";//7 jetons noirs sur 10
  16.         } else {
  17.                 b="blanc";
  18.         }
  19.         if(Math.random()<0.6){
  20.                 c="noir";//6 jetons noirs sur 10
  21.         } else {
  22.                 c="blanc";
  23.         }
  24.         gain=0;//gain initial
  25.         if(a!=b) gain++;
  26.         if(b!=c) gain++;
  27.         if(gain==2) effectif++;
  28. }
  29. freq=effectif/500*100;
  30. Alert("la fréquence de parties gagnées est "+freq+" %");

Télécharger

Les dernières lignes sont un peu mystérieuses : Celles avec « gain++ » veulent dire respectivement que si les couleurs a et b ne sont pas égales, la variable gain est incrémentée, et si b et c ne sont pas égales, la variable gain est à nouveau incrémentée. Enfin la toute dernière ligne aurait pu être simplifiée en « Println(freq) » mais les élèves de Seconde aiment bien ce genre d’affichage à la lisibilité améliorée.


Les deux stratégies

Doubler la taille du script est très rapide avec le copier-coller (et les modifications à apporter au deuxième bloc obtenu).

Voir le résultat

  1. /*Programme tp 129b
  2. Correction TP 129 2009
  3. */
  4. var a,b,c;//les couleurs
  5. var gain;//entier
  6. var effectif1=0,effectif2=0;//nombre de 2
  7. var freq1,freq2;
  8. for(i=0;i<500;i=i+1){
  9.         if(Math.random()<0.4){
  10.                 a="noir";//4 jetons noirs sur 10
  11.         } else {
  12.                 a="blanc";
  13.         }
  14.         if(Math.random()<0.7){
  15.                 b="noir";//7 jetons noirs sur 10
  16.         } else {
  17.                 b="blanc";
  18.         }
  19.         if(Math.random()<0.6){
  20.                 c="noir";//6 jetons noirs sur 10
  21.         } else {
  22.                 c="blanc";
  23.         }
  24.         gain=0;//gain initial
  25.         if(a!=b) gain++;
  26.         if(b!=c) gain++;
  27.         if(gain==2) effectif1++;
  28. }
  29. freq1=effectif1/500*100;
  30. for(i=0;i<500;i=i+1){
  31.         if(Math.random()<0.4){
  32.                 a="noir";//4 jetons noirs sur 10
  33.         } else {
  34.                 a="blanc";
  35.         }
  36.         if(Math.random()<0.6){
  37.                 c="noir";//6 jetons noirs sur 10
  38.         } else {
  39.                 c="blanc";
  40.         }
  41.         if(Math.random()<0.7){
  42.                 b="noir";//7 jetons noirs sur 10
  43.         } else {
  44.                 b="blanc";
  45.         }
  46.         gain=0;//gain initial
  47.         if(a!=c) gain++;
  48.         if(c!=b) gain++;
  49.         if(gain==2) effectif2++;
  50. }
  51. freq2=effectif2/500*100;
  52. Alert("la fréquence de parties gagnées est "+freq2+" %");

Télécharger


Fin de la manip

La suite consiste à recopier à la main les sorties de 10 exécutions successives du script précédent pour compléter le tableau de l’énoncé, mais une boucle sur un nouvel indice appelé simulation (le numéro de la simulation) permet de faire imprimer le tableau par CaRMetal.

Voir ce script

  1. /*Programme tp 129c
  2. Correction TP 129 2009
  3. */
  4. var a,b,c;//les couleurs
  5. var gain;//entier
  6. var effectif1,effectif2;//nombre de 2
  7. var freq1,freq2;
  8. for(simulation=1;simulation<=10;simulation++){
  9.         effectif1=0;
  10.         effectif2=0;
  11.         for(i=0;i<500;i=i+1){
  12.                 if(Math.random()<0.4){
  13.                         a="noir";//4 jetons noirs sur 10
  14.                 } else {
  15.                         a="blanc";
  16.                 }
  17.                 if(Math.random()<0.7){
  18.                         b="noir";//7 jetons noirs sur 10
  19.                 } else {
  20.                         b="blanc";
  21.                 }
  22.                 if(Math.random()<0.6){
  23.                         c="noir";//6 jetons noirs sur 10
  24.                 } else {
  25.                         c="blanc";
  26.                 }
  27.                 gain=0;//gain initial
  28.                 if(a!=b) gain++;
  29.                 if(b!=c) gain++;
  30.                 if(gain==2) effectif1++;
  31.         }
  32.         freq1=Math.round(effectif1/500*100000)/1000;
  33.         Print(freq1);
  34.         Print(" , ");
  35.         for(i=0;i<500;i=i+1){
  36.                 if(Math.random()<0.4){
  37.                         a="noir";//4 jetons noirs sur 10
  38.                 } else {
  39.                         a="blanc";
  40.                 }
  41.                 if(Math.random()<0.6){
  42.                         c="noir";//6 jetons noirs sur 10
  43.                 } else {
  44.                         c="blanc";
  45.                 }
  46.                 if(Math.random()<0.7){
  47.                         b="noir";//7 jetons noirs sur 10
  48.                 } else {
  49.                         b="blanc";
  50.                 }
  51.                 gain=0;//gain initial
  52.                 if(a!=c) gain++;
  53.                 if(c!=b) gain++;
  54.                 if(gain==2) effectif2++;
  55.         }
  56.         freq2=Math.round(effectif2/500*100000)/1000;
  57.         Print(freq2);
  58.         Println("");
  59. }

Télécharger


Commentaires