Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.
Programme probabilité
lovespain le 03/02/2012 à 20:01
Bonsoir !
J'ai un petit probleme.
J'ai un exercice à faire, je l'ai fait mais il ne fonctionne pas ..
bref la consigne est:
On lance un dé équilibré. Si le 6 sort, je peux aller chez mon ami, sinon ma mère me donne un devoir. Ma mère a gagné quand elle m'a donné 6 devoirs
(j'avoue la consigne est nulle)
1. Ecrire un algorithme qui simule 200 parties et qui dit le nombre de fois que la mère gagne.
J'ai fait le programme suivant:
Code
0->N (compteur de partie)
0->R (résultat du dé)
0->A (nombre de fois que j'ai le droit d'aller chez mon ami)
0->B (nombre de fois que ma mère gagne)
For(I,1,200
EntAleat(1,6->R
N+1->N
Si N=6
Then
A+1->A
End
End
Disp A
Chaque fois il me met "1".
Si quelqu'un peut m'aider :D
linkakro le 03/02/2012 à 22:21
Je ne suis pas sûr d'avoir compris le type de test que tu veux effectuer.
Je ne sais pas combien de lancers doivent être effectués à chaque partie.
Alors pour ne pas bloquer je suppose qu'il s'agit de lancer le dé 200 fois, et de compter le nombre de fois qe le dé est tombé six fois sur 1,2,...,5.
---
I est déjà un compteur donc N ne sert à rien.
Ton test N=6 n'est valide que lors de la 6ème partie donc le résultat sera toujours 1.
Il faut utiliser N pour compter le nombre de devoirs (dé différent de 6)
Code
0->B // nombre de victoires de la mère
0->N // nombre de devoirs
For(I,1,200 // parties
EntAleat(1,6->R
If R=/=6 // on peut écrire R-6 dans ce cas précis
N+1->N
If N=6
Then
B+1->B
0->N
End
End
Disp B
----
Code
somme(6=/=EntAleat(1,6,200
Disp ent(Rép/6
EntAleat(1,6,200) génère une liste de 200 aléatoires entre 1 et 6.
6=/=EntAleat(1,6,200) effectue le test "différent de 6" sur chaque terme de la liste et le résultat est sous forme de 0 et de 1 qui signifient respectivement faux ou vrai.
somme(6=/=EntAleat(1,6,200)) effectue la somme des résultats, donc calcule le nombre de tests vrais, c'est-à-dire le nombre de devoirs.
ent(Rép/6) effectue la division du nombre de devoirs calculé précemment par 6 pour connaître le nombre de victoires de la mère.
lovespain le 04/02/2012 à 09:15
Jai écrit le programme :
Code
0->B
0->N
Somme)6=/=entaleat(1,6,200
Disp ent(rep/6
C'est juste? Ou il fallait que je le case dans le programme que tu as écrit en premier?
sandro le 04/02/2012 à 10:52
Tu peut même juste écrire:
Code
somme(6=/=EntAleat(1,6,200
Disp ent(Rép/6
Si l'interprétation de l'énnoncé est "on lance 200 fois le dé, et à chaque fois que la mère à donné 6 devoirs, elle gagne un point"
Sinon, si on inerprète l'énnoncé par: "chaque partie ce déroulle comme suit : on lance le dé jusqu'à ce que le 6 tombe (un point pour le fils) ou qu'on ai lancé 6 fois sans obtenir de 6 (un point pour la mère). On fait 200 parties"
Dans ce cas, ça donne ça:
Code
0 -> B
For(I,1,200
0 -> N
Reapeat R=6 ou N=6
N+1 -> N
entaléat(1,6 -> R
End
If N=6
B+1 -> B
End
Disp B
ATENTION : ce second cde ne fait pas la même chose que les précédents : il s'git d'une interprétation différente de l'énnoncé.
Sandro
linkakro le 04/02/2012 à 12:23
Comme le sous-entend sandro, le mini programme fonctionne tout seul.
(le 0->N etc étaient une faute)
D'autre part sandro a traîté précisément la seconde interprétation possible de l'énoncé, sur laquelle je ne m'étais pas avancé.
Si la première interprétation est correcte, il vaut mieux présenter à ton prof la version longue car la courte n'est pas à proprement parler un algorithme.
Variante du code de sandro :
Code
200->B
For(I,1,200
If somme(6=entaléat(1,6,6
B-1->B
End
Disp B
f(x)=2x le 04/02/2012 à 17:54
Bonjour!
J'ai un peu la meme chose, sauf que moi c'est
"Si le 6sort, le lièvre gagne, sinon la tortue avance d'une case. La tortue gagne quand elle a avancé de 6 case, faire un algorythme qui simule 100parties et qui dit le nombre de fois que la tortue gagne" "
J'ai fait un programme :
Code
0->N (nombre de partie en tout)
0->T (nombre de fois que la tortue gagne)
0->L ( " " " le lièvre " )
For(I,1,100
entaleat(1,6->R
N+1->N
If R=6
Then
L+1->L
End
If N=6
Then
T+1->T
End
Disp T
Mais il est faux et je ne sais pas où ..
Maximinus le 04/02/2012 à 18:39
Voila j'ai fait un code je l'ai testé et il fonctionne ^^ Ca prends un peu de temps avant d'avoir le résultat. Je demande l'avis a d'autres personnes plus compétentes pour etre sur qu'il est bon. Je n'arrive pas a utiliser les for donc j'ai un peu changé le programme
Code
0->N (nombre de partie en tout)
0->A (nombre de fois que la tortue avance)
0->T (nombre de fois que la tortue gagne)
0->L ( " " " le lièvre " )
Repeat N=100 -> la calculatrice va répéter l'action jusqu'a
entaleat(1,6->R que N atteigne 100
If R=6
Then
L+1->L
Else -> quand le lievre perds c'est la tortue qui
A+1->A gagne
End
If partDéc(A/6)=0 -> cela correspond a un multiple de 6 je crois Then
T+1->T
End
N+1->N ->N avance de 1 a chaque action effectué
End
Disp T
Cytropus le 04/02/2012 à 18:47
Juste un tout petit point obscure:
Code
entaleat(1,6->R
If R=6
Then
L+1->L
Else
A+1->A
End
If partDéc(A/6)=0
Then
T+1->T
End
Si elle gagne 6 fois et perd la 7ème elle va être compter comme gagnante 2 fois

. Faudrait remettre A à 0.
linkakro le 04/02/2012 à 19:20
f(X)=2X
Il manque un End pour refermer le For
Tu peux aussi enlever les deux Then et le premier End. Si tu enlèves les Then, alors plus besoin d'ajoûter de End.
Maximinus
Je suis d'accord avec Cytropus.Maximinus le 04/02/2012 à 19:40
Code
0->N (nombre de partie en tout)
0->A (nombre de fois que la tortue avance)
0->T (nombre de fois que la tortue gagne)
0->L ( " " " le lièvre " )
Repeat N=100
entaleat(1,6->R
If R=6
Then
L+1->L
Else
A+1->A
End
If A=6
Then
T+1->T
0->A. -> je remet à zero
End
N+1->N
End
Disp T
Ça règle le problème la ? du coup A ne dépassera pas 6.
f(x)=2x le 04/02/2012 à 19:58
Du coup, j'ai :
Code
0->T
0->L
0->R
0->N
For(I,1,100
Entaleat(1,6->R
N+1->N
If R=6
L+1->L
if N=6
T+1->T
End
Disp T
Il me mets toujours 0
linkakro le 05/02/2012 à 00:09
Maximinus : cela mesemble correct.
f(X)=2X
Il y a des erreurs de conception.
Je n'ai pas vraiment de commentaire car je retombe sur un sosi de mon premier code lorsque je tente de le modifier.
Tous ces programmes se ressemblent de près ou de loin alors je crois qu'on a épluché les algorithmes et les interprétations du sujet.f(x)=2x le 05/02/2012 à 13:14
linkakro, est ce que tu peux juste m'expliquer pourquoi on met
Ca veut dire choisir un nombre aleatoire entre 1 et 6 mais pourquoi deux 6 ?
Et est ce que tu peux me le traduire en langage courant ?
je sais juste dire :
B prend la valeur de 200
pour I variant de 1 à 200
Si (je ne sais pas)
B prend la valeur B-1
fin
Faire afficher B
sandro le 05/02/2012 à 13:55
le 6 de la fin signifie qu'au lieux de tirer un nombre, on crée une liste contennant 6 nombres aléatoires compris entre 1 et 6
Sandrof(x)=2x le 05/02/2012 à 14:56
Et je traduis
Code
If somme(6=entaleat(1,6,6
comment ?
Persalteas le 05/02/2012 à 15:36
Tu traduis ça par " Si il y a au moins un des 6 nombres aléatoires entre 1 et 6 qui vaut 6."
Mais je suis pas sur, ça me parait bizarre aussi, comme notation.f(x)=2x le 05/02/2012 à 16:07
j'avoue c'est pas très français

linkakro le 05/02/2012 à 18:15
(Je pensais que le premier exemple que j'ai donné sur ce sujet donnais quelques éléments de réponse.

)
Consultez mon
article sur les tests si vous ne comprenez pas ce que j'ai écrit. Il permet, je pense, d'acquérir quelques bases.
entaleat(1,6,6) donne six nombre aléatoires entre 1 et 6, sous forme de liste.
6=entaleat(1,6,6) effectue le test d'égalité à 6 sur chaque terme de la liste aléatoire. Le résultat est une liste remplie de 0(faux) et de 1(vrai).
somme(6=entaleat(1,6,6)) effectue la somme des 0 et 1 donc calule la quantité d'aléatoires égaux à 6.
If somme(6=entaleat(1,6,6)) teste si la somme est non-nulle, donc si un des aléatoires au moins est égal à 6.
f(x)=2x le 05/02/2012 à 21:03
Merci! T'es vraiment doué dans ce domaine !tapenad le 06/02/2012 à 17:40
pour le prblm de la tortue,le livre de math ne serait pas "hyperbole" de nathan, a la page 226(a peu pres)??f(x)=2x le 06/02/2012 à 20:22
Euh non, c'est juste une activité de mon prof de math.
J'ai juste une question c'est ou qu'on trouve "somme(" ? a part dans le cataloguePersalteas le 06/02/2012 à 20:42
[2nde][stats][<][5].f(x)=2x le 07/02/2012 à 16:00
J'ai juste une question encore
pour le programme :
Code
200->B
For(I,1,200
If somme(6=entaléat(1,6,6
B-1->B
End
Disp B
Est ce que quelqu'un pourrait me le developper ?

le faire un peu plus long
Cytropus le 07/02/2012 à 16:29

Depuis que je suis là c'est la première fois que je voit quelqu'un qui le demande dans ce sens mais si c'est pour le bahut alors je comprend (je me suis taper un 6/20 en algo parce que mon prof connaissait pas les fonctions

)
Code
200->B
For(I,1,200
For(J,1,6
entaléat(1,6->A
If A=6
Then
B-1->B
End
End
End
J'ai mis Then et End car mon prof savait pas qu'on pouvait s'en passer

f(x)=2x le 07/02/2012 à 16:44
c'est tout a fait ca, je me suis aussi déjà tapé une salle note sur un algo parce que j'avais enlevé des truc qui ne me servaient a rien du genre un guillemet ou des then/end
Merci beaucoup !
Cytropus le 07/02/2012 à 16:50
Le mieu c'est quand tu prend la Ti de ton voisin, que tu active autotest et que tu appel le prof en disant que t'as toucher à rien et qu'elle c'est mise à compter toute seul

f(x)=2x le 07/02/2012 à 16:56
(C'est normal que quand je fais le prgm, j'ai des chiffres negatifs ?

)
J'ai jamais fait ca, c'est ou "autotest" ?

Cytropus le 07/02/2012 à 17:03
[mode]+[alpha]+[In] pour autotest (attends vraiment d'être sur la Ti du voisin

)

autan pour moi
Code
200->B
For(I,1,200
entAléat(1,6->A
entAléat(1,6->B
entAléat(1,6->C
entAléat(1,6->D
entAléat(1,6->E
entAléat(1,6->F
If A=6 ou B=6 ou C=6 ou D=6 ou E=6 ou F=6
Then
B-1->B
End
End
f(x)=2x le 07/02/2012 à 17:11
xDD je suis expremement pressée de voir la tete de mon prof
Merci

sandro le 07/02/2012 à 18:47
et c'est un reset assuré, l'autotest. tu as donc intéret soit à sauvegarder les programmes de ton voisin quelquepart, soit de le faire discrètement à un voisin que tu déteste franchement.
Sandro.
PS : sinon pour faire planter, tu as aussi Binaléat(N,1 plus N est grand, plus sa prend de temps (si tu met 100 à la place de N, ça prend quelques secondes, pour 1000 plus d'une demi minute, et pour 10000 une dizaine si mes souvenirs sont exacts. Et si t'es vraiment cruel, met 10^99, t'en a pour plus longtemps que l'espérence de vie d'une étoile.Persalteas le 07/02/2012 à 21:16
Le top du bug-méchant:
Supprimer l'OS.
Top secret a écrit :
- enlever une pile
- appuyer plusieurs fois sur On
- enfoncer la touche [Del] ( [suppr] en français ), ne plus la lacher
- remettre la pile manquante (avec l'autre main, ne pas lâcher [Del] )
- appuyer sur On (toujours avec la main libre)
- lacher enfin les 2 touches On et Del
ça, le propriétaire sera obligé d'acheter une nouvelle TI.

sandro le 07/02/2012 à 21:43
ça marche de suprimer un OS sur TI82stats ?Persalteas le 07/02/2012 à 23:16
oui.
et comme tu peux pas le remettre, ta TI est foutue.
ça marche pas sur les non-fr par contre.linkakro le 07/02/2012 à 23:39
Cela s'explique par le fait que la carte mère de la 82statfr est très proche de celle de la 83plus, quasiment à une soudure près.
C'est sympa aussi de saisir "Y1"->Y1 ou le même genre avec les listes, suites...
Cela cause de belles erreurs mémoire

(innofensives)
Je préfère cela aux bugs destructifs.
( Quand on parle de ces bugs dans des sujets dont le public est plus ou moins débutant, je n'ose pas immaginer ceux qui les testeraient un peu trop vite... sans lire les avertissements. )
====
cite :
https://tout82.pages-perso.fre[...]age=42261#42261f(X)=2x a écrit :
J'ai juste une question encore :Code
200->B
For(I,1,200
If somme(6=entaléat(1,6,6
B-1->B
End
Disp B
Est ce que quelqu'un pourrait me le developper ?
le faire un peu plus long
Il était possible de prendre le code de sandro qui était déjà équivalent. J'avais bien dit que c'était une variante, non ?
Mes deux premiers programmes sont équivalents et constituent la première interprétation de l'énoncé.
Le programme de sandro et mon troisième programme sont équivalents et constituent la façon la plus plausible d'interpréter le sujet.
Mais ce n'est pas grâve, d'autant qu'on a maintenant une troisième version du code faite par cytropus.
sandro le 08/02/2012 à 09:41
C'est vrai que l'autoréférence crée assez vite des erreures mémoires.
A essaer aussi:
Programme BUG:
[code]prgmBUG[code]Persalteas le 08/02/2012 à 11:15
Non: ce que tu dis Sandro, ça tient deux secondes même pas.
Mais en fait, Linkakro:
ça fait rien de mal, "Y1"->Y1 ...
ça prend juste une valeur dans Y1 pour la stocker dans la variable Y1, et c'est tout.
ça ne fait pas de bug (heureusement...)sandro le 08/02/2012 à 11:40
essaye ensuite de tracer le graphe, ça te fait une belle erreur mémoire.
de même que toutes les autoréférences et inter-références en bouclePersalteas le 08/02/2012 à 14:21
autant pour moi, j'ai confondu "Y1"->Y1 et Y1->Y1.
Quelles autres autoréférences vois-tu ? (a part les fonctions et les programmes) ?sandro le 08/02/2012 à 17:44
les listes, "L1" -> L1 ; les Goto qui sortent d'une boucle.tapenad le 09/02/2012 à 19:44
d'ailleurs c'est quoi l'OS d'une calto?sandro le 09/02/2012 à 19:49
en gros, c'est ce qui determine toute les fonction de la calculatrice et qui est un élément majeur de la ROM. à partir de la TI83+, on peut mettre cette partie là à jours.
SandroPersalteas le 09/02/2012 à 21:02
Pour te donner une idée (peut être que tu sais déjà), un OS est un "gros logiciel" capable de faire une interface entre la machine brute (boot code) et l'utilisateur.
Sur ordinateur, les OS les plus connus sont Windows, Mac, Linux, (maintenant y'a chromium sur les chromebooks...)
Une TI a elle aussi besoin d'un "gros programme" capable de créer une interface entre les puces électroniques et l'élève. Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.