PDA

View Full Version : [C++] problema: array bidimensionali


andreaposse
24-08-2010, 13:36
Salve a tutti. Ho bisogno di creare una matrice 5 x 5 in c++ però ci sono dei problemi :

int a[5*5];
//inizializzazione
for(int i=0;i<5;i++)
for(int y=0;y<5;y++)
a[i*y]=0;


------------
a questo punto se io cerco di dare un valore alla riga 3 e colonna 2: es

a[3*2]=4;

la matrice appare così:

0 0 0 0 0
0 0 0 0 0
0 0 0 4 0
0 0 4 0 0
0 0 0 0 0
Come mai vengono inizializzati due valori della matrice anziche uno?
Grazie per l'aiuto. Andrea

GioVesas
24-08-2010, 13:51
Perche' non definisci semplicemente
int a[5][5]; ??
e codifichi di conseguenza?

andreaposse
25-08-2010, 10:53
Grazie mille per l'aiuto.

Sì così funziona.
Il problema però è nel momento in cui voglio definire una matrice dentro una classe, dove per inizializzarla utilizzo :

class ciao {
int *pun;
public:
ciao(int =1)
};

ciao::ciao(int n) {
pun=new int[n*n]; // non posso utilizzare : pun=new int[n][n];
}

----------------
quindi al momento in cui voglio cambiare un valore della matrice si crea il problema di prima : es -> pun[2*3]=5; non lo posso fare perche mi cambia altri valori!

shinya
25-08-2010, 11:11
Ma tu vuoi gestire la matrice come array o come array-di-array?
Perchè se vuoi solo l'array dovrai fare qualcosa tipo:

int a[N*N]; // può essere pure dinamico... basta sapere poi quanto è N
...
int at(int i, int j) {
return a[i * N + j];
}

...altrimenti...

int **a;
...
a = new int[N];
for (int i = 0; i < N; ++i) a[i] = new int[N];
...
int at(int i, int j) {
return a[i][j];
}

Scusa eventuali errori sintattici, ho scritto direttamente sul forum.

andreaposse
26-08-2010, 01:41
perfetto ora funziona!! Ho utilizzato il primo modo:

class ciao {
int **pun;
public:
ciao(int =1)
};

ciao::ciao(int n) {
pun=new int*[n];
for (int i=0; i<n;i++)
pun[i] = new int[n];
}

--------

Grazie mille per l'aiuto... a presto... Andrea