PDA

Visualizza la versione completa : [C++] trasposizione matrice a blocchi 2x2


MATTEO1994
14-03-2015, 00:37
In un esercizio mi viene richiesto di trasporre una matrice rispetto alla sua diagonale principale in blocchi da 2x2. Ho pensato in primis di creare una matrice di appoggio in modo da copiare solo i blocchi che mi servono. Qui c' è il problema perchè non riesco a capire perchè la sottomatrice non
viene copiata correttamente...grazie in anticipo


#include <iostream>
using namespace std;
void leggimatrice(int dim,int *mat);
void stampa(int dim,int *mat);
void trasposta(int dim,int *mat);
int main()
{
int dim;
do
{
cout<<"inserisci dimensione della matrice quadrata ";
cin>>dim;
} while(dim<=0 || dim%2!=0 );
int mat[dim][dim];
leggimatrice(dim,&mat[0][0]);
stampa(dim,&mat[0][0]);
trasposta(dim,&mat[0][0]);
}
void leggimatrice(int dim,int *mat)
{
for(int i=0;i<dim;i++)
{
for(int j=0;j<dim;j++)
{
cout<<"inserisci elemento ["<<i+1<<"]["<<j+1<<"] ";
cin>>*(mat+i*dim+j);
}
}
}
void stampa(int dim,int *mat)
{
for(int i=0;i<dim;i++)
{
for(int j=0;j<dim;j++)
{
cout<<*(mat+i*dim+j)<<" ";
}
cout<<endl;
}
}
void trasposta(int dim,int *mat)
{
int k=0,l=0;
int mat2[2][2];
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
mat2[i][j]=0;
}
}
for(int i=0;i<dim-3;i++)
{

for(int j=2;j<dim-1;j++)
{

mat2[k][l]=*(mat+i*dim+j);
l++;
}
k++;
l=0;
}
}

oregon
14-03-2015, 09:38
Ci dici come hai impostato le due for per la copia della sottomatrice?

MATTEO1994
14-03-2015, 09:45
ho considerato come esempio una matrice 4x4 in modo tale che i due for mi dovrebbero settare la sottomatrice in alto a destra

oregon
14-03-2015, 10:03
Ma il programma è generico ... se l'utente imposta 100 per dim (matrice 100x100) cosa succede?

MATTEO1994
14-03-2015, 10:15
Si in effetti se ne cade in questo modo l' idea. va bene grazie

Loading