Page 1 sur 1
[R] Code pour avoir un numéros aléatoire
Posté : lun. 13 juin 2011 02:35
par aviations
Bonsoir, je suis débutant en codage autoit et sa fait très longtemps que j ai pas codé donc je vous demande de l aide :
Je souhaiterais faire un petit programme qui serre a trouver un numéros aléatoire qui est entre 2 numéros qui sont dans des inputs j ai commencer a faire la GUI et je suis carrément bloquer au codage ...
Voila ma GUI :
Code : Tout sélectionner
#include <GUIConstants.au3>
#Region ### START Koda GUI section ### Form=C:\Users\kevin\Downloads\koda_2007-12-15\Forms\Form11.kxf
$Form1 = GUICreate("Form1", 206, 199, 279, 238)
$Group1 = GUICtrlCreateGroup("Choix Distance", 8, 0, 185, 105)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$ChoixMini = GUICtrlCreateInput("1", 133, 28, 49, 20)
GUICtrlSetLimit(-1, 2)
$ChoixMaxy = GUICtrlCreateInput("2", 133, 60, 49, 20)
GUICtrlSetLimit(-1, 2)
$Label1 = GUICtrlCreateLabel("Planet Mini :", 21, 28, 102, 24)
$Label2 = GUICtrlCreateLabel("Planet Maxy :", 21, 60, 110, 24)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Go = GUICtrlCreateButton("Go", 64, 120, 75, 25, 0)
$Resultat = GUICtrlCreateInput("", 56, 160, 89, 21)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Merci d'avance à tout les gens qui vont m'aider
Re: [..]
Posté : lun. 13 juin 2011 03:41
par matwachich
Voila votre script, mais faudrait mettre un titre à votre message, sinon vous allez vous faire botter les fesses par le big bosse lol!
Code : Tout sélectionner
#include <GUIConstants.au3>
#include <EditConstants.au3>
#Region ### START Koda GUI section ### Form=C:\Users\kevin\Downloads\koda_2007-12-15\Forms\Form11.kxf
$Form1 = GUICreate("Form1", 206, 199, 279, 238)
$Group1 = GUICtrlCreateGroup("Choix Distance", 8, 0, 185, 105)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$ChoixMini = GUICtrlCreateInput("1", 133, 28, 49, 20, $ES_NUMBER)
GUICtrlSetLimit(-1, 2)
$ChoixMaxy = GUICtrlCreateInput("2", 133, 60, 49, 20, $ES_NUMBER)
GUICtrlSetLimit(-1, 2)
$Label1 = GUICtrlCreateLabel("Planet Mini :", 21, 28, 102, 24)
$Label2 = GUICtrlCreateLabel("Planet Maxy :", 21, 60, 110, 24)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Go = GUICtrlCreateButton("Go", 64, 120, 75, 25, 0)
$Resultat = GUICtrlCreateInput("", 56, 160, 89, 21)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Go
_NombreAleatoire()
EndSwitch
WEnd
Func _NombreAleatoire()
Local $min = GuiCtrlRead($ChoixMini)
Local $max = GuiCtrlRead($ChoixMaxy)
; ---
; pour des nombres entier uniquement, rajouté le flag correspondant
; à la fonction Random (voir l'aide)
Local $nbrMaxApresLaVirgule = 5
Local $entiersUniquement = 0
; ---
Local $nbrAleatoire = Random($min, $max, $entiersUniquement)
$nbrAleatoire = Round($nbrAleatoire, $nbrMaxApresLaVirgule)
; ---
GuiCtrlSetData($Resultat, $nbrAleatoire)
EndFunc
Re: [..]
Posté : lun. 13 juin 2011 04:09
par aviations
Oui je viens de le remarquer merci beaucoup je testerais sa demain et je vais mettre un titre de ce pas
Re: [..] Code pour avoir un numéros aléatoire
Posté : lun. 13 juin 2011 13:13
par pierrotm777
J'avais trouvé deux petites fonction sur le forum us afin d'améliorer la fonction Random()
La première utilise internet:
► Afficher le texte
Code : Tout sélectionner
Func _TrueRandom($min, $max)
$ret = INetRead("http://www.random.org/integers/?num=1&min=" & $min & "&max=" & $max & "&col=1&base=10&format=plain&rnd=new")
Return StringStripWS(BinaryToString($ret), 8)
EndFunc
► Afficher le texte
Code : Tout sélectionner
; #FUNCTION# ===========================================================================================
; Name: _RandomUnique
; Description: This function return a int number beetween a range of 2 values but never return the
; same value on one session of the script. You can generate values for several variable.
; Each variable is represented by an array that must be declared before.
; Syntax: _RandomUnique($aVar, [$szMin = 0, [$szMax = 1]])
; Parameter(s): $aVar = The array that will contains all the values generated.
; $szMin = optional: The minimal value of the range.
; $szMax = Optional: The maximal value of the range.
; Requirement(s): none
; Return Value(s): on success : A Int number beetween $szMin and $szMax
; on error : An empty value and set error to 1.
; Extented value are : 1 if $aVar is not an array
; 2 if all the values have been given.
; Author(s): Tlem
; Note: Don't forget to déclare an empty array before using the function.
; eg: Global $Var1[1]
; $Var = _RandomUnique($Var1, 1, 10)
; ====================================================================================================
Func _RandomUnique(ByRef $aVar, $szMin = 0, $szMax = 1)
Local $Res, $ii
; Check if $aVar is an array.
; Vérifie si $aVar est un tableau
If Not IsArray($aVar) Then
SetError(1, 1)
Return ''
EndIf
$aSize = UBound($aVar)
; Check if array is bigger than max value.
; Vérifie si la tableau ne dépasse pas la valeur max
If $aSize - 1 >= $szMax Then
SetError(1, 2)
Return ''
EndIf
While 1
Local $szFlag = 0
; Get a random value between $szMin and $szMax (Int value)
; Récupère une valeur aléatoire entre $szMin et $szMax (valeur entière)
$Res = Random(Int($szMin), Int($szMax), 1)
; If array is empty then add value to the array and exit loop.
; Si le tableau est vide, alors ajoute la valeur au tableau et quitte la boucle.
If $aSize = 1 Then
ReDim $aVar[$aSize + 1]
$aVar[0] = $aSize + 1
$aVar[$aSize] = $Res
ExitLoop
EndIf
; Check if value allready exist in array.
; Vérifie si la valeur existe déjà dans le tableau.
For $ii = 1 To $aSize - 1
If $aVar[$ii] = $Res Then $szFlag = 1
Next
; No error => Add value to the array and exit loop.
; Si pas d'erreur => Ajoute la valeur au tableau et quitte la boucle.
If $szFlag = 0 Then
ReDim $aVar[$aSize + 1]
$aVar[0] = $aSize + 1
$aVar[$aSize] = $Res
ExitLoop
EndIf
WEnd
Return $Res
EndFunc ;==>_RandomUnique
Re: [..] Code pour avoir un numéros aléatoire
Posté : lun. 13 juin 2011 13:45
par aviations
Merci à vous.
Le code de
matwachich
satisfait mes attente.
Donc merci encore et bonne journée
Re: [R] Code pour avoir un numéros aléatoire
Posté : lun. 13 juin 2011 15:43
par jchd
@pierrotm777,
Ta seconde fonction revient à accéder successivement à chaque élément d'une permutation de $min à $max choisie pseudo-aléatoirement.
Le principe que cette implémentation emploie est terriblement inefficace.
L'algorithme à employer pour obtenir une permutation pseudo-aléatoire est
celui-ci :
► Afficher le texte
#Include <Array.au3>
SRandom(@AutoItPID) ; par exemple
Local Const $limit = 10000
Dim $Data[$limit]
For $i = 0 To $limit - 1
$Data[$i] = $i
Next
_ArrayDisplay($Data) ; tableau simple de 0 à $limit - 1
For $i = UBound($Data) - 1 To 1 Step -1
$j = Random(0, $i, 1)
$Temp = $Data[$j]
$Data[$j] = $Data[$i]
$Data[$i] = $Temp
Next
_ArrayDisplay($Data)
Un tirage de type loto peut utiliser ces fonctions :
► Afficher le texte
; ----------------------------------
; tirage type loto
Local $aRand[1], $iSuivant
Func _RandomIntArrayInit($iMin, $iMax)
$iMax = Number($iMax)
$iMin = Number($iMin)
If $iMax < $iMin Then Return(SetError(1))
ReDim $aRand[$iMax - $iMin + 1]
; initialisation du tableau d'entiers
For $i = 0 To UBound($aRand) - 1
$aRand[$i] = $iMin + $i
Next
; permutation pseudo-aléatoire
Local $j, $Temp
For $i = UBound($aRand) - 1 To 1 Step -1
$j = Random(0, $i, 1)
$Temp = $aRand[$j]
$aRand[$j] = $aRand[$i]
$aRand[$i] = $Temp
Next
; prêt pour le tirage
$iSuivant = 0
EndFunc
Func _RandomIntArrayGet()
If $iSuivant = UBound($aRand) Then
Return(SetError(1))
Else
Local $ret = $aRand[$iSuivant]
$iSuivant += 1
Return($ret)
EndIf
EndFunc
;--------------------------------------------------
_RandomIntArrayInit(5, 131)
For $i = 1 To 10
ConsoleWrite(_RandomIntArrayGet() & @LF)
Next
Pour information, la fonction Random() d'AutoIt est une excellente fonction pseudo-aléatoire qu'il n'y a pas lieu de remplacer par une fonction externe et très lente dans l'immense majorité des cas.
Re: [R] Code pour avoir un numéros aléatoire
Posté : dim. 19 juin 2011 11:16
par pierrotm777
Bonjour,
Merci de votre avis que je prends en considération.
J'avais simplement testé la fonction random sur un min max de 1 à 100 et trouvé que le résultat était souvent le même.
Cette fonction Random est surement plus efficace avec un min max plus grand, non ?
Re: [R] Code pour avoir un numéros aléatoire
Posté : dim. 19 juin 2011 12:16
par jchd
Souvent le même ?
Je demande à voir un test statistique qui différencie la sortie pseudo-aléatoire de Random() d'AutoIt d'un tirage aléatoire vrai. AMTHA c'est assez cher.
Source