
Originariamente inviata da
toni123
infatti mi sono accorto...
la matrice di destinazione è della stessa grandezza di quella originale( sempre [3][3]). quindi la matrice deve proprio "ruotare su se stessa".
Come posso fare?
codice:
#include <stdio.h>
#define MAX 5
#define max(i) (MAX-(i)-1)
void stampa_matrice(int mat[MAX][MAX]) {
int i, j;
printf("\n################################################################################");
for(i = 0; i < MAX; ++i) {
printf("\n");
for(j = 0; j < MAX; ++j) {
printf("%4d", mat[i][j]);
}
}
printf("\n################################################################################");
}
int main(void) {
int a[MAX][MAX];
int b[MAX][MAX];
int i, j, *ptmp, itmp;
//inizializzazione matrice
ptmp = (int *)a;
for(i = 0; i < MAX*MAX; ++i) {
*(ptmp+i) = i+1;
}
//rotazione in nuova matrice
stampa_matrice(a);
for(i = 0; i < MAX; ++i) {
for(j = 0; j < MAX; j++) {
b[j][max(i)] = a[i][j];
}
}
stampa_matrice(b);
//rotazione in-place
stampa_matrice(a);
for(i = 0; i < MAX - 1; ++i) {
for(j = i; j < max(i); ++j) {
itmp = a[i][j];
a[i][j] = a[max(j)][i];
a[max(j)][i] = a[max(i)][max(j)];
a[max(i)][max(j)] = a[j][max(i)];
a[j][max(i)] = itmp;
}
}
stampa_matrice(a);
return 0;
}