Newsgroup: it.comp.lang.visual-basic
Titolo: array, matrici domanda scolastica

Sto continuando la lettura e rilettura del mio libro "guida alla
programmazione visual basic"
lettura e rilettura perchè, purtroppo, non sono meticoloso, ma faccio un po'
di casino, io sono fatto così, passo da un capitolo all'altro, analizzo gli
esempi senza leggere la spiegazione e ovviamente, spesso devo tornare
indietro e ricominciare da capo.
Sono al capitolo "Matrici e variabili definite dall'utente" ho capito quasi
tutto però quello che mi chiedo e nel libro proprio non spiega è questo:
Le matrici di tipi di dati definiti dall'utente sono i famosi "array" che
sento ricordare spesso qui sull'ng?
PS:ho dato una guardatina al capitolo delle classi e INCREDIBILEEEE!!! ci ho
capito qualcosa, tra l'altro capire alcune basi sulle classi mi sta aprendo
porte anche in altri sensi, tipo uso di Set New etc..
Grazie a chi mi sopporta.
--
-----------------------------------------------------
 David Ruscelli....
        ....Per gli amici Davide
 ----------------------------------------------------

 "array" che sento ricordare spesso qui sull'ng?
L'array è un vettore di dati, in pratica un insieme di valori 
indicizzati da 0 a n, per cui unidimensionali. Le matrici piu' comuni 
sono le bidimensionali in pratica sono array (vettori) che hanno due 
indici, riga e colonna (nel caso bidimensionale), in questo caso 
abbiamo due indici che vanno da 0 a n e la dimensione totale della 
matrice bidimensionale è data dal prodotto di righe per il numero di 
colonne. Una matrice di 3 righe e 2 colonne e una matrice 3x2 con un 
totale di 6 valori :) e gli elementi della matrice bidimensionale si 
identificano con una coppia (x,y) come un piano cartesiano :)) 
Spero di essere stato chiaro.
Ciao :)

 identificano con una coppia (x,y) come un piano cartesiano :))
Le matrici bidimensionali sono spiegate anche nel libro con tanto di
schemino etc...e le ho capite perfettamente, però mi sfugge quale possa
essere la loro utilità.

Immaginati un foglio excel a due colonne.
Beh in una potresti per esempio mettere l'id del prodotto che stai
trattanto, nella seconda il nome.
E' praticamente una specie di contenitore più grosso dove infili
più informazioni ....
Altro esempio potrebbe essere quello di gestire una relazione
ad oggetti di tipo padre figlio.
Entrambe le colonne conterranno due id ... solo che nella prima
ci sarà l'id della riga/prodotto che stai leggendo, nella seconda ci
sarà l'id della riga/prodotto a cui fa riferimento il prodotto che stai
leggendo.
Di usi ce ne sono a bizzeffe, spero ti abbiano aperto gli orizzonti
questi due.
--
Saluti
Andrea MORO
***************************************
Per rispondere togliere ET dal messaggio prima
della chiocciola.

essere la loro utilità.
Valuta questo esempietto. Definisco un'array
senza dimensionarla e la ridefinisco per contenere 1000 elementi ciascuno
composto da 3 'sottoelementi' che per me saranno X Y e Z
Dim coord() as
Double
Redim Coord(1000,2) 
For i = 1 to 1000
   Coord(i,0)=Rnd * 1000
' assegna la X
   Coord(i,1)=Rnd * 1000  ' assegna la Y
   Coord(i,2)=Rnd
* 1000  ' assegna la Z
next
' oppure, ottimizzando..
For i = 1 to
1000
  For j = 0 to 2
     Coord(i,j)=Rnd * 1000  ' assegna la X, la Y e
la Z
  Next
next
Fabio
--------------------------------
Inviato via 
http://usenet.iol.it
 

 trattanto, nella seconda il nome.
Ma non posso fare la stessa cosa in questo modo?
Type Anagrafica
strCognome
strNome
strIndirizzo
End Type
Dim Impiegato(1 to 100) as Anagrafica
Anagrafica.(1).strCognome="ROSSI"
Anagrafica(1).strNome="MARIO"
etc..
In questo modo ho comunque ottenuto la stessa cosa
Ne risulta una tabella del genere
INDICE  COGNOME             NOME         INDIRIZZO
       1       ROSSI                     MARIO           VIA....
       2       PALLINO                PINCO            VIA......
       3       ETC....
Qual'è la differenza tra questo e una matrice bidimensionale?
Scusa se sono duro....

 essere la loro utilità.
