Ragazzi vi chiedo aiuto in questo esercizio: il programma principale legge la matrice e la funzione la trasforma nella trasposta che viene poi stampata dal main.
Il problema sopraggiunge solo nel caso in cui il numero di RIGHE è più grande del numero di COLONNE (non viceversa stranamente), il dev c++ mi stampa una riga in più che non dovrebbe esserci, qualcuno sa dirmi perchè?


#include <iostream>
#include <cmath>
using namespace std;
void TRASPOSTA(float M[][20],int &n, int &m)
{
int i,j,h;
h=n;
float temp;
if(n==m)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(i!=j && j-i>i-j)
{
temp=M[i][j];
M[i][j]=M[j][i];
M[j][i]=temp;
}
}
}
}
if(n>m)
{
n=m;
m=h;

for (i=1;i<n;i++)
{
for (j=1;j<m;j++)
{
if(i!=j && j-i<i-j)
{
temp=M[i][j];
M[i][j]=M[j][i];
M[j][i]=temp;
}}
}
n--;

}


if(n<m)
{
n=m;
m=h;

for (i=1;i<=n;i++)
{
for (j=1;j<=m;j++)
{
if(i!=j && j-i<i-j)
{
temp=M[i][j];
M[i][j]=M[j][i];
M[j][i]=temp;
}}
}

}
}












int main()
{
float M[10][20];
int i,j,n,m;
cout<<"Da quante righe e\' composta la matrice? (massimo 10) ";
cin>>n;
cout<<"\nDa quante colonne e\' composta la matrice? (massimo 20) ";
cin>>m;
if(n>0 && m>0 && n<11 && m<21)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
cout<<"\nDammi l'elemento di colonna "<<j <<" di riga "<<i <<" ";
cin>>M[i][j];
}
}

TRASPOSTA(M,n,m);
cout<<"\nLa matrice trasposta e\' ";
if(n>=m)
{

for(i=1;i<=n;i++)
{
cout<<"\n";
for(j=1;j<=m;j++)
{
cout<<" "<<M[i][j];

}
}
}
else
{
for(i=1;i<n;i++)
{
cout<<"\n";
for(j=1;j<m;j++)
{
cout<<" "<<M[i][j];

}
}

}

}
else
{
cout<<"\nNumero di righe e/o colonne non valido.";
}



cout<<"\n";
system("pause");
return 0;


}