Linux, Stampa matrice in C++

di il
1 risposte

Linux, Stampa matrice in C++

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!!

1 Risposte

  • Re: Linux, Stampa matrice in C++

    Ho risolto:

    dovrei creare 2 funzioni di stampa!
    una per
    int m[RIG][COL];

    con firma
    void print(int m[][COL])
    una per la sotto-matrice creata dinamicamente
    int **m2 = split(m, 2,2,2,2);

    con la firma
    void print(int **m)
    Bom, ora compila...
Devi accedere o registrarti per scrivere nel forum
1 risposte