Les préconisations du Bulletin officiel n° 30 du 23 juillet 2009 dans le cadre des probabilités et statistiques sont les suivantes :
En voici les contenus, capacités attendues et commentaires :
Cet article propose en conséquence quelques exemples d’algorithmes utilisables pour réaliser des simulations avec les élèves en classe de seconde, en vue d’en exploiter les résultats pour échantillonnages. Ces algorithmes sont mis en œuvre soit sur tableur, soit sur calculatrice, soit les deux et enfin avec le logiciel Scratch.
Simulations de naissances
Simulation sur un tableur
Nous allons apprendre dans cette fiche cinq nouvelles fonctions de tableur utiles aux simulations.
Le but de cette fiche est de reproduire la feuille de tableur ci-dessus dans laquelle on a simulé 20 familles de 4 enfants, à l’aide de nombres aléatoires (cellules A2 à D21).
Le codage choisi est le suivant : Pair= Garçon, Impair= Fille.
Les commandes de tableur dont nous avons besoin :
Les fonctions Alea() et Ent(), les fonctions Si() et Mod() et pour le comptage, la fonction Nb.Si().
Les fonctions Alea() et Ent()
Tirage d’un nombre aléatoire entier :
Alea( ) tire un nombre aléatoire (réel) entre 0 et 1 (1 exclu).
Ent( ) prend la partie entière d’un nombre réel.
Ainsi, pour tirer un nombre aléatoire entier compris entre 0 et 9, il faut faire Ent(10*Alea()).
Les nombres contenus dans la plage A2:D21 sont donc donnés par :
Ent(10*Alea()) .
Codage : les fonctions Si() et Mod()
La fonction Si( ) permet de tester une condition. Elle est très puissante et très utilisée en programmation.
Ainsi la fonction Si teste la condition. Si elle est vraie, le tableur réalise l’action 1. Sinon, c’est l’action 2 qui est exécutée.
A l’aide de cette fonction Si, le codage du nombre aléatoire tiré dans la cellule A2 est par exemple :
Si( A2=2 ; « G » ; « F »)
(Si le contenu de la cellule A2 est un 2, inscrire un G, sinon inscrire un F.)
Mais le test réel que nous devons effectuer est : si le nombre est pair, inscrire un G sinon, inscrire un F. Nous devons donc tester si un nombre est pair.
La fonction Mod( ) renvoie le reste d’une division euclidienne :
Mod(25 ; 10) vaut 5 puisque c’est le reste de la division de 25 par 10.
Mod(A2 ; 2) renvoie le reste de la division du contenu de la cellule A2 par 2.
Si le reste est 0, le nombre est pair, sinon, il est impair.
D’où le test nécessaire pour coder le contenu de la cellule A2 en E2 :
Comptage : la fonction Nb.Si()
La fonction Nb.Si( ) permet de compter :
Nb.Si(plage ; critère) compte le nombre de fois que le critère est rencontré dans la plage indiquée.
En I2, on compte le nombre de F dans une famille. La formule de la cellule I2 est donc :
Nb.Si(E2 : H2 ; « F »)
Exercice
Donner les formules des cellules D11, E16, I10, K2 à K6 puis L2 à L6.
Finir la feuille en reproduisant l’histogramme.
Conclusion
Lorsque la feuille de tableur est terminée, appuyer sur la touche F9 dix fois et noter les résultats des 10 simulations (cases J2 à L6).
Représenter sur un graphique une des valeurs observées pendant les 10 simulations (par exemple la fréquence des familles de 3G1F).
Quelle conclusion peut-on en tirer ?
Suivre le paramètre 3G1F. Noter les valeurs observées. Comparer à la valeur théorique.
Donner pour 100 et pour 1000 simulations les résultats obtenus dans un tableau. (On appuiera pour cela autant de fois que nécessaire sur la touche F9).
Quelle conclusion peut-on en tirer ?
Simulations de promenades aléatoires
Citons le document ressource pour la seconde Probabilités et statistiques.
Promenades aléatoires sur une droite
Promenades à 4 pas
On simule à la calculatrice 100 promenades à 4 pas. Pour chaque simulation, on dénombre le nombre de promenades qui se terminent à la distance 0, 2 ou 4 de l’origine. On effectue 10 simulations de ce genre.
Pour 1000 promenades, combien de promenades se terminent à la distance 0 du point de départ ? à la distance 2 ? à la distance 4 ? Calculer la distance moyenne du point de départ au bout de ces 1000 promenades. Comparer avec la distance moyenne théorique (1,5).
Promenades à 5 pas
On simule à la calculatrice 100 promenades à 5 pas. Pour chaque simulation, on dénombre le nombre de promenades qui se terminent à la distance 1, 3 ou 5 de l’origine. On effectue 10 simulations de ce genre.
Pour 1000 promenades, combien de promenades se terminent à la distance 1 du point de départ ? à la distance 3 ? à la distance 5 ? Calculer la distance moyenne du point de départ au bout de ces 1000 promenades. Comparer avec la distance moyenne théorique (1,875).
Les programmes TI89 ou TI92
Promenade à n pas
A l’aide du programme suivant, on pourra remplir les tableaux.
Programme promalea()
() Prgm
Local a,dist,npas,npasd,npasg
ClrIO
Disp " promenade a npas : "
Prompt npas
For i,1,npas
int(2*rand()+1)-1→a[i]
EndFor
Disp a
0→dist:0→npasd:0→npasg
For i,1,npas
If a[i]=1 Then
npasd+1→npasd
Else
npasg+1→npasg
EndIf
EndFor
If npasd=npas or npasg=npas Then
npas→dist
Else
npasd-npasg→dist
EndIf
Disp " distance de l origine "
Disp abs(dist)
EndPrgm
100 Promenades à 4 pas
Programme prom4()
() Prgm
Local a,dist
ClrIO
Disp " 100 promenades "
For j,1,100
0→dist[j]
For i,1,4
int(2*rand()+1)-1→a[i]
EndFor
Disp a
If a[1]=0 and a[2]=0 and a[3]=0 and a[4]=0 or a[1]=1 and a[2]=1 and a[3]=1 and a[4]=1 Then
4→dist[j]
Else
For i,1,4
If a[i]=0 Then
dist[j]-1→dist[j]
Else
dist[j]+1→dist[j]
EndIf
EndFor
EndIf
EndFor
0→n0 : 0→n2 : 0→n4
For j,1,100
If dist[j]=0 Then
n0+1→n0
ElseIf abs(dist[j])=2 Then
n2+1→n2
ElseIf abs(dist[j])=4 Then
n4+1→n4
EndIf
EndFor
Disp " distance = 0 ",n0
Disp " distance = 2 ",n2
Disp " distance = 4 ",n4
EndPrgm
100 Promenades à 5 pas
Programme prom5()
() Prgm
Local a,dist,npas,npasd,npasg
ClrIO
Disp " 100 promenade a npas : "
Prompt npas
For j,1,100
0→dist[j]:0→npasg:0→npasd
For i,1,npas
int(2*rand()+1)-1→a[i]
EndFor
Disp a
For i,1,npas
If a[i]=1 Then
npasd+1→npasd
Else
npasg+1→npasg
EndIf
EndFor
If npasd=npas or npasg=npas Then
npas→dist[j]
Else
npasd-npasg→dist[j]
EndIf
Disp " distance de l origine "
Disp abs(dist[j])
EndFor
0→n1:0→n3:0→n5
For j,1,100
If dist[j]=1 Then
n1+1→n1
ElseIf abs(dist[j])=3 Then
n3+1→n3
Else
n5+1→n5
EndIf
EndFor
Disp " distance = 1 ",n1
Disp " distance = 3 ",n3
Disp " distance = 5 ",n5
EndPrgm
Promenades aléatoires sur un triangle équilatéral
ABC est un triangle équilatéral . On définit un sens de parcours direct sur ce triangle : A → B → C → A . Le sens indirect est alors : A → C → B → A. Une puce se déplace sur les bords de ce triangle en sautant d’un sommet à l’autre. Toutes les secondes, la puce change de sommet en choisissant son sens de parcours de manière aléatoire. Ainsi, si la puce est en A, elle peut sauter en B ou en C. Elle part de A au temps 0 et sa promenade dure 4 secondes.
La puce voudrait connaître son nombre moyen de passages par le point A au bout d’un grand nombre de promenades.
Exemples de promenades :
BCBA : 1 passage en A
BABA : 2 passages en A
CBCB : 0 passage en A
Codage et simulation
a. Expliquer comment simuler une promenade avec :
– une pièce de monnaie
– un dé
– une table binaire de 0 et de 1
b. Simuler 20 promenades à l’aide de la table binaire de nombres aléatoires fournie. On choisira son premier nombre en piquant sur la feuille au hasard et on écrira sur sa copie la suite de nombres aléatoires obtenue, puis son codage.
c. Remplir alors le tableau suivant :
d. Dresser l’histogramme des fréquences.
e. Calculer le nombre moyen de passages par le sommet A pour cette simulation.
Analyse théorique
a. Donner la liste de toutes les promenades possibles de la puce (on peut pour cela utiliser un arbre de choix mais ce n’est pas une obligation). Combien y en a-t-il ?
b. Remplir alors le tableau suivant :
c. Porter sur l’histogramme dressé à la question précédente les fréquences théoriques que vous venez de calculer.
d. Calculer le nombre moyen théorique de passages par le sommet A.
Vers un grand nombre de promenades
Vers une simulation d’un grand nombre de promenades : utilisation d’un outil informatique
3.1. A l’aide d’une calculatrice ou d’un tableur, on a simulé la promenade de la puce et on a obtenu le tableau suivant :
a. Remplir la colonne du nombre moyen de passages en A.
b. Représenter sur un graphique ce nombre moyen en fonction du nombre de promenades.
c. Tracer une droite horizontale qui coupe l’axe des ordonnées au nombre moyen théorique de passages en A. Quel commentaire peut-on faire ?
3.2. On effectue maintenant 10 simulations de 100 promenades.
a. On a obtenu le tableau suivant qu’il faut compléter :
b. En utilisant les 10 simulations précédentes, remplir pour finir le tableau suivant :
c. Calculer le nombre moyen de passages par le sommet A. Comparer avec le nombre moyen théorique. Quelle conclusion pouvez-vous tirer de cette expérience ?
Les programmes TI89 ou TI92
Programme promtria() pour 1 promenade de nt secondes
Promenade de nt secondes
Programme promtria()
() Prgm
Local a
"A→B→C→A"→sensdrct
"A→C→B→A"→sensind
ClrIO
Disp "* Promenade sur un triangle ABC *"
Disp "sens direct : "&sensdrct
Disp "sens indirect : "&sensind
Disp "duree de la promenade "
Prompt nt
For i,1,nt
int(2*rand()+1)-1→a[i]
EndFor
Disp a
"A"→chain
For i,1,nt
If a[i]=0 Then
̈ sens direct
If mid(chain,i,1)="A" Then
chain&"B"→chain
ElseIf mid(chain,i,1)="B" Then
chain&"C"→chain
ElseIf mid(chain,i,1)="C" Then
chain&"A"→chain
EndIf
ElseIf a[i]=1 Then
̈ sens indirect
If mid(chain,i,1)="A" Then
chain&"C"→chain
ElseIf mid(chain,i,1)="B" Then
chain&"A"→chain
ElseIf mid(chain,i,1)="C" Then
chain&"B"→chain
EndIf
EndIf
EndFor
Disp chain
EndPrgm
np promenades de 4 secondes
Programme promtrin()
() Prgm
Local a,n0,n1,n2
"A→B→C→A"→sensdrct
"A→C→B→A"→sensind
0→n0:0→n1:0→n2
ClrIO
Disp "* Promenade sur un triangle ABC *"
Disp "sens direct : "&sensdrct
Disp "sens indirect : "&sensind
Disp " saisir le nombre de promenades "
Prompt np
Disp "duree des promenades "
4→nt
Disp "4"
For j,1,np
For i,1,nt
int(2*rand()+1)-1→a[i]
EndFor
Disp a "A"→chain
For i,1,nt
If a[i]=0 Then
̈ sens direct
If mid(chain,i,1)="A" Then
chain&"B"→chain
ElseIf mid(chain,i,1)="B" Then
chain&"C"→chain
ElseIf mid(chain,i,1)="C" Then
chain&"A"→chain
EndIf
ElseIf a[i]=1 Then
̈ sens indirect
If mid(chain,i,1)="A" Then
chain&"C"→chain
ElseIf mid(chain,i,1)="B" Then
chain&"A"→chain
ElseIf mid(chain,i,1)="C" Then
chain&"B"→chain
EndIf
EndIf
EndFor
Disp chain
0→nombrea
For i,2,dim(chain)
If mid(chain,i,1)="A" Then
nombrea+1→nombrea
EndIf
EndFor
If nombrea=0 Then
n0+1→n0
ElseIf nombrea=1 Then
n1+1→n1
Else
n2+1→n2
EndIf
Disp string(nombrea)&" passages en A "
̈Pause
EndFor
Disp "n0 "&string(n0)
Disp "n1 "&string(n1)
Disp "n2 "&string(n2)
Disp "nombre moyen de passages en A :"
Disp (n1+2.*n2)/np
EndPrgm
Promenades aléatoires sur un tétraèdre
Voici la description du problème extraite d’une fiche de statistiques du document d’accompagnement de seconde des programmes de juin 2000 (« Onze fiches de statistique ») :
On promène un pion sur les sommets d’un tétraèdre ; toutes les secondes, on déplace le pion d’un sommet à un autre, en choisissant au hasard parmi les trois sommets possibles. On s’intéresse au temps écoulé entre le début de la promenade du pion et le premier retour au point de départ. On limite la promenade à une minute. On utilise des lancers de dés, simulés ou non, pour les déplacements du pion.
Voici un exemple d’une promenade en 5 coups, avec un codage particulier des arêtes :
Il s’agit de construire un codage des arêtes du tétraèdre pour une telle promenade.
Codage sur un tableur
Départ = A en cellule A3
Test 1re position
=SI(OU(C4=1;C4=2);"B";SI(OU(C4=3;C4=4);"C";"D"))
Test 2e position
=SI( OU(ET(A4="B";OU(C5=1;C5=2));ET(A4="C";OU(C5=3;C5=4));ET(A4="D";O U(C5=5;C5=6)));"A"; SI(OU(ET(A4="C";OU(C5=5;C5=6));ET(A4="D";OU(C5=3;C5=4)));"B"; SI(OU(ET(A4="B";OU(C5=5;C5=6));ET(A4="D";OU(C5=1;C5=2)));"C"; SI(OU(ET(A4="C";OU(C5=1;C5=2));ET(A4="B";OU(C5=3;C5=4)));"D"))))
Test 3e position et toutes les suivantes
=SI( OU(A5="A";A5=" ");" "; SI(OU(ET(A5="B";OU(C6=1;C6=2));ET(A5="C";OU(C6=3;C6=4));ET(A5="D"; OU(C6=5;C6=6)));"A"; SI(OU(ET(A5="C";OU(C6=5;C6=6));ET(A5="D";OU(C6=3;C6=4)));"B"; SI(OU(ET(A5="B";OU(C6=5;C6=6));ET(A5="D";OU(C6=1;C6=2)));"C"; SI(OU(ET(A5="C";OU(C6=1;C6=2));ET(A5="B";OU(C6=3;C6=4)));"D")))))
Les codes des macros de la feuille de tableur (codages en Visual Basic)
la macro Promenade aléatoire
Rem Attribute VBA_ModuleType=VBAModule
Option VBASupport 1
Public vitesse As Integer
Public CouleurOff As Integer
Public CouleurOn As Integer
Sub PromenadeAleatoire()
'
' PromenadeAleatoire Macro
' Macro enregistrée le 12/11/2000 par nathalie
'
' Touche de raccourci du clavier: Shift+Ctrl+e
'
Dim TempsPromenade As Integer
Dim numeroAlea As Long
Dim celluleAlea As String
Dim numeroSommet As Long
Dim celluleSommet As String
Dim NomSommet As String
Dim Alea(60) As Integer
Dim nbAlea As Integer
Randomize
'initialisations
For j = 1 To 60
Alea(j) = 0
Next j
'Remplissage du tableau
For j = 1 To 60
Alea(j) = Int(6 * Rnd + 1)
Next j
Worksheets("PromenadeGraphique").Activate
Range("P2:R61").Select
Selection.ClearContents 'efface la sélection
'ecrireSommets (" ")
'Range("A1:O25").Select
'Selection.Interior.ColorIndex = CouleurOff
'initialisations
vitesse = 1
CouleurOff = 0
CouleurOn = 46
reglage (vitesse)
'départ de la promenade : écrire A dans la cellule P4
Range("R4").Select
Selection.Offset(0, 0).Value = "A"
NomSommet = "A"
placer (NomSommet)
attente (vitesse) 'boucle d'attente
'premier jet de dé
TempsPromenade = 1
Range("P5").Select
ActiveCell.FormulaR1C1 = Alea(TempsPromenade)
nbAlea = Selection.Offset(0, 0).Value
attente (vitesse) 'boucle d'attente
'test première position
' =SI(OU(R5=1;R5=2);"B";SI(OU(R5=3;R5=4);"C";"D"))
Range("R4").Select
If nbAlea = 1 Or nbAlea = 2 Then
Selection.Offset(1, 0).Value = "B"
efface (NomSommet)
NomSommet = "B"
placer ("B")
Else
If nbAlea = 3 Or nbAlea = 4 Then
Selection.Offset(1, 0).Value = "C"
efface (NomSommet)
NomSommet = "C"
placer ("C")
Else
Selection.Offset(1, 0).Value = "D"
efface (NomSommet)
NomSommet = "D"
placer ("D")
End If
End If
TempsPromenade = 2
attente (vitesse) 'boucle d'attente
'second jet de dé
Range("P6").Select
ActiveCell.FormulaR1C1 = Alea(TempsPromenade)
nbAlea = Selection.Offset(0, 0).Value
attente (vitesse) 'boucle d'attente
'Test 2ème position
'=SI(OU(ET(P5="B";OU(R6=1;R6=2));ET(P5="C";OU(R6=3;R6=4));ET(P5="D";OU(R6=5;R6=6)));"A";
'SI(OU(ET(P5="C";OU(R6=5;R6=6));ET(P5="D";OU(R6=3;R6=4)));"B";
'SI(OU(ET(P5="B";OU(R6=5;R6=6));ET(P5="D";OU(R6=1;R6=2)));"C";
'SI(OU(ET(P5="C";OU(R6=1;R6=2));ET(P5="B";OU(R6=3;R6=4)));"D"))))
Range("R5").Select
lettre = Selection.Offset(0, 0).Value
If (lettre = "B" And (nbAlea = 1 Or nbAlea = 2)) Or (lettre = "C" And (nbAlea = 3 Or nbAlea = 4)) Or (lettre = "D" And (nbAlea = 5 Or nbAlea = 6)) Then
Selection.Offset(1, 0).Value = "A"
efface (NomSommet)
NomSommet = "A"
placer ("A")
Else
If (lettre = "C" And (nbAlea = 5 Or nbAlea = 6)) Or (lettre = "D" And (nbAlea = 3 Or nbAlea = 4)) Then
Selection.Offset(1, 0).Value = "B"
efface (NomSommet)
NomSommet = "B"
placer ("B")
Else
If (lettre = "B" And (nbAlea = 5 Or nbAlea = 6)) Or (lettre = "D" And (nbAlea = 1 Or nbAlea = 2)) Then
Selection.Offset(1, 0).Value = "C"
efface (NomSommet)
NomSommet = "C"
placer ("C")
Else
If (lettre = "C" And (nbAlea = 1 Or nbAlea = 2)) Or (lettre = "B" And (nbAlea = 3 Or nbAlea = 4)) Then
Selection.Offset(1, 0).Value = "D"
efface (NomSommet)
NomSommet = "D"
placer ("D")
End If
End If
End If
End If
Range("P7").Select
numeroAlea = 6
celluleSommet = "R6"
numeroSommet = 5
Do
attente (vitesse) 'boucle d'attente
TempsPromenade = TempsPromenade + 1
numeroAlea = numeroAlea + 1
celluleAlea = numeroAlea
celluleAlea = "P" & celluleAlea
'troisième jet de dé et suivants
Range(celluleAlea).Select
ActiveCell.FormulaR1C1 = Alea(TempsPromenade)
nbAlea = Selection.Offset(0, 0).Value
attente (vitesse) 'boucle d'attente
efface (NomSommet)
'Test 3ème position et toutes les suivantes
'=SI(OU(P6="A";P6=" ");" ";
'SI(OU(ET(P6="B";OU(R7=1;R7=2));ET(P6="C";OU(R7=3;R7=4));ET(P6="D";OU(R7=5;R7=6)));"A";
'SI(OU(ET(P6="C";OU(R7=5;R7=6));ET(P6="D";OU(R7=3;R7=4)));"B";
'SI(OU(ET(P6="B";OU(R7=5;R7=6));ET(P6="D";OU(R7=1;R7=2)));"C";
'SI(OU(ET(P6="C";OU(R7=1;R7=2));ET(P6="B";OU(R7=3;R7=4)));"D")))))
numeroSommet = numeroSommet + 1
celluleSommet = numeroSommet
celluleSommet = "R" & celluleSommet
Range(celluleSommet).Select
lettre = Selection.Offset(0, 0).Value
If lettre = "A" Or lettre = " " Then
Selection.Offset(1, 0).Value = " "
Else
If (lettre = "B" And (nbAlea = 1 Or nbAlea = 2)) Or (lettre = "C" And (nbAlea = 3 Or nbAlea = 4)) Or (lettre = "D" And (nbAlea = 5 Or nbAlea = 6)) Then
Selection.Offset(1, 0).Value = "A"
NomSommet = "A"
placer ("A")
Else
If (lettre = "C" And (nbAlea = 5 Or nbAlea = 6)) Or (lettre = "D" And (nbAlea = 3 Or nbAlea = 4)) Then
Selection.Offset(1, 0).Value = "B"
NomSommet = "B"
placer ("B")
Else
If (lettre = "B" And (nbAlea = 5 Or nbAlea = 6)) Or (lettre = "D" And (nbAlea = 1 Or nbAlea = 2)) Then
Selection.Offset(1, 0).Value = "C"
NomSommet = "C"
placer ("C")
Else
If (lettre = "C" And (nbAlea = 1 Or nbAlea = 2)) Or (lettre = "B" And (nbAlea = 3 Or nbAlea = 4)) Then
Selection.Offset(1, 0).Value = "D"
NomSommet = "D"
placer ("D")
End If
End If
End If
End If
End If
Loop Until (lettre = "A" Or TempsPromenade = 60)
'Range("A1:O25").Select
'Selection.Interior.ColorIndex = CouleurOff
'Range("B19").Select
'Selection.Interior.ColorIndex = CouleurOn
If TempsPromenade < 60 Then TempsPromenade = TempsPromenade - 1
Range("P2").Select
Selection.Offset(-1, -1).Value = "Temps de la Promenade"
Selection.Offset(0, 0).Value = TempsPromenade & " secondes"
End Sub
Sub placer(sommet As String)
If sommet = "A" Then
Range("B19").Select
Selection.Interior.ColorIndex = CouleurOn
ElseIf sommet = "B" Then
Range("I23").Select
Selection.Interior.ColorIndex = CouleurOn
ElseIf sommet = "C" Then
Range("M19").Select
Selection.Interior.ColorIndex = CouleurOn
ElseIf sommet = "D" Then
Range("G4").Select
Selection.Interior.ColorIndex = CouleurOn
End If
End Sub
Sub efface(sommet As String)
If sommet = "A" Then
Range("B19").Select
Selection.Interior.ColorIndex = CouleurOff
ElseIf sommet = "B" Then
Range("I23").Select
Selection.Interior.ColorIndex = CouleurOff
ElseIf sommet = "C" Then
Range("M19").Select
Selection.Interior.ColorIndex = CouleurOff
ElseIf sommet = "D" Then
Range("G4").Select
Selection.Interior.ColorIndex = CouleurOff
End If
End Sub
Sub ecrireSommets(s As String)
Dim faceDé As String
Range("A19").Select
Selection.Value = "A"
Range("I24").Select
Selection.Value = "B"
Range("N19").Select
Selection.Value = "C"
Range("G3").Select
Selection.Value = "D"
'écriture des codes de dés
Range("D11").Select
faceDé = "5.6"
Selection.Value = faceDé
Range("K22").Select
Selection.Value = "5.6"
Range("E22").Select
Selection.Value = "1.2"
Range("K12").Select
Selection.Value = "1.2"
Range("F18").Select
Selection.Value = "3.4"
Range("I15").Select
Selection.Value = "3.4"
End Sub
Sub attente(v As Integer)
For k = 1 To Int(100000000 * (1 / (v + 1)))
Next k
End Sub
Sub reglage(v As Integer)
vitesse = InputBox("Vitesse d'exécution : Entrer un entier compris entre 1 et 1000")
End Sub
la macro Temps de premier retour
Rem Attribute VBA_ModuleType=VBAModule
Option VBASupport 1
Sub TempsDePremierRetour()
'
' TempsDePremierRetour Macro
' Macro enregistrée le 12/11/2000 par nathalie
'
' Touche de raccourci du clavier: Shift+Ctrl+d
'
Dim TabPromenade(20, 30) As Integer
Dim NbPromenadesParJeu As Integer
Dim NbJeux As Integer
Dim Jx As Integer
Dim Jp As Integer
'initialisation des acquisitions
NbPromenadesParJeu = 20
NbJeux = 30
Worksheets("Promenade").Activate
MsgBox "Patientez SVP, le tableur fait ses tirages aléatoires, cela peut prendre plusieurs minutes."
'acquisition des données aléatoires dans le tableau TabPromenade
For Jx = 1 To NbJeux
For Jp = 1 To NbPromenadesParJeu
Range("C4").Select
ActiveCell.FormulaR1C1 = "=ROUND(RAND()*5+1,0)"
Range("E6").Select
TabPromenade(Jp, Jx) = ActiveCell.Value
Next Jp
Next Jx
'Sheets("Calculs").Select
Worksheets("Calculs").Activate
Jx = 1
For Each cell_in_loop In Range("B3:B32")
For Jp = 0 To NbPromenadesParJeu - 1
cell_in_loop.Offset(0, Jp).Value = TabPromenade(Jp + 1, Jx)
Next Jp
Jx = Jx + 1 'changement de jeu
Next
MsgBox "Fin du calcul. Vous pouvez consulter les histogrammes sur cette feuille."
End Sub
Les résultats :
Codage sur Scratch
Voir en ligne l’exécution de ce programme ici :
http://scratch.mit.edu/projects/nathalierun/734317
Le petit mot de la fin
Le programme officiel dit explicitement qu’il ne s’agit pas au lycée de faire des programmeurs en classe de mathématiques mais, dans le cadre des simulations en l’occurrence, il est très utile pour les élèves de pouvoir les rendre concrètes et de les réaliser par eux-mêmes (au moins des simples : les simulations de naissances par exemple).
Commentaires