Autore Topic: Matrice bidimensionale super dinamica  (Letto 864 volte)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Matrice bidimensionale super dinamica
« il: 26 Ottobre 2014, 21:56:11 »
Ciao a tutti,
Cercando per il forum notizie sui dati aggregati, sono incappato in una discussione sulle matrici bidimensionali dinamiche.
Successivamente ripensandoci ho tirato giù questa scemenza che in effetti dimostra che è possibile ottenere anche con le matrici di Gambas travasandone i dati fra due, matrici dinamiche che preservano i dati addirittura manipolando entrambe le dimensioni.
La dimostrazione è il minimo indispensabile per dimostrarne la fattibilità, per poterla usare occorre giocare con i cicli annidati.
E' chiaro che il dispendio energetico risulta notevole e per “tabelle” di grandi dimensioni è improponibile però...
Codice: gambas [Seleziona]

' matrice bidimensionale super dinamica
 ' che preserva i dati; si possono aggiungere
 ' sia colonne che righe (record).
 
  Dim miaArr1 As String[]
  Dim miaArr2 As String[]
 
  ' tabella di 2 colonne con 1 riga
  miaArr1 = New String[2, 1]
  miaArr1[0, 0] = "Valore in 1, 1"
  miaArr1[1, 0] = "Valore in 2, 1"
  Print miaArr1[0, 0]
  Print miaArr1[1, 0]
  Print "==============="
 
  ' aggiungo una riga alla tabella
  miaArr2 = New String[2, 2]
  miaArr2[0, 0] = miaArr1[0, 0]
  miaArr2[1, 0] = miaArr1[1, 0]
  miaArr2[0, 1] = "Valore in 1, 2"
  miaArr2[1, 1] = "Valore in 2, 2"
  Print miaArr2[0, 0]
  Print miaArr2[1, 0]
  Print miaArr2[0, 1]
  Print miaArr2[1, 1]
  Print "==============="
 
  ' aggiungo una colonna alla tabella
  miaArr1 = New String[3, 2]
  miaArr1[0, 0] = miaArr2[0, 0]
  miaArr1[1, 0] = miaArr2[1, 0]
  miaArr1[2, 0] = "Valore in 3, 1"
  miaArr1[0, 1] = miaArr2[0, 1]
  miaArr1[1, 1] = miaArr2[1, 1]
  miaArr1[2, 1] = "Valore in 3, 2"
  Print miaArr1[0, 0]
  Print miaArr1[1, 0]
  Print miaArr1[2, 0]
  Print miaArr1[0, 1]
  Print miaArr1[1, 1]
  Print miaArr1[2, 1]


 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re: Matrice bidimensionale super dinamica
« Risposta #1 il: 27 Ottobre 2014, 21:00:59 »
 :ciao:
Interessante!
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Matrice bidimensionale super dinamica
« Risposta #2 il: 27 Ottobre 2014, 22:11:39 »
Grazie,
in realtà nel commento del codice scrivendo record dico un'inesattezza, anche se voluta, in quanto record significa dati di diverso tipo ed è più riferibile alle strutture. L'avevo usato per meglio spiegarmi però credo sia errato.
Invece ho notato una cosa: Abitualmente chi si riferisce alle matrici bidimensionali che le si possono rappresentare benissimo come una (limitata) tabella, mette sempre prima le righe e poi le colonne.
Io questo non lo riesco a comprendere, in VB/VBA le matrici bidimensionali le si poteva ridimensionare preservandone i valori (ReDim Preserve) limitatamente all'ultima dimensione e cioè
Tabella(3,3) poteva diventare Tabella(3,4) ma non Tabella(4,3) quindi visto che in una tabella uno aggiunge le righe (record(!?)) mica le colonne ne dovrebbe discendere che si dovrebbe dire correttamente Array[Colonna, Riga] non trovi? Cosa ne pensi?

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Matrice bidimensionale super dinamica
« Risposta #3 il: 28 Ottobre 2014, 19:01:37 »
Un'ulteriore pensierino, effettivamente essendoci la possibilità di creare Matrici di tipo variant si potrebbe usare anche record per riferirsi alle righe.

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re: Matrice bidimensionale super dinamica
« Risposta #4 il: 29 Ottobre 2014, 14:30:59 »
Citazione
ne dovrebbe discendere che si dovrebbe dire correttamente Array[Colonna, Riga] non trovi?

Sì, credo sia così, il fatto che, essendo la matrice bidimensionale, ne tentiamo subito una rappresentazione grafica immaginaria.
Se la matrice fosse a dimensione maggiore di tre, questo ragionamento verrebbe a cadere!

Forse è solo un problema di abitudine ;) ...e un mio maestro diceva che l'abitudine, a volte utile, è un grande nemico da combattere!
 :ciao:
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: Matrice bidimensionale super dinamica
« Risposta #5 il: 29 Ottobre 2014, 19:18:26 »
Citazione
ne dovrebbe discendere che si dovrebbe dire correttamente Array[Colonna, Riga] non trovi?

Sì, credo sia così, il fatto che, essendo la matrice bidimensionale, ne tentiamo subito una rappresentazione grafica immaginaria.
Se la matrice fosse a dimensione maggiore di tre, questo ragionamento verrebbe a cadere!

Forse è solo un problema di abitudine ;) ...e un mio maestro diceva che l'abitudine, a volte utile, è un grande nemico da combattere!
 :ciao:

Già gli Array tridimensionali e oltre...
Io gli Array li ho sempre immaginati come il cubo di Rubik sai quello classico da 3x3x3. Ogni cubetto la metafora di una variabile. La striscia di un solo cubetto per tre come metafora dell'Array unidimensionale, la “facciata” di 3x3 come la Matrice bidimensionale e l'intero cubo a rappresentare l'Array tridimensionale il resto non me lo immagino proprio anche se i libri di Asimov (e non solo) li ho letti tutti.
Io mi fermo a due dimensioni che usare “l'intero cubo” non vedo a cosa possa servire se non forse per stabilire le coordinate per le stampanti 3D? O forse per quello è sufficiente una tabella di tre colonne?
 :ciao:
PS: Forte il tuo maestro
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro