CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Basic] Calculette TI-89 et proba

[roganel]
[roganel]
Niveau 9
01 juin 2009 à 15:58:14

Voici mon problème :

On note l'évènement N:"Deux élèves dans une classe de 30 élèves ont le même jour d'anniversaire"
Nous pouvons voir que cela peut être modélisé par un tirage de 30 boules dans une urne qui en contient 365 numérotées ( équiprobabilité pour chaque boule )

1. Calculer P(N)

( Aide : On commercera par chercher Nbarre puis P(Nbarre)
Le calcul de P(Nbarre) étant un peu long on pourra faire un programme pour le calculer.

Donc voila ce que je peux dire :

Nbarre:"Tous les élèves ont une date d'anniversaire différente"

P(Nbarre)= (365*364*363*362*361*...*336)/365^30

P(N) = 1 - P(Nbarre)

Je ne comprend pas comment réaliser un programme qui puisse calculer ceci rapidement et facilement !

Nirvv
Nirvv
Niveau 5
01 juin 2009 à 17:14:12

Alors heu je me suis penché dessus 5minutes et j'ai trouvé un moyen de le faire. Après c'est possible qu'il y est d'autre possibilité..
SAUF que.. Je peux réaliser ton probleme en C et en PHP mais le basic.. Pas mon truc.

Je peux juste te donner "l'idée" : faut faire une boucle.
Par exemple : tu mets une variable i = 365, tant que i > 335 on fait :
i = i * (i - 1)
(et on DEcrémente i de 1 a chaque tour de boucle)

Donc au départ tu as i = 365
La variable i va donner apres un tour de boucle : 365 * (365 - 1) soit 365*364
Au deuxieme de tour elle vaudra 365*364 * (364-1)DONC 365*364*363.
Donc a la fin elle vaudra 365*364*363*362.. etc jusqu'a 336.
(Tu peux ecrire les calculs sur une feuille de papier, tu verras que ça se vérifie)

Apres la boucle de ton programme, tu fais : i/365^30 tout simplement. Et t'obtient la proba de P(Nbarre).
Et tu calcules ton P(N).

J'espere que ce que je t'ai dis est faisable en Basic.. Car je connais pas du tout mais je me doute qu'il y est du boucle, des calculs, des affichages.. Donc j'espere que ça fonctionnera ^^'.

Bonne continuation

[roganel]
[roganel]
Niveau 9
01 juin 2009 à 17:38:56

Merci je pense que c'est une bonne idée ca doit être faisable

Notre prof de math nous a demandé de faire un programme sur cela mais nous avons très peu travailler les programmes sur la calculatrice !

Sinon j'ai fais le calcul à la bourrin et j'ai trouvé pour P(N) 71% environ ^^

Nirvv
Nirvv
Niveau 5
01 juin 2009 à 18:06:14

J'ai dis une petite bêtise dans le code par contre.
Faut utiliser une autre variable que i pour la boucle.
Si tu utilises i pour garder le résultat c'est pas bon en faite ^^'.

Parce que dans la boucle on écrit que i va être egal a 365*364 etc... Donc i sera toujours supérieure a 335. (Si tu vois ce que je veux dire).

Faut plutot faire comme ça :
i = 365, tant que i > 365, on décremente i de 1 a chaque tour de boucle
Et on ecrit :
resultat = i * (i - 1);

resultat étant une variable toute simple ^^' qui contiendra cette fois le bon résultat (donc 365*364 etc...)
J'essaye de faire un programme de mon coté en C pour voir si je trouve environ 71%, si ça peut aider ;)

J'espere que tu vois ce que je veux dire sur mon erreur plus haut.

Bonne continuation

[roganel]
[roganel]
Niveau 9
01 juin 2009 à 18:15:14

Oui j'ai essayé de faire un programme avec l'aide de ton 1er post mais apparemment ca bug ! je te montre : ( c'est pas compliqué a comprendre )

:Prompt e ( la ca demande la valeur de e , c'ets le nombre d'élèves en fait )
:365->i ( donc la c'est i=365 )
:While i>365
:i*(i-1)->i
:EndWhile ( donc la c'est la boucle comme tu ma dit )
:1-(i/365^e)->p ( ici on calcule la proba de P(N)
:Disp approx(p) ( et donc ici on affiche a l'écran la veur approximative de P(N))
:EndPrgm

[roganel]
[roganel]
Niveau 9
01 juin 2009 à 18:18:31

euh non je me suis trompé a la ligne While en fait dans mon programme j'ai écrit ca :

:While i>(365-e)

je pense que l'erreur est là, pour le bug, parce que par exemple si on a 30 élèves on aura i>335 mais i est toujours supérieur a 335 :s

Nirvv
Nirvv
Niveau 5
01 juin 2009 à 18:36:04

Ah j'allais reposter un message en disant que c'était très compliqué en approfondissant bien..
Mais je crois avoir trouvé, j'ai trouvé P(N) = 0.730455
Donc P(N) = 73% environ.

J'ai fait comme ça :
i = 365, resultat = 365 (c'est important :p ).
Donc la boucle comme on avait dit : Tant que i > 335 (car on veut jusqu'a 336) on fait a chaque tour de boucle :
resultat = resultat * (i - 1);

Donc cette fois je suis bien sur ^^'.
1er Tour de boucle : resultat = resultat(donc 365) * 364
Deuxieme tour : resultat = resultat (donc l'ancien resultat de la 1ere boucle donc : 365 * 364) * 363..
Et là ça fait ainsi de suite.

Ensuite on fait puissance = 365 ^ e (nombre d'eleve donc 30 ^^').
(En C il faut une librairie a inclure en plus pour ça, je sais pas si c'est le cas pour le Basic ^^').

Et puis la division de resultat/puissance donc par exemple :
PNbarre = resultat/puissance;

Et PN = 1 - PNbarre;
Tu affiches PN, et normalement c'est bon ^^'

J'espere que t'as compris mon raisonnement :)
(Et que ça va fonctionner !)

[roganel]
[roganel]
Niveau 9
01 juin 2009 à 18:51:51

Bon, j'en suis là et ca ne marche pas :s :

:Prompt e
:365->i
:365->r
:While r>365-e
:r*(i-1)->r
:i-1->i
:EndWhile
:1-(r/365^e)->p
:Disp approx(p)
:EndPrgm

La partie importante est là :

:While r>365-e ( la boucle continue tant que r>365-e)
:r*(i-1)->r ( r prend la valeur de r*(i-1) )
:i-1->i ( i prend la valeur de i-1 )
:EndWhile

Quand je teste le programme en mettant e=30 il me met comme resultat -97.384 :hum:

Nirvv
Nirvv
Niveau 5
01 juin 2009 à 19:02:09

Heu pour la boucle faut dire :
While i>335
Comme ça ça donnera : La boucle continue tant que i strictement supérieur a 335!
Ensuite le reste c'est bon je pense :)
r*(i - 1)->r (Là c'est bon)
et i-1->i

Vala ^^

[roganel]
[roganel]
Niveau 9
01 juin 2009 à 19:08:21

Euh oui j'ai bien mis i et non r, c'est juste une faute de frappe a l'ordi :o))

[roganel]
[roganel]
Niveau 9
01 juin 2009 à 19:12:20

Bon j'ai essayé autre chose mais ca ne marche pas non plus j'ai le même résultat :

:While i>365-e
:i-1->i
:r*i->r
:EndWhile

Nirvv
Nirvv
Niveau 5
01 juin 2009 à 19:14:00

Dans la boucle tout a l'air correct..
Ca vient peut-être de la puissance (en tout cas je vois que ça là)

T'es sur qu'on peut faire une puissance simplement comme ça avec le signe ' ^ ' ?
Si c'est sur, essaye d'enregistrer 365^e dans une variable (par exemple : a)
Et tu fais 1-(r/a)->p
Et t'affiches p.

Ca rendra le code un peu plus lisible puis peut-être que ça corrigera quelque chose (des fois ça plante pour on ne sait quoi alors..)
Puis vérifie si on peut faire une puissance directement en Basic :p. Mais je te fais confiance je pense que c'est faisable non ? ^^

[roganel]
[roganel]
Niveau 9
01 juin 2009 à 19:23:22

Oui je viens de verifier en faisant un petit prog vite fait

:Prompt p
:p^2->p
:Disp p

quand je rentre un nombre j'ai la bonne valeur a la sorti donc ca marche ^^

Nirvv
Nirvv
Niveau 5
01 juin 2009 à 19:26:45

Bin heu je vois pas trop là..
Ca te dérangerait de me dire avec quoi tu codes en basic ? Je vais essayé d'apprendre les bases rapidement et de faire des tests pour t'aider au mieux ^^'.

Donc dis moi si tu veux. (Essaye de regarder le code un peu aussi, au cas ou y'a quelque chose qui te vient).
Parce que si je fais ça sous langage C et toi en BASIC, c'est pas vraiment la même chose.

(Juste je risque de partir manger et de m'absenter un petit moment, mais dés que je peux, je te donne une réponse si je trouve quelque chose !)

[roganel]
[roganel]
Niveau 9
01 juin 2009 à 19:28:31

En fait, je code direct sur ma calculette avec le "Editeur prgm" ^^

Nirvv
Nirvv
Niveau 5
01 juin 2009 à 20:53:32

Re-bonsoir.
Ah oui difficile de t'aider là :s Surtout que perso j'ai une TI-82 et j'ai essayé de fouiller un peu et je suis pas habitué alors je peux pas trop programmer dessus :s.

Faudrait que quelqu'un puisse nous éclaircir car au niveau de la logique, je pense que c'est bon, il doit y avoir quelque chose d'autre.
Essaye de mettre des parenthèses dans certains calculs.
Par exemple while i>(365-e)
Ou 1-(r/(365^e))

Peut-être ça peut venir de là.. Après je sais pas vraiment :s. J'essaye de t'aider au mieux ^^

[roganel]
[roganel]
Niveau 9
01 juin 2009 à 20:58:57

HAAANNN
j'ai trouvé :fete:

Il faut mettre au début de la boucle :

While i>366-e

Nirvv
Nirvv
Niveau 5
01 juin 2009 à 21:02:46

Ah c'était en faite une erreur d'un décalage.. ^^'
Je me suis dis au début du code en plus que souvent je fais des erreurs lors des boucles avec un petit décalage.
Mais en C ça m'avait sorti aucune erreur !

Bon bin, bien joué alors !
Le résultat que t'as obtenu c'est le meme que le mien ? :o

Bonne soirée

[roganel]
[roganel]
Niveau 9
01 juin 2009 à 21:08:52

A la calculette je trouve :
0.70631624...

Et quand j'ai fais la méthode bourrin, j'avais trouvé pareil ^^

Nirvv
Nirvv
Niveau 5
01 juin 2009 à 21:12:08

En effet, je trouve la même chose en C quand je corrige le problème du "décalage" avec la boucle !
Bin, bonne continuation alors :)

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment