Fonction aleatoire

Messages postés
1
Date d'inscription
samedi 29 octobre 2011
Statut
Membre
Dernière intervention
19 novembre 2011
- - Dernière réponse :  DevLama - 26 nov. 2011 à 15:54
javascript:void(0);
slt a tous j'ai un problème.En fait je suis buté sur le fait que je ne sais pas comment générer un nombre de façon aléatoire sans qu'il ne se répète.je doit générer a partir de la fonction rnd un nombre compris entre 1 et 93 sans qu'un nombre déjà afficher ne se répète.merci de votre aide
Afficher la suite 

20/38 réponses

Messages postés
107
Date d'inscription
samedi 25 novembre 2000
Statut
Membre
Dernière intervention
4 mai 2013
0
Merci
Bonjour,

Au lieu de chercher à générer un nombre dans ton intervalle sans répétition (faisable mais très peu performant car nécessite un test de vérification après chaque "génération" de nombre) ; essaies plutôt de partir d'un "tableau" (ou liste ou autre conteneur) contenant les différentes valeurs possibles, et génère un nombre aléatoire représentant une position du tableau, ensuite tu n'as qu'à récupérer le nombre à cette position, le supprimer le tableau et recommencer tant que le tableau n'est pas vide

Cordialement !

P.S.: code volontairement non présent, afin de plus te permettre de trouver par toi-même, ce qui est toujours plus valorisant.
Commenter la réponse de Sehnsucht
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
213
0
Merci
Bonjour,
La fonction Rnd n'étant présente sous VB.Net (qui connait la classe Random) que pour assurer la compatibilité avec des applis précédemment développées sous VB6 ===>>
J'ai un doute sur ton outil de développement-.
Es-tu certain de ne pas finalement développer sous VB6 ou sous VBA de MsOffice ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
14590
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 novembre 2019
136
0
Merci
Bonjour,

ucfoutu, si l'espace de nom Microsoft.VisualBasic est importé, je crois que Rnd passe quand même, mais en .NET, c'est mieux d'éviter d'utiliser cet espace de nom.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry
0
Merci
Salut,

L'exemple de MSDN pour .NET dans CE LIEN

Cordialement



CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
Messages postés
14590
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 novembre 2019
136
0
Merci
Bonjour,

Je préfèrerais plutôt :
http://msdn.microsoft.com/en-us/library/system.random.aspx
Ensuite, une collection listant les nombres possibles pour retourner une valeur une seule fois.

Acive, tu as changé ton avatar ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
213
0
Merci
Bonjour, NHenry,

Oui, j'avais contrôlé et bien vu cette "héritage" avant d'écrire mon message.
Je demeure malgré tout interrogateur, car assez étonné de ce que azenti, apparemment débutant, utilise d'emblée une fonction "héritée"
J'attends donc malgré tout sa réponse.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
0
Merci
OUII!... Bien vu Henry... d'où tu nous sorts ces liens?...


CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
Messages postés
14590
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 novembre 2019
136
0
Merci
Bonjour,

Acive, Avec Google en précisant "MSDN" devant le nom de la classe/fonction cherchée

Azenti, On attends ta réponse.

Ucfoutu, Je pense que sur le net, les sujets traitant de VB.NET en utilisant des fonctions VB6 sont encore légions, donc, sa recherche vient peut être de là.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry
0
Merci
Oui, pas bête... je marque toujours VB et j'ai toujours 50 réponses sans rapport...

Et oui nous sommes curieux de voir ton code Azenti.



CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
Messages postés
728
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
30 mars 2014
2
0
Merci
Bonjour Mes Seigneurs,

Moi je ne comprends toujours rien à ce forume, le chemin est :

Accueil > Forum > VB.NET et VB 2005 > Divers > General
> fonction aleatoire

VB5000 c'est vbNet5 (2005), car en vbNet je crois qu'il y a 2008, 2008, 2010 et désormais 2011, non ?
Donc c'est du vbNet\divers\
Donc question en vbNet divers et général (hum , c'est éloquant " divers et général")...

Le Roi là, je veux dire le chef, il pourrait pas demander aux mâitre de nous faire des forums corrects, soit :
- vb6 et inférieur
- vbNet 5 et supérieurs
???

*

Le temps, ben la première des choses comme susdit est de prendre une variable indicée, ainsi :


dim v (93) as integer
dim plein as boolean
dim g as integer
for i = 1 to 93
 v(i) = 0  ' charge à RAZ
next i
genere:
' g = GENERATION DU NOMBRE ENTIER 1 A 93 ICI '
plein = true
for i = 1 to 93
 if v(i) = 0 then  
  plein = false
  exit for
 end if
next i
if plein = true then goto fin ' tableau terminé
for i = 1 to 93
 if v(i) = g then ' existe then goto genere
