OVH Cloud OVH Cloud

tableau de nombres aléatoires

11 réponses
Avatar
DaD
Bonjour,
J'ai créé un tableau :
var montableau = new Array (20)
dans lequel je désire entrer tous les nombres de 0 à 19 répartis
aléatoirement, par exemple :
montableau[o]=11
montableau[1]=6
montableau[2]=18
montableau[3]=0
etc...
Connaissez-vous une astuce pour obtenir cela ?
Merci et cordialement,
--
DaD
http://perso.wanadoo.fr/dejardin/
Contefleur

10 réponses

1 2
Avatar
shak
"DaD" a écrit dans le message de news:

Bonjour,
J'ai créé un tableau :
var montableau = new Array (20)
dans lequel je désire entrer tous les nombres de 0 à 19 répartis
aléatoirement, par exemple :
montableau[o]
montableau[1]=6
montableau[2]
montableau[3]=0
etc...
Connaissez-vous une astuce pour obtenir cela ?
Merci et cordialement,
--
DaD
http://perso.wanadoo.fr/dejardin/
Contefleur


La fonction random() renvoi un chiffre aléatoire entre 0 et 1.
Donc pour toi il faut faire :
montab[0] = Math.random(0) * 19;

pour les autres cases de ton tableau il suffit d'implémenter une boucle.

Shak.

Avatar
YD

J'ai créé un tableau :
var montableau = new Array (20)
dans lequel je désire entrer tous les nombres de 0 à 19 répartis
aléatoirement, par exemple :
montableau[o]
montableau[1]=6
montableau[2]
montableau[3]=0
etc...
Connaissez-vous une astuce pour obtenir cela ?


La fonction random() renvoi un chiffre aléatoire entre 0 et 1.
Donc pour toi il faut faire :
montab[0] = Math.random(0) * 19;

pour les autres cases de ton tableau il suffit d'implémenter une boucle.


Et pour éliminer les doubles de façon efficace ?

Je propose une solution qui fonctionne avec les moteurs javascript
relativement récents (utilisation de splice et push - javascript 1.3,
JScript 5.5), mais le principe est adaptable pour n'utiliser que des
méthodes des versions antérieures si c'est nécessaire -- la boucle
serait plus longue...

Pour ceux qui ne connaîtraient pas, push ajoute un ou plusieurs éléments
à la fin d'un Array, splice enlève n éléments consécutifs à partir de l'élément
d'indice k d'un tableau et les renvoie sous forme d'un autre tableau :
a.splice(n, k) -> tableau de k élts formé des élts a[n] jusqu'à a[n + k - 1]
ET a se voit diminué de ces k éléments.

Le principe, on crée un tableau auxiliaire 'aux' de longueur 'len' rempli
avec les valeurs 0, 1, ... , len-1.

On enlève de ce tableau un élément pris aléatoirement, qu'on ajoute au
tableau résultat 'res' (intérieur de la boucle while).

Qunad il ne reste plus d'élément dans 'aux' on renvoie 'res' (boucle while
suivie de return).

function aleaArray(len){
var i, aux = Array(), res = Array();
// construction du tableau auxiliaire 0, 1, ... ,len-1
for(i=0;i<len;i++)
aux.push(i);
// remplissage du tableau résultat
while(aux.length){
i=aux.length*Math.random();
res.push(aux.splice(i,1)[0]);
}
return res;
}

document.write(aleaArray(20));

--
Y.D.


Avatar
ASM

Bonjour,
J'ai créé un tableau :
var montableau = new Array (20)
dans lequel je désire entrer tous les nombres de 0 à 19 répartis
aléatoirement, par exemple :
montableau[o]
montableau[1]=6
montableau[2]
montableau[3]=0
etc...
Connaissez-vous une astuce pour obtenir cela ?
Merci et cordialement,


