Visualizza la versione completa : [C++] Matrice di dimensioni variabili
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
Devi usare l'allocazione dinamica della matrice.
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.
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
}
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
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 ...
E' possibile, poi, usare la matrice inizializzata nella funzione, in altre funzioni ?
Ciao e grazie ancora.
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
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 ?