next i
for i = 1 to 93 ' attribue
 if v(i) = 0 then 
  v(i) = g
  goto genere
 end if
next i
fin: 
' On utilise ensuite le tableau v(i) ...



*

Le code VB est :



Dim hasard As Integer
bis:
Randomize
hasard = Int((93 - 1 + 1) * Rnd + 1)



Mais on peut aussi faire du personnel


Dim h As Integer
Dim alternat as boolean = false
bis:
alternat = not alternat
if alternat true then h now.second + 1 ' 1 à 60
if alternat false then h now.second + 31 ' 31 à 90
' ?
goto bis
' ?
if ? goto fin
' ?
fin:



Cordialement, Joe.
Commenter la réponse de ehjoe
0
Merci
Salut,

Pourquoi compliquer ce qui est simple?...
Si vous aurais lu la page MSDN que Henri vous a envoyé, vous aurais fait comme ça:
Dim rand As New Random()
Dim i As Integer
For ctr As Integer = 0 To 4
    i = rand.Next(93) + 1
    If InStr(TextBox1.Text, i.ToString, CompareMethod.Text) > 0 Then
       ctr -= 1
    Else
       TextBox1.Text &= i & " "
    End If
Next



CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
Messages postés
14590
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 novembre 2019
136
0
Merci
Bonjour,

Quand je vois des Goto en VB, j'en pleure ...

Voici ma proposition (codé à l'arrache, mais l'idée est là) :
Public Function GetAleatoire() as Integer()
Dim rand As New Random()
Dim i As Integer
Dim lLstNb as List(Of Integer)=new List(Of Integer)
dim lResult as List(Of Integer)=new List(Of Integer)

For i=1 to 93
lLstNb.Add(i)
next i

Do while lLstNb.Count>1
i=rand.Next(lLstNb.Count-1)
lResult.Add(lLstNb(i)
lLstNb.RemoveAt(i)
Loop

lResult.Add(lLntNb(0)

Return lResult.ToArray()
End Function


---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry
Messages postés
14590
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 novembre 2019
136
0
Merci
Sur la ligne :
lResult.Add(lLntNb(0)
Il manque un )
lResult.Add(lLntNb(0))

---
Mon site
Commenter la réponse de NHenry
0
Merci
Salut Henry,

Toi aussi tu as compliqué la chose.
Mon code est plus simple, testé, sans chiffres en double et les valeurs entre 1 et 93 uniquement.
Par contre je ne connais pas le nombre de chiffres qu'il veut (j'en ai mis 5, comme le loto)

Teste-le... j'ai été surpris de simplicité du code.




CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
Messages postés
728
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
30 mars 2014
2
0
Merci
GoTo, instruction
Crée une branche inconditionnelle vers une ligne spécifiée d'une procédure.
Commenter la réponse de ehjoe
0
Merci
Salut Joe,

Remarque de MSDN:

Les instructions GoTo peuvent rendre le code difficile à lire et à gérer. Si possible, utilisez à la place une structure de contrôle. Pour plus d'informations, consultez Flux de contrôle en Visual Basic.

Dans CE LIEN



CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
213
0
Merci
Ouais...
Quand vous aurez fini, je demanderai à mon frère jumeau de venir vous exposer le coup du Sapeur Camembert. Vous verrez
mais j'attends d'abord que le demandeur, seul absent, se manifeste.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
728
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
30 mars 2014
2
0
Merci
Avis à la populacione

Un GOTO bien placé peut petre la seule façon rationnelle de remonter le code, par ailleurs, pacé à bon excient il est largement préférable à des abus d'appels de procédure et fonction, ou à des tests conditionnels en surnombre.

Si vous n'aimez pas les goto n'en dégoutez pas les autres
Commenter la réponse de ehjoe
0
Merci
Re:

Comment expliques-tu alors que avec ce code:
Dim rand As New Random()
Dim i As Integer
For ctr As Integer = 0 To 4
    i = rand.Next(93) + 1
    If InStr(TextBox1.Text, i.ToString, CompareMethod.Text) > 0 Then
       ctr -= 1
    Else
       TextBox1.Text &= i & " "
    End If
Next


On arrive au résultat attendu sans un seul goto?


CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
Messages postés
14590
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 novembre 2019
136
0
Merci
Bonjour,

GOTO en .NET peut être replacé dans la majorité des cas par un Exit ou un Continue.

Acive, mon code a l'avantage de n'utiliser que le nombre de tirage nécessaire pour lister.

D'autre part, ton code pose un problème, car si tu tires dans ce sens par exemple :
32, 56, 42, 95, 3, 12
Le 3 ne sera pas pris en compte car il est déjà présent alors que ce n'est pas logique.

De fait utiliser une collection pour lister les nombres est préférable.
Tu pourra utiliser le membre IndexOf pour vérifier l'existence de la valeur.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry