Newsgroup: it.comp.appl.access
Titolo: Ciclo for...next

Ciao a tutti i n.g.
In una maschera tipo foglio di lavoro di excel formato da 11 righe e 10
colonne, ho la necessità di visualizzare in colonna solo i numeri che
si ripetono per tre e quattro volte, eliminando quelli singoli e quelli
che si ripetono per due volte.
Public m(11, 10) As Byte
Dim d(11, 10) As Byte
Sub eliminaSingolieDoppi()
Dim i As Integer
Dim j As Integer
Dim k As Integer
    For i = 0 To 9
        For j = 1 To 11
            d(j, i) = 0
        Next
    Next
    For k = 0 To 9
        For i = 1 To 11
            For j = i + 1 To 11
                If m(i, k) = m(j, k) Then
 ' elimino i numeri singoli
                    d(i, k) = m(i, k)
                    d(j, k) = m(i, k)
                End If
            Next
        Next
    Next
    For k = 0 To 9
        For i = 1 To 11
            For j = i + 1 To 11
                If m(i, k) = m(j, k) Then
 ' elimino i numeri doppi
                    d(i, k) = (m(i, k) - d(i, k))
                    d(j, k) = (m(i, k) - d(j, k))
                End If
            Next
        Next
    Next
    For i = 0 To 9
        For j = 1 To 11
            m(j, i) = d(j, i)
        Next
    Next
End Sub
Il problema che non riesco a risolvere è che in questo modo, pur
visualizzando (in colonna) solo i numeri ripetuti tre volte vengono
eliminati i numeri ripetuti quattro volte.
Come posso fare?
BUON 2007  a tutti.
Ciao Vladimiro.

vlad...@alice.it
 wrote:
[cut]
qual'e' il dominio dei numeri?
-- 
ac
y-1=x

Ciao Alessandro.
Se per dominio dei numeri intendi la provenienza di essi, il modo più
semplice che mi riesce di spiegarlo è così:
Da una maschera principale proveniente dalla tabella"Archivio" dove
visualizzo i 5 numeri del lotto (spero sai qualcosa in merito) per le
11 ruote, apro la maschera in questione implementando i risultati nella
tabella "Somme" in questo modo:
Dim dd As Recordset
    Dim ss As Recordset