Normalement on fait le contraire ...
Le tableau est ordonné et on s'en sert aléatoirement.
(c'est nettement + facile)

--
*******************************************************
Stéphane MORIAUX et son vieux Mac
Aide Pages Perso (images & couleurs, formulaire, CHP)
http://perso.wanadoo.fr/stephane.moriaux/internet/
*******************************************************

Avatar
ASM

"DaD" a écrit dans le message de news:

Bonjour,
J'ai créé un tableau :
var montableau = new Array (20)
dans lequel je désire entrer tous les nombres de 0 à 19 répartis
aléatoirement,


La fonction random() renvoi un chiffre aléatoire entre 0 et 1.
Donc pour toi il faut faire :
montab[0] = Math.random(0) * 19;

pour les autres cases de ton tableau il suffit d'implémenter une boucle.


Je n'ai jamais vu que random obligeait à passer tous les chiffres
voulus (ici : de 0 à 19)
Alors là on a le premier (et on ne sait pas lequel c'est)
comment donner les autres ?

Non, le plus simple est de faire un ttableau ordonné (ou pas)
et de s'en servir aléatoirement

truc = montab[parseInt(Math.random(0)*19,10)];


--
*******************************************************
Stéphane MORIAUX et son vieux Mac
Aide Pages Perso (images & couleurs, formulaire, CHP)
http://perso.wanadoo.fr/stephane.moriaux/internet/
*******************************************************


Avatar
ASM


J'ai créé un tableau :
var montableau = new Array (20)
dans lequel je désire entrer tous les nombres de 0 à 19 répartis
aléatoirement


Donc pour toi il faut faire :
montab[0] = Math.random(0) * 19;

pour les autres cases de ton tableau il suffit d'implémenter une boucle.


Et pour éliminer les doubles de façon efficace ?


J'allais le dire !

Je propose une solution qui fonctionne avec les moteurs javascript
relativement récents (utilisation de splice et push - javascript 1.3,
JScript 5.5), mais le principe est adaptable pour n'utiliser que des
méthodes des versions antérieures si c'est nécessaire -- la boucle
serait plus longue...


Tout ceci est super interressant (on va l'archiver)

Mais tt de même est-ce bien nécessaire ?
quand il est si facile d'utiliser aléatoirement un tableau déjà fait ?

truc = montab[parseInt(Math.random()*19,10)];


Pour ceux qui ne connaîtraient pas, push ajoute un ou plusieurs éléments
à la fin d'un Array, splice enlève n éléments consécutifs à partir de l'élément
d'indice k d'un tableau et les renvoie sous forme d'un autre tableau :
a.splice(n, k) -> tableau de k élts formé des élts a[n] jusqu'à a[n + k - 1]
ET a se voit diminué de ces k éléments.

Le principe, on crée un tableau auxiliaire 'aux' de longueur 'len' rempli
avec les valeurs 0, 1, ... , len-1.

On enlève de ce tableau un élément pris aléatoirement, qu'on ajoute au
tableau résultat 'res' (intérieur de la boucle while).

Qunad il ne reste plus d'élément dans 'aux' on renvoie 'res' (boucle while
suivie de return).

function aleaArray(len){
var i, aux = Array(), res = Array();
// construction du tableau auxiliaire 0, 1, ... ,len-1
for(i=0;i<len;i++)
aux.push(i);
// remplissage du tableau résultat
while(aux.length){
i=aux.length*Math.random();
res.push(aux.splice(i,1)[0]);
}
return res;
}

document.write(aleaArray(20));

--
Y.D.


--
*******************************************************
Stéphane MORIAUX et son vieux Mac
Aide Pages Perso (images & couleurs, formulaire, CHP)
http://perso.wanadoo.fr/stephane.moriaux/internet/
*******************************************************



Avatar
DaD
Bonjour,
J'ai créé un tableau :
var montableau = new Array (20)
dans lequel je désire entrer tous les nombres de 0 à 19 répartis
aléatoirement, par exemple :
montableau[o]
montableau[1]=6
montableau[2]
montableau[3]=0
etc...
Connaissez-vous une astuce pour obtenir cela ?


Bonjour et merci de vos interventions.

Le pourquoi de ma question : je programme un jeu (réussite).
Pour cela j'ai créé des boutons identifiés par des numéros : 'b'1 , 'b'2
, 'b'3 .... etc...'b'20...
Le clic sur le bouton 'b'3 doit chercher le contenu de l'élément
montableau[3] et, en début de jeu, ce contenu doit être aléatoire.
(aucun élément du tableau ne devant faire doublon)
Pour l'instant, mon programme fonctionne mais je n'arrivais pas à
résoudre ce problème des doublons.
Je vais essayer vos solutions.
Quand mon script sera finalisé, je vous présenterai le jeu.
Merci encore et bien cordialement,

--
DaD
http://perso.wanadoo.fr/dejardin/
Contefleur

Avatar
DaD



J'ai créé un tableau :
var montableau = new Array (20)
dans lequel je désire entrer tous les nombres de 0 à 19 répartis
aléatoirement, par exemple :
montableau[o]
montableau[1]=6
montableau[2]
montableau[3]=0
etc...
Connaissez-vous une astuce pour obtenir cela ?




Je propose une solution qui fonctionne avec les moteurs javascript
relativement récents (utilisation de splice et push - javascript 1.3,
JScript 5.5)

function aleaArray(len){
var i, aux = Array(), res = Array();
// construction du tableau auxiliaire 0, 1, ... ,len-1
for(i=0;i<len;i++)
aux.push(i);
// remplissage du tableau résultat
while(aux.length){
i=aux.length*Math.random();
res.push(aux.splice(i,1)[0]);
}
return res;
}

document.write(aleaArray(20));



Bonjour,
Voici un script précieux qui fonctionne à merveille !
Il me suffit de définir *len* à la valeur qui me convient, par exemple
lenR
document.write(aleaArray(len));
pour obtenir la répartition aléatoire d'un jeu de 52 cartes.
Super, merci encore.
Et merci aussi aux autres intervenants (en particulier ASM qui m'a déjà
plusieurs fois dépanné) :-)
Amicalement,
--
DaD
http://perso.wanadoo.fr/dejardin/
Contefleur



Avatar
shak
"YD" a écrit dans le message de news:
41914e68$0$31019$

J'ai créé un tableau :
var montableau = new Array (20)
dans lequel je désire entrer tous les nombres de 0 à 19 répartis
aléatoirement, par exemple :
montableau[o]
montableau[1]=6
montableau[2]
montableau[3]=0
etc...
Connaissez-vous une astuce pour obtenir cela ?


La fonction random() renvoi un chiffre aléatoire entre 0 et 1.
Donc pour toi il faut faire :
montab[0] = Math.random(0) * 19;

pour les autres cases de ton tableau il suffit d'implémenter une boucle.


Et pour éliminer les doubles de façon efficace ?
Oooops! J'avais pas fait attention que les valeurs a mettre dans le tableau

devaient etre uniques.

Shak.



Avatar
YD

Mais tt de même est-ce bien nécessaire ?
quand il est si facile d'utiliser aléatoirement un tableau déjà fait ?

truc = montab[parseInt(Math.random()*19,10)];


Toujours la même chose, deux appels successifs peuvent retourner le même
nombre, le problème des doublons n'est pas résolu...

--
Y.D.

Avatar
ASM


Mais tt de même est-ce bien nécessaire ?
quand il est si facile d'utiliser aléatoirement un tableau déjà fait ?

truc = montab[parseInt(Math.random()*19,10)];


Toujours la même chose, deux appels successifs peuvent retourner le même
nombre, le problème des doublons n'est pas résolu...


Je m'en fous dans ce cas d'espèce
du moins si on ne fait qu'un tirage bien sûr.
Il me semblait qu'on avait besoin que d'un nbre parmi 20 ?
si ce n'est pas ça je peux donc aller me rhabiller :-/

--
*******************************************************
Stéphane MORIAUX et son vieux Mac
Aide Pages Perso (images & couleurs, formulaire, CHP)
http://perso.wanadoo.fr/stephane.moriaux/internet/
*******************************************************


1 2