supponiamo di avere N numero di individui di cui si voglia indicare il peso
e l'altezza, da utilizzarsi per dei calcoli e/o statistiche.
O di ciascun individuo vado a pescare di volta in volta i dati su un
archivio (mooooolto leeeento e cooontorto), oppure ho necessita' di
memorizzare i dati in variabili (in questo caso di tipo array).
quindi:
nome   cod  peso altezza
beppe   1      90    173
david     2     70     175
.......      ...    ...      .....
ennes    n      80    170
A questo punto definendo l'array Dati_Persona(n,2) posso facilmente
memorizzare ed utilizzare le varibili
infatti
Dati_Persona(1,1)=90 'peso 1^ pers
Dati_Persona(1,2)=173 'altezza 1^ pers
Dati_Persona(2,1)=70  'peso 2^ pers
Dati_Persona(2,2)=175 'altezza 2^ pers
....
Dati_Persona(n,1)=80  'peso n^ pers
Dati_Persona(n,2)=170 'altezza n^ pers
quindi se voglio la sommatoria dei pesi e delle altezze avro':
dim Num_Pers as Integer
dim Altezze as Integer, Pesi as Integer
For Num_Pers = 1 To N
    Pesi=Pesi + Dati_Persona(Num_Pers, 1)
    Altezze=Altezze + Dati_Persona(Num_Pers, 2)
Next Num_Pers
beppe
-----------------------------------------------------------
Visita il sito del WWF AltoFerrarese
http://www.comune.cento.fe.it/wwfaf
-----------------------------------------------------------

 Qual'è la differenza tra questo e una matrice bidimensionale?
Per esempio che, con la struttura, non hai la possibilita' di scorrere i
dati per "colonne" e in generale sei legato a dover conoscere esattamente la
struttura della tua variabile per poterla utilizzare.
Vista in questo contesto una matrice bidimensionale invece e' una griglia di
valori piu' generica, alla quale puoi accedere per indice su entrambe le
dimensioni.
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 --
Ma, c'è da chiarire che le matrici non sono solo BIDIMENSIONALI, hanno
una possibilità Multidimensionale, che quando eccede le 3 Dimensioni
sfugge un pò alla nostra logica, ma sono pur sempre valide....!
Un tipo di dati definito dall'utente si ottiene dimensionando una
Variabile con :
Type Utente
   Nome as String
   Cognome as string
   Indirizzo as String
end type
a questo punto se vuoi dimensionare una Matrice di dati tipo Utente
dovrai eseguire:
Dim Cliente() as Utente  ' dove Utente è il TIPO definito dal programm.
Alessandro./[@Alex]/
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

>Ma, c'è da chiarire che le matrici non sono solo BIDIMENSIONALI, hanno
Bisognerebbe indagare per bene sull'etimologia del termine "matrice" ma
secondo me rimane un'array indicizzata a più dimensioni 
L'esempio che
hai fatto è solo un'array di un tipo di dati definito dall'utente. Se si
volesse essere pignoli allora anche 
Dim dati() as Long è una matrice, in
quanto un Long è rappresentato da 4 bytes
La matrice, secondo me, per
natura deve avere la leggibilità per indice in direzioni sia verticali che
orizzontali


 orizzontali
Penso di aver capito la differenza e da quelloche ho capito sono d'accordo
con te.
Grazie a tutti
Davide

 Fabio
Scusa Fabio, sono concorde con te, ma il concetto va ampliato, come
ti dicevo non sono solo 2 le dimensioni, perchè possono essere n.
Quindi Orizzontali, Verticali, Diagonali, come le vuoi rappresentare
graficamente non importa, quello che importa è che il tuo modo
grafico ha la limitazione delle 3 dimensioni.
Se io faccio così:
Dim MyType(100,100,100,100,100) as String
ti assicuro funziona ma a livello grafico spiegarla è complesso.
L'esempio che ho fatto io era solo per spiegare un tipo di matrice
o array(semplice) di dati tipo "Definiti da me".
E come discutere del sesso degli angeli o se è nato prima l'uovo
o la gallina.....!!!
Alessando.


 o la gallina.....!!!