Sub generasomme()
    Dim dd As Recordset
    Dim ss As Recordset
    Set dd = CurrentDb.OpenRecordset("Select * from archivio where data
= #" & Format(Me.data, "mm/dd/yyyy") & "#")
    If dd.EOF Then Exit Sub
    popolaMatS dd
    eliminaSingolieDoppi
    CurrentDb.Execute "Delete * from somme"
    Set ss = CurrentDb.OpenRecordset("somme")
    For i = 1 To 11
        If Val(dd(i)) > 0 Then
            ss.AddNew
            ss!data = dd!data
            ss!IdRuota = i
            For j = 1 To 10
                ss(j + 2) = m(i, j - 1)
            Next
            ss.Update
        End If
    Next
End Sub
Dove popalaMats mi somma i numeri ( 11 righe per dieci colonne) in
questo modo:
Sub popolaMatS(ss As Recordset)
    For r = 1 To 11
        If ss(r) <> "0000000000" Then
            str2array (ss(r))
            x = 0
            For i = 1 To 5
                For j = i + 1 To 5
                    m(r, x) = estr(i) + estr(j)
                        If m(r, x) > 90 Then m(r, x) = m(r, x) - 90
                    x = x + 1
                Next
            Next
        Else
            For i = 1 To 10
                m(r, i) = 0
            Next
        End If
    Next
End Sub
Spero di non averti rovinato il capodanno!
Ciao Vladimiro
Alessandro Cara ha scritto:


Scusami, avevo dimenticato l'altra Sub.
Public estr(5) As Byte
Sub str2array(s As String)
    Dim i As Integer
    For i = 0 To 4
        estr(i + 1) = Val(Mid(s, i * 2 + 1, 2))
    Next
End Sub
Ciao Vladimiro.
vlad...@alice.it
 ha scritto:


 Scusami, avevo dimenticato l'altra Sub.
Il codice l'ho visto. Per dominio intendo qual'e' l'intervallo di valori 
che i tuoi numeri possono assumere. Potrebe cambiare la strategia di 
soluzione
-- 
ac
y-1=x

I numeri vanno da 1 a 90. Prendiamo in considerazione una sola colonna
con gli undici campi. Ad es.ruota di Bari n.37 ruota di Genova n.37
ruota di Torino n.37 (fin quì i numeri si visualizzano) ma se subentra
un'altra ruota con il n. 37, i numeri scompaiono; cioè si annullano
come gli altri numeri doppi.
Ciao.
Alessandro Cara ha scritto:



Per favore rispondi dopo  il  "quote" (quote=parte del messaggio/i 
precedente)
dim nNum(90) as long
for i = 1 to 10
     for x = 1 to 11
         myIndex = myArray(i,x)
	nNum(myIndex) = nNum(myIndex) + 1
     next
next
for i = 1 to 90
    if nNum(i) > 2 and nNum(i) < 5 then "questo e' bono il numero e'"  & i
next
-- 
ac
y-1=x

Rispondo a quello che ricevo, non ai post precedenti, è cosi no?
Scusami, mia moglie mi sta tirando per i capelli e non posso neanche
provare quello che mi hai suggerito.
Di nuovo BUON ANNO a tutti voi.
A domani!!!!!!!!!!!!!


Scusami Alessandro, perchè hai inserito delle variabili (x) e delle
matrici(myArray) nuove, avendole già  nella routine che ti ho fatto
vedere?
Poi myIndex che cos'è?
if nNum(i) > 2 and nNum(i) < 5 then "questo e' bono il numero e'"  & i
Quì mi esce: errore di compilazione, errore di sintassi.
Ciao Vladimiro.


Per favore rispondi dopo  il  "quote" (quote=parte del messaggio/i
precedente) 
Adesso ho capito.
Ciao Vladimiro.

 Per favore rispondi dopo  il  "quote" (quote=parte del messaggio/i


 Ciao Vladimiro.
Oltre la routine neanche il quote. Continui a scrivere in testa al post.
Come vedi io sto scrivendo "dopo"
La routine e' abbastanza semplice.
Non ho ripreso alcuna parte delle tue routines, ho quindi definito nuove 
variabili che devono essere prese come linea guida. Puoi assegnare i 
nomi che piu' ti garbano
Il quesito era questo:
"Come faccio a rilevare da una matrice bidimensionale (10*11) fatta di 
numeri che vanno da 1 a 90 quelli che si ripetono 3 o 4 volte?"
dim nNum(90) as long
dim myIndex as long
'-------Definisco una matrice con 90 caselle
' -----definisco una variabile di lavoro
for i = 1 to 10
     for x = 1 to 11
'  ciclo sulle due dimensioni di matrice
         myIndex = myArray(i,x)
'prelevo il "numero"  presente su una casella di matrice
     nNum(myIndex) = nNum(myIndex) + 1
addiziono 1 alla casella dei 90 usando come indice il numero estratto
     next
next
' scorro la matrice di 90 e per tutte le caselle che contengono il 
valore  3 0 4 (numero delle uscite) rilevo il numero che e' pari 
all'indice di scorrimento


 y-1=x

>     if nNum(i) > 2 and nNum(i) < 5 then "questo e' bono il numero e'"  & i
ohh.... Vladimiro  non conosci la programmazione evidentemente
Nella riga c'e' un errore
if nNum(i) > 2 and nNum(i) < 5 then msgbox "questo e' bono il numero e'" 


 y-1=x
Aaaaaaaaaa adesso è colpa sua che non conosce il codice...!
Beh meno male che l'hai scritto tu...
;-)
@Alex

 y-1=x

 Grazie comunque vada.
Il tuo problema lo hai esposto correttamente. Mi sembra abbastanza chiaro.
"Il fatto e'" (*) che il mio esempio voleva essere  una indicazione di 
massima  di come risolvere il problema. Tra l'altro non avevo messo la 
msgbox proprio ad indicare che in quel punto potevi fare quello che 
ritenevi opportuno. Per quanto riguarda il problema dell'azzeramento 
delle caselle con uscite < 3 o > 4 e' sufficiente inserire 0 nella 
casella corrispondente sulla else della if (qui non ho compreso la 
esigenza).
Mediamente sul NG si risolvono le situazioni a livello logico, la 
scrittura del codice e la applicazione della soluzione deve essere a 
carico del richiedente. Nel caso si richieda la "soluzione finale" 
trattasi di "prestazione professionale" che segue altre regole.
Ho riguardato il codice. Posso aver sbagliato, non e' che abbia fatto 
test di funzionamento, ma non mi sembra di aver commesso errori logici.
Se il risultato che da' non e' conforme a quanto aspettato i casi sono:
1) Il codice e' errato in qualche sua parte (49%)
2) Le verifiche da te fatte sono errate (50%)
3) Hai fatto qualche "piccola" modifica che ha incasinato il codice (1%)
Nota:(*) "che sempre allegri bisogna stare che il nostro piangere fa 
male al re, fa male al ricco e al cardinale...(etc)" (Jannaci-Fo "Ho 
visto un re")
-- 
ac
y-1=x

 test di funzionamento, ma non mi sembra di aver commesso errori logici.
Assolutamente, anzi sei stato molto cortese nello spiegare in maniera
dettagliata.
Peccato(per me) che non siamo riusciti ad imbroccare la strada giusta.
Ciao


 y-1=x
"Povero re.... e povero il suo cavallo...."... ma non ci stava male
anche qualla del Magnifico L.
@Alex