PDA

View Full Version : [c++] Definizione di matrici


LetBloodline
28-09-2007, 14:33
Scusate il disturbo ma mi trovo a dover istanziare una matrice e nn ci riesco se devo usare delle variabili come grandezza

Posso per esempio scrivere
double tabella[10][10];

oppure
double (*tabella)[24] = new double[durata][24]

ma mi servirebbe inizializzare una tabella con una dimensione pari alla variabile durata e l'altra pari a un'altra variabile. Come posso fare?

andbin
28-09-2007, 14:51
ma mi servirebbe inizializzare una tabella con una dimensione pari alla variabile durata e l'altra pari a un'altra variabile. Come posso fare?Così dovrebbe funzionare:
double (*tabella)[m] = new double[durata][m];
'm' è ovviamente un altra variabile.

LetBloodline
28-09-2007, 15:34
mi dice che si aspetta una espressione costante se provo come mi hai detto. Non vuole la 'm' prima dell'uguale =/

andbin
28-09-2007, 15:46
mi dice che si aspetta una espressione costante se provo come mi hai detto. Non vuole la 'm' prima dell'uguale =/In effetti ho fatto una stupidata .... prima di postare l'ho provato con il g++ su Linux e me lo dava per buono. Poi ho provato adesso con VC++ e non va e ho riprovato con g++ specificando, stavolta, -pedantic e mi dà un warning: ISO C++ forbids variable-size array

Che dire .... non si può fare così.

LetBloodline
01-10-2007, 07:37
a parte una struttura non si può fare in altro modo? ç_ç

andbin
01-10-2007, 08:36
a parte una struttura non si può fare in altro modo? ç_çSì, facendolo come "un array di array", tramite puntatori.
double **matrice;

matrice = new double*[num_righe];

for (i = 0; i < num_righe; i++)
matrice[i] = new double[num_colonne];
A questo punto l'espressione matrice[r][c] rappresenta un double. Questa tecnica comunque non crea un array vero e proprio come inteso dal C/C++ ("un insieme di elementi contigui in memoria"). È basata su puntatori e non puoi ovviamente risalire alle dimensioni tramite 'matrice'.

Torav
01-10-2007, 09:29
se devi fare una matrice dinamica di, poniamo, m righe e n colonne puoi allocare un array unico di dimensioni m*n e poi per accedere al generico elemento della riga j e colonna i puoi fare:

matrice[m*j + n*i]

io ho sempre fatto così e anche all'uni l'hanno insegnato in questo modo, poi non so se è quello che serve a te :)

andbin
01-10-2007, 09:45
matrice[m*j + n*i]No, è matrice[j*n + i]

io ho sempre fatto così e anche all'uni l'hanno insegnato in questo modoAh beh..... :rolleyes:

Torav
01-10-2007, 18:30
ups ho scritto troppo veloce senza pensare e mi sono meritato la figuraccia :D

trallallero
02-10-2007, 14:44
se devi fare una matrice dinamica di, poniamo, m righe e n colonne puoi allocare un array unico di dimensioni m*n e poi per accedere al generico elemento della riga j e colonna i puoi fare:

matrice[m*j + n*i]

io ho sempre fatto così e anche all'uni l'hanno insegnato in questo modo, poi non so se è quello che serve a te :)

all´uni insegnano in questo (orrendo) modo ??? :eek:

della serie famolo strano :nono:

Torav
02-10-2007, 16:40
beh se hai presente come funziona la numerazione in una base qualsiasi (e se fai fisica è bene che tu lo sappia) allora è un metodo ottimo, veloce, intuitivo e non devi nemmeno impazzire a fare 2000 malloc e/o free!