Discussione:
da vettore a matrice bidimensionale
(troppo vecchio per rispondere)
Gulp®
2013-01-20 12:27:51 UTC
Permalink
Ho una matrice monodimensionale m(1 to 90)
da cui devo derivare una matrice bidimensionale

r(1 to 18,1 to 5)

ossia gruppi di cinque valori per riga su 18 righe,
presi scorrendo m

Come si fa?
--
Gulp®
Soviet_Mario
2013-01-20 13:40:50 UTC
Permalink
Post by Gulp®
Ho una matrice monodimensionale m(1 to 90)
da cui devo derivare una matrice bidimensionale
r(1 to 18,1 to 5)
ossia gruppi di cinque valori per riga su 18 righe,
presi scorrendo m
Come si fa?
scusa ma la tua domanda non è chiara.
Vuoi sostituire i dati senza creare una copia in memoria
(riformattando la matrice) o creare una copia ?
Per la copia devi andarli a pescare uno a uno, ma secondo di
come sono organizzati nell'array lineare devi scambiare
l'ordine di scansione di quella bidimensionale.


es.
Dim Dest(1 to 3, 1 to 2) as integer
Dim Sorg(1 to 6) as integer

dim Rig,Col,J as integer

J=0
for Rig = 1 to 3
for Col = 1 to 2
J += 1
Dest(Rig, Col) = Sorg(J)
next Col
next Rig

oppure

J=0
for Col= 1 to 2
for Rig = 1 to 3
J += 1
Dest(Rig, Col) = Sorg(J)
next Rig
next Col

capisci bene che il tipo di scansione dipende
dall'organizzazione dell'array unidimensionale
CCCP
--
1) Resistere, resistere, resistere.
2) Se tutti pagano le tasse, le tasse le pagano tutti
Soviet_Mario - (aka Gatto_Vizzato)
Gulp®
2013-01-20 15:23:34 UTC
Permalink
Il 20/01/13 14.40, Soviet_Mario ha scritto:> es.
Post by Soviet_Mario
Dim Dest(1 to 3, 1 to 2) as integer
Dim Sorg(1 to 6) as integer
dim Rig,Col,J as integer
J=0
for Rig = 1 to 3
for Col = 1 to 2
J += 1
Non so se sfugge qualcosa a me o a te: si tratta dell'incremento di J.
Se Sorg(1 to 90) come lo incremento J per scorrere il tutto?
--
Gulp®
--
Gulp®
Soviet_Mario
2013-01-20 17:17:46 UTC
Permalink
Post by Gulp®
Il 20/01/13 14.40, Soviet_Mario ha scritto:> es.
Post by Soviet_Mario
Dim Dest(1 to 3, 1 to 2) as integer
Dim Sorg(1 to 6) as integer
dim Rig,Col,J as integer
J=0
for Rig = 1 to 3
for Col = 1 to 2
J += 1
Non so se sfugge qualcosa a me o a te: si tratta dell'incremento di J.
Se Sorg(1 to 90) come lo incremento J per scorrere il tutto?
mi stai prendendo per i fondelli ?
--
1) Resistere, resistere, resistere.
2) Se tutti pagano le tasse, le tasse le pagano tutti
Soviet_Mario - (aka Gatto_Vizzato)
Gulp®
2013-01-20 18:43:40 UTC
Permalink
Post by Soviet_Mario
mi stai prendendo per i fondelli ?
Non sono il tipo, molto più modestamente non sono un esperto e magari
scrivo codice un po incasinato. Per es. ho risolto così:

Dim i As Integer, r As Integer, a As Integer, conta As Integer, Q As Integer
Dim block(1 To 5) As Integer

PreparaNumeri 'prepara Estraendi
a = 1
conta = 0

For r = 1 To 18
For i = a To 90
conta = conta + 1
Estratto = Estraendi(i)
block(conta) = Estratto
If conta = 5 Then Exit For
Next i
For Q = 1 To 5
ToRiga(r, Q) = block(Q)
Next Q

a = a + 5
conta = 0
Next r

Anche se non ho risolto il problema della presenza di due o più numeri
della prima, seconda, terza e così via decina o unità
--
Gulp®
Loganino
2013-01-21 09:05:51 UTC
Permalink
Post by Gulp®
Ho una matrice monodimensionale m(1 to 90)
da cui devo derivare una matrice bidimensionale
r(1 to 18,1 to 5)
ossia gruppi di cinque valori per riga su 18 righe,
presi scorrendo m
Come si fa?
Ti propongo questo, adattalo alle tue esigenze:

Dim m(1 To 90) As Integer
Dim r(1 To 18, 1 To 5) As Integer
Dim i As Long, colonna As Long, riga As Long

' Solo di esempio per riempire l'array
For i = 1 To 90
m(i) = i
Next

riga = 1
colonna = 1
For i = 1 To 90
r(riga, colonna) = m(i)

' Ogni cinque colonne passo alla riga successiva
If colonna Mod 5 = 0 Then
colonna = 1
riga = riga + 1
Else
colonna = colonna + 1
End If
Next

Loading...