Newsgroup: it.comp.appl.access
Titolo: rnd e randomize

Le funzioni mi sono abbastanza chiare (!)
Vorrei tuttavia avere la possibilità di estrarre da 1 a 100 dei numeri in
modo casuale ma senza ripetizioni
 Io ho usato questa funzione, mi piace ma è pesuccia
For j = 1 To 100
       E(j) = 0
       Do
           Randomize
           Valore = Int((100) * Rnd + 1)
           For z = 1 To UBound(E)
                 Presenza = False
                 If E(z) = Valore Then
                    Presenza = True
                    Exit For
                End If
            Next
            If Presenza <> True Then Exit Do
       Loop
       E(j) = Valore
Next j
Si può migliorare
Cheiddiovenerendamerito

 ha scritto nel messaggio
news:eJw9d.93066$35.43...@news4.tin.it...

Prova così:
Dim E(99) As Integer
Dim J As Integer
Dim Valore As Integer
Randomize
For J = 1 To 100
    Do Until 1 = 2
        Valore = Int(100 * Rnd + 1)
        If E(Valore - 1) = 0 Then
            E(Valore - 1) = Valore
            Exit Do
        End If
    Loop
Next J
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 wrote in message
news:eJw9d.93066$35.43...@news4.tin.it...

Direi che non c'è niente da migliorare, solo da cambiare.
Io ho fatto questa:
------------------------------------------------------------------
Dim String100 As String, i, k, A, Array100(1 To 100)
For i = 1 To 100
    String100 = String100 & i & "-"
Next
String100 = "-" & String100
Randomize
Do
A = Int(1 + 100 * Rnd)
If InStr(1, String100, "-" & CStr(A) & "-") Then
  k = k + 1
  String100 = Replace(String100, "-" & CStr(A) & "-", "-", 1, 1)
  Array100(k) = A
End If
Loop Until String100 = "-"
-----------------------------------------------------------------
Tanto per far l'originale...
Ciao
Bruno

 Next J
Se non ho le traveggole la funzione che proponi
equivale a questa:
-----------------------------------------
Dim i, Array100(1 To 100)
For i = 1 To 100
    Array100(i) = i
Next
-----------------------------------------
Bruno

 Next J
Parvimi di capir che non esiste altro sistema che usar cotal matrici.
(Dante Alighieri)
Grazie

 wrote in message
news:BNA9d.94925$35.44...@news4.tin.it...

Intanto aggiustiamo Dante nei corretti endecasillabi:
Parvimi di capir che non esiste
    altro sistema che l'usar matrici.
Poi quella "strana" che ho proposto io, se la paragoni
alla tua col timer inserito (non per 100 numeri che son
troppo pochi, ma per 1000/2000 numeri) ti accorgi
che tua formula viene battuta in velocità per almeno
tre lunghezze.
Quindi, ancorché strana, la mia è di gran lunga più efficente.
Col che ritengo di aver scoperto l'acqua calda...
Ciao
Bruno
PS
Strano posto questo per sentir citare Dante.
Ne son rimasto piacevolmente stupito essendo
Quello la mia lettura preferita..

 Quello la mia lettura preferita..
Io cmq preferisco Playboy, dura di meno la lettura!
AH AH AH AH A

 AH AH AH AH A
De gustibus...
Bruno

 ha scritto nel messaggio
news:lMz9d.9240$b5.3...@news3.tin.it...

Cosě facendo riempi la matrice di numeri in sequenza da 1 a 100, mentre č
stato richiesto che i 100 numeri (da 1 a 100) non siano in sequenza ma siano
generati in maniera random.


 Grazie


 Roberto
Esattamente quello che fa la tua funzione.
Bruno

 Bruno


 neppure capita.
E' un'artista in queste cose.....!!
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------

 neppure capita.
Non mi sono nemmeno sforzato di capirla.
Ho semplicemente copiato il tuo codice da Outlook
col Clipboard e l'ho trasportato in un modulo
di Access.
Ti riconfermo, perché ho rifatto l'operazione or ora,
che se questa è la tua funzione la lettura è una sequenza
ordinata di numeri da 1 a 100.
A casa mia (Win2003/Access2003) funziona come detto.
-----------------------------------
Dim E(99) As Integer
Dim J As Integer
Dim Valore As Integer
Randomize
For J = 1 To 100
    Do Until 1 = 2
        Valore = Int(100 * Rnd + 1)
        If E(Valore - 1) = 0 Then
            E(Valore - 1) = Valore
            Exit Do
        End If
    Loop
Next J
For J = 0 To 99
    Debug.Print J + 1 & ")   "; E(J)
Next
-------------------------------------
Aspetto tuoi commenti.
Bruno

 ha scritto nel messaggio
news:wF9ad.16214$b5.7...@news3.tin.it...

Beh, cosa devo dire: chiedo umilmente scusa a te ed agli altri.
Mi sono rimaste sulla tastiera un paio di righe di codice; prova a vedere se
così funzione:
Dim E(99) As Integer
Dim F(99) As Integer
Dim J As Integer
Dim Valore As Integer
Randomize
For J = 1 To 100
    Do Until 1 = 2
        Valore = Int(100 * Rnd + 1)
        If E(Valore - 1) = 0 Then
            E(Valore - 1) = Valore
            F(J) = Valore
            Exit Do
        End If
    Loop
Next J
For J = 0 To 99
    Debug.Print J + 1 & ")   "; F(J)
Next
Scusami ancora.


 Scusami ancora.
Scusarti di che?
Sono cose che a me capitano tre volte al giorno.
Comunque ancora non funziona a dovere.
Mi dà errore su F(J) = Valore.
Infatti non puoi includere F(J) in ciclo
For J = 1 to 100 avendo dimensionato
F(99):
Ho aggiustato i dimensionamenti e il programma
non si inceppa, però mi dà come risultato 100
numeri random da 0 a 100 (che farebbe 101)
quindi un numero da 1 a 100 deve per forza
mangiarselo per la strada.
Ora non ho tempo di indagare oltre, ci guarderò
stasera.
Nel frattempo ti saluto
Bruno

 ha scritto nel messaggio
news:Xntad.19784$b5.9...@news3.tin.it...

Infatti non:
F(J) = Valore
ma:
F(J - 1) = Valore


 ha scritto nel messaggio
news:qxT9d.33171$H11.1...@twister1.libero.it...

O POFFARBACCO!
Esistono soluzioni senza matrici?
Se ve ne sono ne imploro (troppo?) la diffusioine.
Marchingegno

 Roberto
Sě l'avevo aggiustata.
Poi ho sostituito le dichiarazioni Integer con Long,
ho tolto Until 1 = 2 dopo il Do, tanto esci con Exit Do
e cosě fa un controllo in meno,
e l'ho mandata a 1 000 000 di numeri paragonandola
con quella di Marchingegno.
Č circa un migliaio di volte piů veloce.
Con la mia nemmeno provare: č tutta basata
macchinosamente su di una lunga stringa.
Hai avuto una buona idea, quella di assegnare il
numero "estratto" al suo posto naturale in E(); ti
risparmi un sacco di confronti.
Complimenti
Bruno

 Marchingegno


 ha scritto nel messaggio
news:IpCad.36595$H11.1...@twister1.libero.it...

Ma questo è metrix ma che dico? Mezzo Metrix!