|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
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_anniversaires
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
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
Sources en rapport avec celle ci
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
|
Téléchargements
Logiciels à télécharger sur le même thème :
|