PDA

Visualizza la versione completa : [C++] Matrice di dimensioni variabili


CARNIC
19-11-2006, 11:07
Ciao a tutti,

Ho bisogno di gestire in C++ una matrice quadrata di dimensioni non note a priori, esempio

char mat [N] [N];

Ho scritto qualcosa del genere

#include <iostream>
using namespace std

int main()
{
int N; // dimensione della matrice NxN
char mat[N][N];
int i, j; // Contatori cicli for

cout << 'Definire la dimensione della matrice NxN ';
cin >> N;
cout << endl;

cout << 'Popolare la matrice NxN ' << endl;

for (i=0; i<N; i++)
{
for (j=0; j<N; j++)
cin << mat[i][j];
cout << endl;
}
cout << endl;

}

Inutile dire che ho un sacco di errori in compilazione e che il programma non funge :dhò: .
Essendo un apprendista, qualcuno più esperto può aiutarmi :smack: ?

Grazie e ciao a tutti

oregon
19-11-2006, 11:09
Devi usare l'allocazione dinamica della matrice.

CARNIC
19-11-2006, 11:12
Grazie per la risposta velocissima, ma, come ti ho detto, sono un neofita.
Mi sapresti fare un esempio, sulla base del mio codice ?
Spero di non chiedere troppo.

Ciao e grazie ancora.

oregon
19-11-2006, 11:23
Okay ... questo e' un esempio con qualche commento ...



#include <iostream>
using namespace std; // e' necessario il ; finale

int main()
{
int N;
char **mat; // Equivale alla matrice a due dimensioni
int i, j;

cout << "Definire la dimensione della matrice NxN "; // Le virgolette devono essere doppie
cin >> N;
cout << endl;

// Allocazione dinamica della matrice
mat = new char*[N];
for(i=0; i<N; i++)
mat[i] = new char[N];

// Riempimento matrice
cout << "Popolare la matrice NxN " << endl; // Le virgolette devono essere doppie

for (i=0; i<N; i++)
{
for (j=0; j<N; j++)
cin >> mat[i][j]; // La cin deve essere usare l'operatore >>

cout << endl;
}

cout << endl;

return 0; // La main deve restituire un valore
}

CARNIC
19-11-2006, 11:55
Ciao,

Sei stato molto chiaro e ti ringrazio di cuore.

Ti chiedo ancora una cosa, che, poi, implicitamente dovrebbe dare risposta ad altri miei dubbi:
"Posso usare il ciclo per popolare la matrice in una funzione separata ?"
In questo caso come intesto la funzione ? Cioè
void popolaMatrice(etc..etc..);

Inoltre, prima del termine dell'esecuzione del programma debbo deallocare la matrice ?

Grazie ancora
Gaetano

oregon
19-11-2006, 12:40
Originariamente inviato da CARNIC
"Posso usare il ciclo per popolare la matrice in una funzione separata ?"
In questo caso come intesto la funzione ? Cioè
void popolaMatrice(etc..etc..);

Inoltre, prima del termine dell'esecuzione del programma debbo deallocare la matrice ?


Sì ... sì ...

Il codice diventa ...



void PopolaMatrice(char **mat, int ord)
{
for(int i=0; i<ord; i++)
{
for(int j=0; j<ord; j++)
cin >> mat[i][j];

cout << endl;
}

cout << endl;
}

int main()
{
int N;
char **mat;

cout << "Definire la dimensione della matrice NxN ";
cin >> N;
cout << endl;

mat = new char*[N];
for(int i=0; i<N; i++)
mat[i] = new char[N];

PopolaMatrice(mat, N);

for(int i=0; i<N; i++)
delete [] mat[i];
delete [] mat;

return 0;
}


Di nulla ...

CARNIC
19-11-2006, 12:49
E' possibile, poi, usare la matrice inizializzata nella funzione, in altre funzioni ?

Ciao e grazie ancora.

oregon
19-11-2006, 13:01
Certo ...

CARNIC
19-11-2006, 17:08
Ciao Oregon,

ho lavorato al mio progettino ampliandolo e rifinendolo, grazie alle tue dritte.

Ora diciamo che oltre alla matrice di dimensioni NxN, di cui abbiamo già parlato, io ho un'altra matrice molto semplice 2x2.
Voglio:
1) Verificare se qualche elemento della matrice 2x2 appartiene anche a NxN
2) Tenere memoria della posizione di questo elemento (le coordinate)

Per quanto riguarda il punto 1) non ho difficoltà; riesco a scrivere il codice per cercare le ricorrenze.

Il guaio è al punto 2). Poichè vorrei visualizzare solo alla fine tutte le coppie di cordinate non so cosa usare e soprattutto come usarlo.

Puoi aiutarmi ancora ?

Grazie

oregon
19-11-2006, 17:33
Se sai scrivere il punto 1) (di cui puoi mostrare il codice), e' alla tua portata anche il punto 2) perche' si tratta di memorizzare le coordinata (riga, colonna) degli elementi trovati ...

Ma partiamo dal punto 1) ... cosa hai scritto ?

Loading