Accueil > > > PARADOXE DES ANNIVERSAIRES
PARADOXE DES ANNIVERSAIRES
Information sur la source
Description
J'hésite entre la catégorie "Math" et "VbScript" pour cette source. Il s'agit d'un script traitant du Paradoxe Des Anniversaires. J'ai choisi le VbScript parce que je n'ai rien d'autre sous la main. TRES IMPORTANT: j'utilise WScript.Echo, donc ne lancez pas le script en double-cliquant dessus mais il faut le lancer avec CScript en ligne de commandes (voir le ScreenShot). Le paradoxe des anniversaires énonce que: si dans une pièce, il y a au moins 23 personnes, la probabilité qu'il y a au moins deux personnes dans cette pièce qui ont leur anniversaire le même jour (même jour, même mois) est de plus de 50%. Le paradoxe est qu'il suffise de 23 personnes, ce qui parait peu, mais pourtant... Le script en fait l'expérience en remplissant un tableau avec des valeurs au hasard et ensuite il regarde s'il y en a des identiques. Ensuite, le script calcule et affiche la proba. J'ai commenté la source. En espérant que vous trouverez ça intéressant... -- MisterWhiteLapin
Source
REM Forcer la déclaration des variables.
Option Explicit
REM Pour avoir une valeure de random différente à chaque fois.
Randomize
REM Nombre de jours sur lequel porte l'expérience.
Const nbJours = 365.0
REM Nombre de jours décrémenté. 365 puis 364 puis 363 puis ...
REM Utilisé ici comme un type float.
Dim nbJoursDec
REM i et j. Deux variables de boucles.
Dim i, j
REM Nombre de personnes concernés.
Dim n
REM Resultat recalculé à chaque itération. Utilisé comme un type float.
Dim res
REM Un string qui sert à accumuler le résultat avant de l'afficher.
Dim strTemp
REM Tableau contenant des valeures de 0 à (nbJours - 1).
Dim tabRandom
REM #############################################################################
REM #############################################################################
REM ################## Gestion des arguments (le nombre de personnes)############
REM Si il n'y a pas d'argument ou que l'argument n'est pas valide,
REM on le met arbitrairement à 25.
If (WScript.Arguments.Count >= 1) Then
On Error Resume Next
n = CInt(WScript.Arguments(0))
If (Err.Number <> 0) Then
n = 25
End If
On Error Goto 0
Else
n = 25
End If
REM #############################################################################
REM #############################################################################
REM #############################################################################
REM #############################################################################
REM #############################################################################
REM ################## Tableau de random ########################################
ReDim tabRandom(n)
REM On initialise le tableau avec des valeures
REM aléatoires de 0 à (NbJours - 1) (364 dans notre cas).
strTemp = ""
i = 0
While (i < n)
tabRandom(i) = Int(nbJours * Rnd)
WScript.Echo "tabRandom(" & i & ") = " & tabRandom(i)
i = i + 1
WEnd
REM On va parcourir le tableau avec une complexité en O(n²) pour chercher les
REM doublons et les stocker dans la variable strTemp en vue de les afficher plus tard.
i = 0
While (i < n)
j = i + 1
While (j < n)
If (tabRandom(i) = tabRandom(j)) Then
If (strTemp = "") Then
strTemp = "Mêmes nombres aux indexes:" & VbCrlf
End If
strTemp = strTemp & " " & i & " et " & j & "." & VbCrlf
End If
j = j + 1
WEnd
i = i + 1
WEnd
If (strTemp = "") Then
strTemp = "Pas de doublon détécté." & VbCrlf
End If
REM #############################################################################
REM #############################################################################
REM #############################################################################
REM #############################################################################
REM #############################################################################
REM ################## Calcul de la probabilité #################################
REM Explication du calcul (voir wikipedia et Internet pour
REM plus de renseignements).
REM
REM
REM ###### Ici, nbJours vaut 365 (cas normal
REM du paradoxe des anniversaires) ######
REM
REM N.B.: Ici, 365^3 signifie 365 * 365 * 365 (c'est à dire "365 puissance 3")
REM
REM
REM
REM p_bar(n) = 1 - p(n) et p(n) = 1 - p_bar(n)
REM
REM p_bar(0) et p_bar(1): Pas de sens.
REM p_bar(2) = 365 * (365 - 1) / (365^2)
REM = 364 / 365
REM p_bar(3) = 365 * (365 - 1) * (365 - 2) / (365^3)
REM = 365 * 364 * 363 / (365^3)
REM = p_bar(2) * 363 / 365
REM p_bar(4) = 365 * (365 - 1) * (365 - 2) * (365 - 3) / (365^4)
REM = 365 * 364 * 363 * 362 / (365^4)
REM = p_bar(3) * 362 / 365
REM
REM p_bar(n) = p_bar(n - 1) * (365 - n + 1) / 365
If (n < 2) Then
WScript.Echo "Pas de sens."
WScript.Quit
End If
REM L'étape 1 est déjà faite car 365 / 365 = 1, on commance direct à 364 / 365.
res = 1.0
nbJoursDec = nbJours - 1.0
i = 1
While (i < n)
res = res * (nbJoursDec) / nbJours
nbJoursDec = nbJoursDec - 1.0
i = i + 1
WEnd
REM On vient de calculer "p bar", on le transforme donc maintenant
REM en p, laprobabilité qui nous intéresse.
res = (1.0 - res) * 100.0
REM #############################################################################
REM #############################################################################
REM #############################################################################
REM Affichage de la probabilité.
strTemp = strTemp & "Nombre de personnes dans la salle: " & n & VbCrlf & _
"Probabilité de ""au moins 2 anniversaires le même jour"": " & res & "%"
REM Affichage de totue la string résultat (malheuresement, c'est trop
REM gros pour tenir dans une MsgBox).
WScript.Echo strTemp
Conclusion
Un petit Script VBS qui illustre le "Paradoxe des anniversaires" découvert par Richard von Mises. Page Wikipedia: http://fr.wikipedia.org/wiki/Paradoxe_des_annivers aires
Historique
- 24 juillet 2008 13:45:08 :
- Inexactitude mathématique dans l'affichage du résultat. Modification de la source et du ScreenShot.
- 24 juillet 2008 13:57:16 :
- Il manquait le mot "moins".
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
la fonction Random [ par etude euria ]
Bonjour,Nous sommes des étudiants dans un institut d'actuariat.Nous avons besoin de la fonction Random pour un bureau d'études.Il faut insérer des par
imprimer un fichier [ par mic ]
Salutje désire ecrire un script VB qui me permétrer d'ouvrir un fichier (.rep : rapport BI Query) de l'imprimer et de le fermer asns aucune interventi
script d'installation - ajout de fichiers [ par Georef ]
Bonjour,lors de la génération d'un pgm d'installation, je dois ajouterde nombreux fichiers de données. La manipulation"ajouter", choix du fichier... e
lancer un script Unix sur une station depuis VB sur un pc [ par OCh ]
Quelqu'un peut-il me donner les grandes lignes de ce que je doisecrire en C sous Unix pour assurer un dialogue avec mon applicationVB sur pc?
geometrie math [ par alien ]
je cherche un max de formule math appliquee a la geometrie ex:calcul de l'intersection de deux lignes ou cercle ....merci
Lancer l'exécution d'un script sur un Unix [ par sam ]
Comment peut-on lancer, depuis Windows, l'exécution d'un script sur un Unix ?On m'a parler du démon RSHD sur unix et du client RSH windows ...... C
Recherche d?un bouquin de math.. [ par Marc ]
Bonjour,Je cherche a acquérir d´ocasion les trois tomesdu livre de Gomes Teixeira:Courbes spéciales remarquables .Il a été réedité en Fraçais aux édit
Lotus Script [ par Derrick soft ]
Bonjour,Je voulais savoir si certains programmeur serait intéressé par une rubrique LotusScript et formula Notes.Le LotusScript est voisin du VBA sauf
random [ par debutant ]
.
Accès à une base Paradox [ par Robert ]
Voila mon problème : je veux accéder depuis VB6 à une base de données Paradox mais l'ODBC me répond systématiquement :Pilote ISAM introuvable, erreur
|
Derniers Blogs
[WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
LISTER KEYS.KEYLISTER KEYS.KEY par Onin42
Cliquez pour lire la suite par Onin42
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|