Par défaut Random et valeurs différentes dans tableau

steve15 - 27 mars 2015 à 21:45
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 - 28 mars 2015 à 12:40
Bonjour,

Je suis débutant et je souhaite faire ceci :
Générer 12 chiffres, de 1 à 12 et tous différents, pour les stocker dans un tableau.
J'arrive à faire le random de 1 à 12, mais je suis débutant en tableau.
Ensuite, afficher dans 12 labels les valeurs générées précédemment.
Je sais que j'aurai certainement besoin d'une boucle dans laquelle je générerai un chiffre que je placerai dans la première case du tableau, ensuite une autre boucle pour reparcourir le tableau et tester si la nouvelle valeur générée existe déjà ou non s c'est le cas en générer une autre et si c'est pas le cas la placer dans la case suivante ... jusqu'à mais je sais vraiment pas comment m'y prendre pour commencer..
Pouvez-vous s.v.pl m'aider ?
Par avance merci.

3 réponses

Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
Modifié par Whismeril le 27/03/2015 à 22:40
Bonsoir,

1 réponse bête et méchante à la question:
  • tu crées un tableau de 12 "cases".
  • tu fais une boucle de 1 à 12.
  • dans cette boucle tu génères un random de 0 à 11, si la case ayant pour indice la valeur du random est vide tu la remplis par l'incrément de la boucle, sinon niveau random.
  • Pour les dernières cases ça peut être long, voir très long de tomber sur une cellule vide.


2 Est ce un exercice?
  • Oui ben t'as pas le choix...
  • Non? pourquoi utiliser un tableau? Les langages "modernes" ont apporté d'autres conteneurs bien plus souples d'emploi (collections, liste, etc...)

En utilisant 2 listes par exemple:
    • tu fais une boucle de 1 à 12, dans laquelle tu ajustes la valeur de l'itération dans la liste "Pioche"
    • tu fais un Do While tant que le nombre d'enregistrement de Pioche est supérieur à 0.
    • dans ce Do While, tu génères un random qui sera l'indice de la valeur de la Pioche que l'on "tire".
    • Tu ajoutes la valeur dans la liste Resultat et tu supprimes l'enregistrement dans la Pioche.

Le tirage durera toujours 24 itérations.


Modérer m'amène à intervenir dans de nombreux posts, mais les seuls langages que je connaisses sont le C# et un peu de VB. Pour vos codes pensez à la coloration.
Réponse trouvée ->Question Résolue
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
Modifié par KX le 27/03/2015 à 23:43
Bonjour,

Alternative :
Tu tires un nombres entre 0 et 11, tu permutes la case 11 avec le résultat.
Tu tires un nombres entre 0 et 10, tu permutes la case 10 avec le résultat.
...
Tu tires un nombres entre 0 et 1, tu permutes la case 1 avec le résultat.

Il y aura toujours 11 itérations, aucune consommation en mémoire, et c'est mathématiquement équiprobable.
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656 > KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024
28 mars 2015 à 07:50
Ha oui je l'avais oublié cette méthode!
0
Bonjour
J'apprends , donc la deuxieme solution me va !
Par contre niveau code ca donne quoi..? Et le conteneur pioche je peux utiliser la combobox de 1 a 12 que j'ai deja sur ma form1? Merci
0
De plus je souhaitais le faire avec un tableau int pour apprendre les tableau int .. Donc si vous pouvez m'aider pour le code. Par avance merci
0
En gros, j'ai 12 variables iRndAleat1, iRndAleat2, ...
A remplir avec 12 chiffres differents je suis obligé pour les afficher dans les label apres.
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
28 mars 2015 à 07:53
Bonjour, t'aider oui, tout faire pour toi non car ça ne t'aidera pas à apprendre.

Déclarer un tableau c'est le B A BA de tout langage, donc si tu ne sais pas faire c'est que tu n'as pas les bases.
Si tu n'as pas les bases, ça n'est pas le moment de faire une IHM avec des combobox et des labels.

Les bases c'est là
http://tahe.developpez.com/dotnet/csharp/
0
Int[] iTblAleat = new int[11]

Ca je sais faire
Ensuite une boucle for aussi
For(i=0, i<11,i++)
{}

Mais je sais pas comment mettre tout ca en place
Random = random.next(1,12)
aussi
Si vous voulez pas m'aider tant pis ...

EDIT: Ajout de la coloration syntaxique.
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
28 mars 2015 à 12:40
C'est un début.
Pour initialiser le tableau soit:
  • tu fais une boucle pour le remplir, comme je te l'ai expliquer plus (essaye au moins de le faire seul....)
  • soit tu le déclares comme ça
    int[] iTblAleat = {1,2,3,4,5,6,7,8,9,10,11,12};//ça fait une boucle de moins


Poste ton code, avec de la couleur, et on verra
0
Rejoignez-nous