Răspuns :
Răspuns:
#include <iostream>
using namespace std;
int n,i,j,iss,jss,idj,jdj, k,m;
char a[40][40], ch, b[40],c[40];
int main()
{
cout << "n= !"; cin >> n;
cout << "introdu " << n << " linii cu " << n << " caractere pe linie separate prin spatiu" << endl;
for (i=0; i<n; ++i)
{
for (j=0; j<n; ++j)
{
cin >> ch;
a[i][j]=ch;
}
}
iss=0; jss=0; idj=n-1; jdj=n-1;
while (jss<jdj)
{
k=0;
for (i=iss+1; i<=idj; ++i) b[k++]=a[i][jss];
m=0;
for (j=jss; j<jdj; ++j) c[m++]=a[iss][j];
m=0;
for (i=idj; i>iss; --i) a[i][jss]=c[m++];
m=0;
for (i=iss; i<idj; ++i) c[m++]=a[i][jdj];
m=0;
for (j=jss; j<jdj; ++j) a[iss][j]=c[m++];
m=0;
for (j=jss+1; j<=jdj; ++j) c[m++]=a[idj][j];
m=0;
for (i=idj-1; i>=iss; i--) a[i][jdj]=c[m++];
k=0;
for (j=jss+1; j<=jdj; ++j) a[idj][j]=b[k++];
++iss; ++jss; --idj; --jdj;
}
cout << "\n \n";
for (i=0; i<n; ++i)
{
for (j=0; j<n; ++j)
cout << a[i][j] << " ";
cout << "\n";
}
return 0;
}
Explicație:
PARCĂ E BINE...
am folosit doi vectori liniari auxiliari b şi c unde pun elementele matricei pentru a nu le perde la rotire. Variabilele iss, jss, idj, jdj folosite pentru idicii colţului stânga sus şi dreapta jos a chenarului ce se roteşte. Se putea folosi numai un vector auxiliar dar mi+a părut complicată relaţia dintre indicii elementelor de unde iau şi unde pun că să obţinem rotirea.