Dovresti fare qualcosa del genere:
codice:
#include<stdio.h>
void ruota(char **mat, int n, int verso)
{
int **tmp; // matrice ausiliaria
int i, j;
tmp = malloc(n*sizeof(char*));
for (i = 0; i < n; i++)
tmp[i] = malloc(n*sizeof(char));
for (i=0; i<n; i++)
for (j=0; j<n; j++)
{
if (verso == 1) tmp[i][j] = mat[n-j-1][i];
if (verso == -1) tmp[i][j] = mat[j][n-i-1];
}
for (i=0; i<n; i++)
for (j=0; j<n; j++)
mat[i][j] = tmp[i][j]; // copio tmp nella mat
for (i = 0; i < n; i++) // dealloco la matrice ausiliare
free(tmp[i]);
free(tmp);
}
void stampa(char **mat, int n)
{
int i, j;
for (i=0; i<n; i++)
{ for (j=0; j<n; j++)
printf("%c ", mat[i][j]);
printf("\n");
}
}
main()
{
int i, j, n;
char **mat;
printf("Dimensione della matrice: ");
scanf("%d",&n);
mat = malloc(n*sizeof(char*));
for (i = 0; i < n; i++)
mat[i] = malloc(n*sizeof(char));
char c = 'a';
for (i=0; i<n; i++) {
for (j=0; j<n; j++){
mat[i][j] = c; // riempio la matrice con le lettere dalla 'a' alla a + n*n
c++; // naturalmente tu la riempi come ti pare
}
}
printf("La matrice: \n");
stampa(mat, n);
int verso;
printf("\n Per ruotare la matrice a destra digitare 1 a sinistra -1. \t");
scanf("%d", &verso);
while (verso != 1 && verso!= -1)
{
printf("Devi digitare soltanto 1 o -1. \t");
scanf("%d", &verso);
}
printf("Ruoto la matrice di 90 gradi a ");
if (verso == 1) printf("destra\n");
else printf("sinistra\n");
ruota(mat, n, verso);
stampa(mat, n);
}