Ciao a tutti, sto scrivendo un esercizio x l'esame di informatica.
Devo stampare una matrice. Ho scritto questa funzione:
//DIMC, DIMR sono costanti ed indicano il numero colonne e righe della matrice
void print(int a[][DIMC]){
for(int i=0; i<DIMR; i++){
for(int j=0; j<DIMC; j++)
cout << "\t"<<a[i][j];
cout << endl;
}
}
Se nel codice scrivo:
int m[DIMR][DIMC];
read(m); // è una funzione che riempie la matrice di interi a random
print(m);
Va tutto bene, la matrice viene compilata con i numeri e visualizzata a schermo.
Pero' se scrivo
int** m2 = select(m, 2, 2);
/* prende una sottomatrice della matrice m passata come parametro di dimensione 2x2, partendo dall'elemento in posizione 0,0 */
read(m2);
print(m2);
funzione select:
int** select(int m[][DIMC], int nr, int nc){ //nr, nc sono numero righe e numero colonne della nuova matrice
int** s = new int*[nr];
for(int i = 0; i<DIMR; i++)
s[i]= new int[DIMC];
for(int r=0; r<nr; r++){
for(int c=0; c<nc; c++){
s[r][c] = m[r][c];
//cout << "\t" << m[r][c];
}
cout << endl;
}
return s;
}
Quando provo a compilare con g++ ottengo:
bog@bog-1215P:~$ g++ ese.cc
ese.cc: In function ‘int main(int, char**)’:
ese.cc:42:10: error: cannot convert ‘int**’ to ‘int (*)[5]’ for argument ‘1’ to ‘void print(int (*)[5])’
Qualcuno puo' spiegarmi il problema?
Allego sotto il listato completo:
#include <iostream>
#include <stdlib.h>
using namespace std;
const int DIMR = 5;
const int DIMC = 5;
void read(int a[][DIMC]){
for (int i = 0; i<DIMR; i++){
for (int j=0; j<DIMC; j++){
//cout << "Elemento ["<<i<<"]["<<j<<"]: ";
//cin >> a[i][j];
a[i][j] = rand() % 5;
}
}
}
void print(int a[][DIMC]){
for(int i=0; i<DIMR; i++){
for(int j=0; j<DIMC; j++)
cout << "\t"<<a[i][j];
cout << endl;
}
}
int** select(int m[][DIMC], int nr, int nc){
int** s = new int*[nr];
for(int i = 0; i<DIMR; i++)
s[i]= new int[DIMC];
for(int r=0; r<nr; r++){
for(int c=0; c<nc; c++){
s[r][c] = m[r][c];
cout << "\t" << m[r][c];
}
cout << endl;
}
return s;
}
int main (int argc, char *argv[]){
int m[DIMR][DIMC];
read(m);
print(m);
int** m2 = select(m, 2, 2);
//read(m2);
print(m2);
}
Grazie mille!!