no, è come discutere se  la terra è piatta o sferica :)
La matrice non è un concetto legato ai linguaggi di programmazione (quindi
non c'entra niente con user type ecc) ma è un concetto puramente matematico.
Tanto che normalmente sono 4x4, 3x3 per rappresentazioni geometriche nello
spazio 3D. Con le matrici 4x4 ( es: mat(4,4) ) si effettuano prodotti
vettoriali, prodotti scalari, proiezioni, traslazioni ecc..
Ogni altro uso è lecito ma "Dim MyType(100,100,100,100,100) as String" anche
se funzionante (dubito però che lo stack riesca a contenerla tutta..) è
scorretta a livello concettuale.
Inoltre
"Dim MyType(100,100,100,100,100) as String"
non è equivalente a
Type utMyType
   st1 as String
   st2 as String
   st3 as String
   st4 as String
   st5 as String
End type
Dim MyType(100) as utMyType
Bensi a
Type s1
   s(100) as String
End Type
Type s2
   s(100) as s1
End Type
ecc.. fino a 5 e dichiarando:
Dim MyType(100) as s5
Fabio

 
Non parlo di equivalenza, ma la domanda originale, come ho capito io
chiedeva appunto la relazione tra Variabili definite dall'utente 
e Matrici. Questa era la mia lettura, è chiaro quindi che intendevo
le ultime righe di codice che hai postato proprio per dimostrare
la correlabilità.
La matematica e la rappresentazione grafica 3D è come dici tu matematica
le matrici sono sì un concetto matematico che ovviamente è ottimizzato
alla rappresentazione di grandezze Vettoriali soprattutto se correlate
dal Tempo come 3° grandezza, è infatti il metodo di campionamento
dinamico
dei segnali nel tempo più corretto per ricostruire il segnale.
Questo però deve imporre la norma che utilizzare la 4° dimensione sia
scorretto.
In fondo programmando se ti serve una Matrice a 4 dimensioni la usi
e se è matematicamente scorretto non è vincolante.
Però ti faccio un esempio, visto che mi sembri ferrato in Matematica:
Nei campionamenti di sollecitazioni meccaniche la 4° dimensione
poò essere utilizzata per inserire dati sul tipo di Filtro Temporale
applicato al campionamento stesso in quel momento, questo permette
di ricostruire il segnale tramite analisi di FFT in maniera
corretta.I filtri nel Tempo si usano per eliminare frequenze di disturbo
che possono alterare il segnale Principale dovute a risonanze, ma per
ricostruirlo
correttamente devi sapere in un dato tempo che tipo di filtraggio
stai effettuando.
E' solo un esempio, ma ci soo altre applicazioni più "alimentari"
Filosofia di MATEMATICA.........!!!
Alessandro.


 Dim Impiegato(1 to 100) as Anagrafica
Sono perfettamente d'accordo con te.
E' molto puù comodo un array di tipi che un array pluridimensionale.
Anche per vari motivi pratici.
Io ad esempio gli array bidimensionali li gestisco così:
' Simulazione di un array Valore(1 To n, 1 to m)
Type TRiga()
    Riga(1 to m) as QuelloCheVuoi
End Type
Dim Colonna() as TRiga
Redim Colonna(1 to n)
Valore = Colonna(n).Riga(m)
Vantaggi:
- mi sembra pià leggibile.
- prova a ridimensionare la 1^ dimensione di Valore(n,m)!
  Non si può, mentre è semplicissimo aggiungere due colonne così:
    Redim Colonna(1 To n + 2)
Ciao

 Qual'è la differenza tra questo e una matrice bidimensionale? [...]
E' possibile implementare la struttura matriciale in modi diversi: come
indichi tu, come matrici vere e proprie, come insiemi di oggetti...
Come al solito, l'uso di un metodo di rappresentazione piuttosto che un
altro dipende dalle tre regole fondamentali della programmazione:
1) Cui prodest?
2) Va?
3) Se questo listato lo leggesse mio cugino che ha appena imparato a
programmare e non sa nulla di questo progetto, ci capirebbe qualcosa? e
ancor meglio: saprebbe modificarlo velocemente e senza errori?
1) E latino e significa più o meno: "a chi giova?" ma potrebbe, in questo
caso, essere tradotta così: "perché mai devo perdere tempo a definire due
classi o un vettore UDT per rappresentare una misera matrice 2x2 che mi
servirà solo per le prossime due righe scarse di codice e poi mai più in
tutto il progetto, anzi in tutta la mia carriera informatica?"
2) E' italiano e significa proprio: "va?" "funziona?" "Marcia?" "fa quello
che deve fare e lo fa bene?" oppure "è meglio che io faccia una pausa caffè
ogni volta che deve calcolare qualche dato?" e così via...
3) No comment
Così a naso... se dovessi rappresentare una serie di appuntamenti in un
calendario userei una collection di oggetti "day", se dovessi rappresentare
le posizioni dei pezzi in una scacchiera userei qualcosa tipo:
Enum roxPezzi
    CasellaVuota
    Pedone
    Torre
    ...
End Enum
Type roxColonna
    Colonna(7) as roxPezzi
End Type
...
Dim Riga(7) as roxColonna
...
Riga(2).Colonna(5) = Alfiere
Se dovessi infine effettuare delle operazioni di calcolo algebrico
matriciale tornerei alla cara vecchia scomoda notazione MyMatrix(i,j)
Eccetera eccetera eccetera
Ciao,
Carlo.