Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
Discussion fermée
#1 13-03-2012 12:11:45
- erichof
- Membre
- Inscription : 26-08-2011
- Messages : 29
jeu
Bonjour,
A l'aide d'un tableur, comment peut-on simuler le loto (cochage de 7 numéros parmi 49 ou tirage de 7 boules distinctes parmi 49) ?
Avoir un nombre entier aléatoire entre 1 et 49 est facile à simuler mais le fait que les 7 trirages soient distincts me pose problème.
Merci pour votre aide.
Cirdéco
PS : ou alors faut-il passer absolument par un algorithme applicable avec ALGOBOX par exemple ?
Hors ligne
#2 13-03-2012 14:27:32
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 401
Re : jeu
Bonjour,
Avoir un nombre entier aléatoire entre 1 et 49 est facile à simuler mais le fait que les 7 tirages soient distincts me pose problème.
Qu'entends-tu par "tirages distincts" ?
Tu ne veux pas 7 fois le même tirage de loto, c'est évident, mais peut-être veux-tu dire que tu ne veux pas 7 fois le même nombre ?
Hmmm... Je n'ai pas vérifié : Est-il possible de tirer dans un ensemble précis ?
Sinon, je te propose ça (en Python, c'est facile à faire) qui devrait marcher..
Au départ, on écrit les 49 nombres de A1 à A49.
On tire au sort le n° de ligne.
la première fois n° de ligne et nombre coïncident.
Après, c'est là que ça se gâte, il faut faire réécrire par le tableur 48, lignes, puis 47, puis 46 en supprimant à chaque fois la ligne tirée au sort.
En Python donc :
# -*- coding: CP1252 -*-
from random import randrange
dispos=range(1,50)
print "Nos des boules dans l'urne :"
print dispos
print
print "Tirage :"
for i in range(7):
case=randrange(1,50-i)
nombre = dispos[case-1]
del dispos[case-1]
print nombre,
print
print
print "Nos des boules encore dans l'urne :"
print dispos
print
Je commence par créer un liste de 49 numéros (rangés dans les cases d'index 0 à 48 : la numérotation en Python commence à 0).
Et mon principe : à chaque tour je supprime le nombre tiré, donc je fais des tirages successifs sur 49, 48, 47, 46.... nombres
7 fois de suite, je répète la même opération, je tire au sort, pour i =0 jusqu'à 6 donc, un n° de case compris entre 0 et 49-i (En python la borne supérieure est exclue pour tirer entre 1 et 49, je dois indiquer 50 ; et 50 - i parce qu'à chaque tour le nb de cases diminue de 1 et le n° de case à tirer se trouve donc être à chercher entre 1 et 49-i (noté 50-i puisque la borne 50-i est exclue)
Si je tire la 6e case, non index est 5 d'où le case-1 et le nombre cherché est celui qui se trouve dans la case d'index n° case -1
Et je supprime enfin ce nombre.
Voilà quelques sorties :
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
Tirage :
20 18 34 24 49 40 17
Nos des boules encore dans l'urne :
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 19, 21, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48]
>>> ================================ RESTART ================================
>>>
Nos des boules dans l'urne :
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
Tirage :
41 35 26 24 29 14 40
Nos des boules encore dans l'urne :
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 27, 28, 30, 31, 32, 33, 34, 36, 37, 38, 39, 42, 43, 44, 45, 46, 47, 48, 49]
>>> ================================ RESTART ================================
>>>
Nos des boules dans l'urne :
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
Tirage :
46 14 8 28 47 49 26
Nos des boules encore dans l'urne :
[1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 48]
Quand je jouais au loto, je tirais au sort un n° de case de départ dans mon carré magique "diabolique" (=pandiagonal) d'ordre 7 et je prenais 7 nombres consécutifs à partir de là...
Bon, je n'ai jamais rien gagné ! ;-)
@+
Hors ligne
#3 13-03-2012 21:15:49
- Fred
- Administrateur
- Inscription : 26-09-2005
- Messages : 7 352
Re : jeu
Salut,
Je crois que le tableur "seul" n'est pas très adapté au tirage du loto, ou plus généralement aux tirages sans remise. On doit pouvoir bidouiller quelque chose pour que cela fonctionne, ou encore utilisé le langage de programmation sous-jacent, mais ce n'est pas le moyen le plus naturel.
Le vrai moyen naturel, c'est plutôt d'utiliser un langage de programmation de type 'Algobox'.
Fred.
Hors ligne
#4 13-03-2012 21:30:12
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 401
Re : jeu
Bonsoir,
Je suis allé voir...
Marrant et intéressant. Libre et gratuit de surcroît !
Ce que je fais avec Python, doit pouvoir être fait de façon "naturelle" avec AlgoBox qui évite l'apprentissage d'un langage avec toutes les erreurs de syntaxe à la clé...
On dirait de l'ALGOL langage que j'ai vu en Fac, il y a plus de 40 ans... avec le côté interactif en plus : on rédigeait nos prog et on attendait une semaine pour avoir le résultat !
@+
Hors ligne
#5 13-03-2012 22:26:14
- Fred
- Administrateur
- Inscription : 26-09-2005
- Messages : 7 352
Re : jeu
Re-
C'est une idée extrêmement intéressante...
Je ne sais pas ce que cela donne en classe.
Fred.
Hors ligne
#6 14-03-2012 08:56:18
- cirdec
- Invité
Re : jeu
Bonjour,
Merci beaucoup pour la programmation avec Python, c'est exactement ce que je souhaitais.
Si quelqu'un a cependant la version transposée sur ALGOBOX, je suis preneur.
Cordialement,
Cédric
#7 14-03-2012 21:48:34
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 401
Re : jeu
Bonsoir,
Je vais télécharger AlgoBox et voir comment faire une transposition rétrograde de mon prog Python vers AlgoBox...
@+
Hors ligne
#8 15-03-2012 17:33:53
- totomm
- Membre
- Inscription : 25-08-2011
- Messages : 1 093
Re : jeu
Bonjour,
Il est possible de simuler le tirage du loto sur un tableur ( OpenOffice.calc)
En utilisant simplement les formules disponibles ( et non pas le langage de programmation sous jacent)
Par exemple tirage (sans remise) de 7 boules distinctes parmi 49
Remplir A1:A7 des valeurs 49, 48,….,43 (Utiliser Edition/Remplir/Série)
En B1 insérer la formule : =ENT((ALEA()*A1)+1) et recopier (glisser) jusqu'en B7
En C1 mettre 0
En C2 insérer la formule : ="<=" & CTXT(B2;0) et recopier (glisser) jusqu'en C7
Dans cette colonne C se trouve le critère qui assure la non-remise des tirages
En D1 mettre 0
En D2 insérer la formule : =NB.SI(B$1:B1;C2) et recopier (glisser) jusqu'en D7
Enfin en E1 insérer la formule : =B1+D1 et recopier (glisser) jusqu'en E7
Les 7 tirages sans remise sont en colonne E
ALGOBOX me laisse perplexe. Quand on dispose de PYTHON...
Mais je ne me risquerai pas à discuter de la pédagogie dans l'initiation à l'algorithmique...
Cordialement
Hors ligne
#9 15-03-2012 22:10:28
- Fred
- Administrateur
- Inscription : 26-09-2005
- Messages : 7 352
Re : jeu
Bonne idée... Il m'a fallu un peu de temps pour me convaincre que c'était effectivement un vrai tirage de loto (tous les nombres tirés au second tirage sont équiprobables).
F.
Hors ligne
#10 16-03-2012 13:28:28
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 401
Re : jeu
Bonjour,
Voilà, c'est fait...
Mais, pas sûr du tout que la procédure employée soit la bonne : je ne n'ai fait que traduire, dans la douleur, mon script Python...
Ce joujou est bien joli, mais il ne faut pas trop lui en demander : il est très très vite très très très limité.
Je n'ai pas trouvé notamment :
- comment supprimer un élément d'une liste,
- comment, en cas d'affichage sur la même ligne, laisser une espace
- comment laisser une ligne vide
J'ai donc usé d'expédients (grâce à l'expérience de la programmation !) :
- Suppression : si je veux supprimer l'enregistrement n° 9 (par ex), je décale les contenus des enregistrements d'un rang vers l'arrière :
10 --> 9, 11 --> 10, 12 --> 11 et je remplace le dernier de la liste par 0 (zéro).
- affichage même ligne : j'opte pour afficher le message " - " sans retour à la ligne jusqu'à l'avant-dernier nombre
- saut de ligne : j'affiche 2 messages consécutifs constitués d'espaces avec retour à la ligne
1 VARIABLES
2 i EST_DU_TYPE NOMBRE
3 j EST_DU_TYPE NOMBRE
4 casier EST_DU_TYPE NOMBRE
5 nbre EST_DU_TYPE NOMBRE
6 dispos EST_DU_TYPE LISTE
7 DEBUT_ALGORITHME
8 POUR i ALLANT_DE 1 A 49
9 DEBUT_POUR
10 dispos[i] PREND_LA_VALEUR i
11 FIN_POUR
12 AFFICHER "Tirage :"
13 POUR i ALLANT_DE 0 A 6
14 DEBUT_POUR
15 casier PREND_LA_VALEUR ALGOBOX_ALEA_ENT(1,49-i)
16 nbre PREND_LA_VALEUR dispos[casier]
17 AFFICHER nbre
18 SI (i<6) ALORS
19 DEBUT_SI
20 AFFICHER "-"
21 FIN_SI
22 POUR j ALLANT_DE 1 A 48-i
23 DEBUT_POUR
24 SI (j>=casier) ALORS
25 DEBUT_SI
26 dispos[j] PREND_LA_VALEUR dispos[j+1]
27 FIN_SI
28 FIN_POUR
29 dispos[49-i] PREND_LA_VALEUR 0
30 FIN_POUR
31 AFFICHER " "
32 AFFICHER " "
33 AFFICHER "Nos des boules toujours dans l'urne :"
34 POUR i ALLANT_DE 1 A 42
35 DEBUT_POUR
36 AFFICHER dispos[i]
37 SI (i<42) ALORS
38 DEBUT_SI
39 AFFICHER "-"
40 FIN_SI
41 FIN_POUR
42 FIN_ALGORITHME
Résultats:
***Algorithme lancé***
Tirage :
38-2-47-14-29-3-32
Nos des boules toujours dans l'urne :
1-4-5-6-7-8-9-10-11-12-13-15-16-17-18-19-20-21-22-23-24-25-26-27-28-30-31-33-34-35-36-37-39-40-41-42-43-44-45-46-48-49
***Algorithme terminé***
Le seul avantage, c'est qu'il n'y a pas (pas trop) d'instructions à retenir, qu'algobox se charge de la syntaxe, ce qui évite les erreurs de ce type et permet de se concentrer exclusivement sur l'algorithmique.
Un peu comme quand en 6e, dans la résolution des problèmes, on donne la calculette libérant les mômes des soucis d'exactitude calculatoire.
Ça permet de développer, sans bruit de fond, les capacités créatives, mais ne mettra pas le pied à l'étrier pour l'apprentissage d'un langage et de ses particularités...
@+
Hors ligne
#11 16-03-2012 15:06:12
- Fred
- Administrateur
- Inscription : 26-09-2005
- Messages : 7 352
Re : jeu
Salut,
Effectivement, je ne crois pas qu'il faut voir Algobox comme un logiciel à utiliser très longtemps.
Mais il est intéressant pour développer les bonnes pratiques, pour visualiser très facilement
les boucles et leurs imbrications, etc....
Mais il ne vaut pas un bon langage de programmation!
Fred.
Hors ligne
#12 16-03-2012 15:38:26
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 401
Re : jeu
Salut,
pour visualiser très facilement les boucles et leurs imbrications, etc....
Bin, même si, utilisateur de Python et déjà pratiquant avant l'indentation, je préfère très largement Python pour visualiser les boucles, leurs imbrications...
En Python, l'indentation est obligatoire, c'est le seul fin_pour, fin_si, fin_tant que... dont on dispose : c'est très contraignant au début ou en cas de rajouts, mais visuellement, c'est pratique... Là, il n'y a qu'une pseudo indentation, dommage !
Je peux te dire que je préfère programmer à la main, sur papier, en vrai pseudo-code qu'avec AlgoBox qui se révèle extraordinairement verbeux, la preuve.
Ce n'est pas fait pour développer des programmes excédant 20 à 30 lignes, juste pour initiation à l'algorithmique : il est vrai que vu le paysage 2nde/première et les horaires, il ne faut pas penser à demander des "trucs" très (et trop élaborés)...
Je vais continuer ma découverte et voir ce que je peux en faire, malgré l'impossibilité de création de fonctions, ce qui est éminemment regrettable...
@+
Hors ligne
#13 16-03-2012 17:03:09
- Fred
- Administrateur
- Inscription : 26-09-2005
- Messages : 7 352
Re : jeu
Re-
Je suis complètement d'accord avec toi.
Mais les livres ont déjà choisi entre Algobox et Python!
Fred.
Hors ligne
#14 17-03-2012 00:11:31
- Cédric
- Invité
Re : jeu
Merci beaucoup pour toutes vos réponses. Cependant je ne comprends pas :="<=" & CTXT(B2;0) .
Cordialement,
C.
#15 17-03-2012 10:55:47
- totomm
- Membre
- Inscription : 25-08-2011
- Messages : 1 093
Re : jeu
Bonjour,
Le critère dans NB.SI est une chaine de caractères figés. C'est à dire que les caractères y sont interprétés littéralement sans reconnaitre une référence à une case du tableau en colonne B de la même ligne
Si on veut que le critère dépende de la valeur calculée en colonne B, il convient donc de formater la "valeur" du critère, en tant que chaine de caractère, en dehors de la fonction NB.SI
Ce que l'on peut faire sur un tableur est tout autant compréhensible et didactique que la même chose sous ALGOBOX qui est trop verbeux sous prétexte de clarté. Des instructions concises dans un langage concis permettent bien mieux de suivre et comprendre un algorithme...L'important étant de bien suivre un déroulement d'instructions
Cordialement
Hors ligne
#16 18-03-2012 21:10:08
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 401
Re : jeu
Hors ligne
#17 19-03-2012 18:58:53
- Cédric
- Invité
Re : jeu
Bonsoir,
je ne comprends toujours pas : :="<=" & CTXT(B2;0) .
N'y a-t-il pas une erreur avec le symbole & que je n'arrive d'ailleurs pas à reproduire dans l'utilisation des formules avec un tableur ?
Encore merci.
Cédric
#18 20-03-2012 10:15:38
- totomm
- Membre
- Inscription : 25-08-2011
- Messages : 1 093
Re : jeu
Bonjour,
@ Cédric :
Le symbole & se trouve en minuscule sous la touche 1. il effectue la concaténation des chaines de caractères
Pourquoi mettre ="<=" & CTXT(B2;0) dans le tableur en ligne 2 (et Bn en ligne n) ?
Si on vient de tirer 15 en B2 on obtient la chaine de caractères <=15 en C2 pour traiter la non remise des numéros triés.
En effet : Si l'on tire des numéros sur une liste dans laquelle les numéros 1 à 49 figurent en position 1 à 49 et que l'on a tiré par exemple les positions 9 (parmi 49) puis 21 (parmi 48), alors les numéros 10 à 49 se sont trouvés en positions 9 à 48 puis les numéros 22 à 49 se trouvent en positions 20 à 47, puisque l'on retire les numéros tirés de la liste. On a tiré en fait les numéros 9 et 22.
Puisque le tirage équiprobable se fait sur le nombre de positions restantes, le numéro tiré correspond bien à la position majorée des décalages effectués jusqu'à la position tirée.
si maintenant l'on tire la position 15 (parmi 47), le numéro est bien 15+1=16 ou si l'on tire à nouveau la position 21, le numéro est bien 21+2=23
@ tous : Est-on certain qu'un algorithme séquentiel correct sera correctement exécuté sur le tableur ?
Réponse : NON en général, car dans un tableur l'ordre dans lequel les formules dans les cellules sont exécutées résulte de la "dépendance" des cellules entre elles. Ici le séquentiel sera OK entre lignes de la même colonne
Cordialement
Hors ligne
#19 26-03-2012 07:06:48
- Cédric
- Invité
Re : jeu
MERCI BEAUCOUP A VOUS TOUS et notamment à totomm pour sa dernière réponse éclairante.
Je vais donc pouvoir tester tout cela en essayant de comprendre ce qui se passe !
Cordialement,
Cédric
Pages : 1
Discussion fermée







