Newsgroup: it.comp.appl.access
Titolo: Popolare una matrice

Dunque, il mio problema è questo.
Ho una serie di elementi rappresentati da due soli possibili valori che sono 
1 e 0
presi uno alla volta.
Esempio
A,B
dovrei generare uan cosa del genere
A  B
0   0
0   1
1   0
1  1
cioè una matrice.
Fino ad ora ho fatto questo ma non so come caricare la matrice in base alle 
combinazioni di 0 ed 1.
Il problema è che gli elementi possono variare e quindi se ho per esempio
A,B,C,D
avrò 16 possibili combinazioni tipo
0000
0001
0011
0111
1111
1110
1100
1000
1001
etc etc
Function Matrice()
Dim Matrice() As Variant
Dim intRighe As Integer
Dim intColonne As Integer
Dim intElementi As Integer
Dim x As Integer
Dim y As Integer
Dim z As String
'Per esempio mettiamo che gli elementi siano 4
intElementi = 4
intRighe = 2 ^ intMolecole
intColonne = intMolecole
ReDim Matrice(intRighe, intColonne) As Variant
For x = 1 To intRighe
    For y = 1 To intColonne
     z= [e qui mi blocco!!!]
        Matrice(x, y) = z
    Next y
Next x
End Function
Suggerimenti?
Non è che sia molto pratico di matrici, anzi
è la prima volta che le devo usare.
Morgan


Da un esempio fatto da G. Rancati un po di tempo fa:
1) Tabella con un attributo (a1) e due righe una con 0 ed una con 1
2) select t1.a1,t2.a1,t3.a1,t4.a1 from t as t1, t as t2, t as t3, t as t4
hai quello che vuoi ed e' sufficiente leggere il recordset (o eseguire 
la query)
--
ac
-- 
ac
y-1=x

 Morgan wrote:
P.S. Cmq generere una cosa del genere via codice e' una "abbastanza" 
semplice routine ricorsiva. Cerca una qualsiasi routine (in qualsiasi 
linguaggio) per il calcolo di un numero fattoriale e, fatti pochi 
aggiustamenti, ottieni quello che vuoi
-- 
ac
y-1=x

 ha scritto nel messaggio 
news:1pxrh.9596$bH4....@tornado.fastwebnet.it...

La tabella sarebbe la via più semplice,ma vorrei sviluppare sta cosa
da codice.
Brancolo nel buio.
Il fatto è che tutte le routine che ho trovato data una stringa mi ritornano
solo tutte le possibili combinazioni ma non è quello che mi serve.
In pratica la domanda è questa
Data una serie di N elementi, rappresentabili ogniuno da due soli valori 
(1,0), calcolare il numero possibile di combinazioni.
Cioè se il numero di elementi è 2, li chiamiamo A e B, allora dato che un 
singolo elemento può assumere il valore 1 od il valore 0
avremo che 2^N = 4 quindi
AB
00
11
01
10
non mastico molto del calcolo combinatorio, che mi devo andare a vedere?
Morgan

 Dunque, il mio problema č questo.
[CUT]
Ciao Morgan,
prova cosě
----
Function Matrix()
Dim Matrice() As Variant
Dim intRighe As Integer
Dim intColonne As Integer
Dim intElementi As Integer
Dim x As Integer
Dim y As Integer
Dim z As String
'Per esempio mettiamo che gli elementi siano 4
intElementi = 4
intRighe = 2 ^ intElementi
intColonne = intElementi
ReDim Matrice(intRighe, intColonne) As Variant
For x = 0 To intRighe - 1
    For y = 0 To intColonne - 1
        Matrice(x, (intColonne - 1) - y) = -((x And (2 ^ y)) = (2 ^ y))
    Next y
Next x
'Stampo il risultato
For x = 0 To intRighe - 1
    For y = 0 To intColonne - 1
        Debug.Print Matrice(x, y),
    Next y
    Debug.Print
Next x
End Function
----
Ciao
-- 
Giorgio Rancati
[Office Access MVP]


