Newsgroup: it.comp.lang.visual-basic
Titolo: Aiuto

Salve
Il mio problema è questo:
Devo visualizzare dei numeri casuali fino ad un max di 90 (da 2 a 90)
e devono essere tutti diversi.
Vorrei sapere che metodo posso usare per inserire in una matrice i numeri, e
confrontarli tra di loro per eliminare i doppioni ripetuti nella generazione
dei nr casuali prima di visualizzarli, affinché abbia tutti nr diversi?
Grazie anticipatamente

"Eowyn" ha scritto:

Dim x As Integer
Dim Numero As Integer
Dim Numeri (2 to 90) as boolean
MousePointer = 11
List1.Clear
Randomize
For x = 2 To 90
Do
Numero = Int(Rnd * 89) + 2
Loop Until Not Numeri(Numero)
Numeri(Numero) = True
List1.AddItem Numero
  Next x
  Beep
  MousePointer = 0
-- 
News2000 1.5ß Version 
http://socket2000.8m.com

 Vorrei sapere che metodo posso usare per inserire in una matrice i numeri,
e confrontarli tra di loro per eliminare i doppioni ripetuti nella
generazione dei nr casuali prima di visualizzarli, affinché abbia tutti nr
diversi?
Un buon sistema per evitare i doppioni e`... non generarli. ;-)
Pero` spiegami, per favore, cosa intendi con:
"fino ad un max di 90 (da 2 a 90)"
Da 2 a 90 ci sono 90-2+1=89 numeri. Quindi quel "max di 90" non lo capisco.
Ancora: i numeri da estrarre sono proprio 2, 3, 4 .. 88, 89, 90; oppure sono
altri i numeri fra i quali vuoi estrarne 90 (o 89)?
Ora, per chiarire cosa intendevo riguardo l'evitare doppioni, incollo un
esempio. Se c'e` qualcosa di poco chiaro fatti vivo, magari con un oggetto
piu` serio ;-)
Mi raccomando, se intendi usare questo codice fai dei test approfonditi
perche' io non ho avuto tempo. E magari fammi sapere, grazie.
Option Explicit
Private Sub Main( _
)
  Dim Estrazione
  Dim Estratto
  Estrazione _
    = Estrai( _
          Da:=1 _
        , A:=90 _
        , Estrazioni:=5)
  GoSub DebugPrint
  Estrazione _
    = Estrai( _
          Da:=2 _
        , A:=11 _
        , Passo:=2 _
        , Estrazioni:=3)
  GoSub DebugPrint
  Estrazione _
    = Estrai( _
          Da:=Array("Pippo", "Pluto", "Paperino") _
        , Estrazioni:=2)
  GoSub DebugPrint
  Exit Sub
DebugPrint:
  For Each Estratto In Estrazione
    Debug.Print Estratto
  Next
  Debug.Print
  Return
End Sub
Private Function Estrai( _
  ByVal Da _
, Optional ByVal A _
, Optional ByVal Passo = 1 _
, Optional ByVal Estrazioni _
)
  Dim ModeArray
  Dim Lower
  Dim Upper
  Dim Step
  Dim Rand
  Dim Index
  Dim i, j
  ModeArray = VarType(Da) > vbArray
  If ModeArray Then
    Lower = LBound(Da)
    Upper = UBound(Da)
    Step = 1
  Else
    Lower = Da
    Upper = A
    Step = Passo
  End If
  If IsMissing(Estrazioni) _
    Then Estrazioni = (Upper - Lower + 1) / Step
  j = 0: Index = ""
  For i = Lower To Upper Step Step
    j = j + 1
    Index = Index & Format(Hex(j), "@@@@")
  Next
  Randomize
  ReDim Result(0 To Estrazioni - 1)
  For i = 0 To Estrazioni - 1
    Rand = Int(((Len(Index) \ 4)) * Rnd + 1) * 4 - 1
    j = Lower + (Val("&h" & Mid(Index, Rand, 4)) - 1) * Step
    If ModeArray Then
      Result(i) = Da(j)
    Else
      Result(i) = j
    End If
    Index = Left(Index, Rand - 1) & Mid(Index, Rand + 4)
  Next
  Estrai = Result
End Function
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------