Ti ho scritto degli esempi in C relativamente ad una matrice quadrata MxM; però per gli assi orizz. e vert. tali algoritmi vanno bene per qualsiasi tipo di matrice, mentre per gli altri due assi no perchè posseduti solo da matrice quadrata.
1)orizz.
int i = 0;//indice della prima riga
int j = M-1; //indice dell'ultima riga
int k;//indice della prima colonna
for(k=0;k<M;k++){
while(i<=j){
assegni un valore a mat[k];
mat[j][k]=mat[k];
i++;
j--;
}
}
2)vert.
int i = 0;//indice della prima colonna
int j = M-1; //indice dell'ultima colonna
int k;//indice della prima riga
for(k=0;k<M;k++){
while(i<=j){
assegni un valore a mat[k];
mat[k][j]=mat[k];
i++;
j--;
}
}
3)diag. principale \
//i è indice di riga
//j è indice di colonna
for(int i=0;i<M;i++){
for(int j=0;j<i;j++){
assegni valore a mat[j];
mat[j]=mat[j];
}
assegni valore a mat;
}
4)diag. secondaria /
//i è indice di riga
//j è indice di colonna
for(int i=0;i<M;i++){
for(int j=0;j<(M-i);j++){
assegni valore a mat[j];
mat[M-1-j][M-1-i]=mat[i][j];
}
}
spero di non aver fatto errori, comunque questi sono indicativamente i cicli per la gestione della simmetria di matrici, ovviamente poi adatti il codice a quello che devi fare te