Ti ha risposto G. Rancati ed immagino che la cosa che dice e' (non sia) 
giusta. Vorrei, non mi sembra che Giorgio entri nel merito, che se ti 
serve sapere quanti sono gli elementi e' un calcolo di prodotto 
cartesiano (quello che fa una join non condizionata) e quindi 
n1*n2*n3*n4*n5 and so on...
che nel caso di n con stesso numero di elementi e' la semplice 
elevazione a potenza (i.e n^5 nell'esempio).
Per sapere cio' non e' necessario riempire una matrice
-- 
ac
y-1=x

 Per sapere cio' non e' necessario riempire una matrice
boh... io ho capito che vuole avere le combinazioni dei singoli elementi in
una matrice.
vediamo cosa dice Morgan
:-)



Si ha chiesto quello. Quello che ho scritto era in funzione di un'altro, 
forse, interrogativo che era presente in una sua risposta.
" calcolare il numero possibile di combinazioni".
-- 
ac
y-1=x

 prova così

Esattamente quello che mi serve.
Rispondo qui a tutti quelli che si sono interesati per spiegare meglio
a cosa mi serve questa funzione.
Attualmente lavororo con un database che contiene i risultati di test
eseguiti su molecole.Molto semplicemente questi test dicono se su un 
campione una serie
di molecole ci sono o non ci sono.Le molecole testate contemporaneamente su 
un campione
sono 79.Ora io devo rispondere ,interrogando il database a domande tipo
Date le molecole A,B  dimmi su tutti i campioni esaminati (sono fino ad oggi 
10000)
come si presentano le risposte (0,1) contemporaneamente.
Ora con una serie di query riesco a produrre i vari pattern ,cioè una cosa 
del genere
Numero Casi     AB
    2200              00      ......cioè 2200 casi negativi su tutte e tre 
contemporaneamente
    5800              01      ......cioè 5800 casi positivi su B e negativi 
con A
    1200              10      .......cioè 1200 casi Positivi su A e negativi 
su B
      800              11      .......cioè 800 casi Positivi su A  B
etc etc
L'idea della matrice nasce dal fatto che esistono alcune conmbinazioni di 
molecole
dove alcuni pattern non si presentano mai.Per esempio date 4 molecole ABCD
dovrei avere 2^4=16 pattern
ABCD
0000
0001
0011
0111
etc etc
 ma la base dati me ne restituisce solo 14 quindi ci sono due
pattern che non si presentano.
Quali sono?
Quindi mi è venuto in mente di crearmi una matrice che si popoli a run time 
con tutti i pattern
possibili per il numero di molecole date poi ,con altro codice, controllarmi 
quali pattern sono presenti nellla matrice ,che
li conterrà sicuramente tutti, ma non nel risultato della ricerca.
Non so se nono stato chiaro, cmq grazie a tutti e due considerazioni
1) questo ng è veramente ottimo
2) Acces e VBA sono veramente potenti
Grazie
Morgan


Aggiungo che la funzione ,funziona fino a
14 colonne
16384
se no va in overflow.
Morgan 

 se no va in overflow.
Cambia le dichiarazioni delle variabili da Integer a Long, puoi arrivare
fino a 20 colonne,  1.048.576
Oltre le 20 colonne a me esce l'errore "Memoria esaurita"
Ciao


 ha scritto nel 
messaggio news:45afed4c$0$20819$5fc...@news.tiscali.it...

Infatti lo avevo già fatto.
A me accade con 14 colonne.
Dipenderà dalla ram?
Cmq penso che al massimo userò 8 colonne.
Morgan 

 Dipenderà dalla ram?
sì, per risparmiare memoria cambia queste due righe
-----
Dim Matrice() As Byte
-----
e
----
ReDim Matrice(intRighe, intColonne) As Byte
----
in questo modo riesco ad arrivare a 23 colonne  8.388.608
Ciao
-- 
Giorgio Rancati
[Office Access MVP]
"Morgan" <morga_n@hotmail