/* esMatriciStampa.cpp

 Scrivere una funzione che stampi il contenuto di una matrice
 passata come argomento.

*********************************************************/

#include <iostream>
using namespace std;

// stampa1: stampa tutti gli elementi della matrice su un'unica riga
void stampa1(int* mat, int r, int c) {
   for (int i = 0; i < r*c; i++)       
         cout<< mat[i] <<' ';      
}

// stampa2: stampa gli elementi della matrice riga per riga, utilizzando l'aritmetica dei puntatori
void stampa2(int* mat, int r, int c) {
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++)
			cout << *(mat + i*c + j) << ' ';
		cout << endl;
	}
}

// stampa3: stampa gli elementi della matrice riga per riga, usando l'operatore []
void stampa3(int* mat, int r, int c) {
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++)
			cout << mat[i*c + j] << ' ';
		cout << endl;
	}
}



int main(){ 
   
	int  vett[6] = { 1, 2, 3, 4, 5, 6 };

	int M1[2][3] = { 1, 2, 3, 4, 5, 6 };  // NB: In memoria, vett ed M1 appaiono identiche, poiche'
	                                      //     le righe di M1 sono memorizzate una di seguito all'altra.

	int M2[3][2] = { 11, 22, 33, 44, 55, 66 };

	cout << endl<<"Stampa di M1, su singola riga" << endl ;
	stampa1( &M1[0][0], 2, 3);

	cout << endl << "Stampa di M1, riga per riga" << endl;
	stampa2( &M1[0][0], 2, 3);

	cout << endl << "Stampa di M2, riga per riga" << endl;
	stampa3( &M2[0][0], 3, 2);
   
    return 0;
}
