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.
Vă mulțumim că ați ales să vizitați platforma noastră dedicată Informatică. Sperăm că informațiile disponibile v-au fost utile. Dacă aveți întrebări suplimentare sau aveți nevoie de sprijin, nu ezitați să ne contactați. Vă așteptăm cu drag și data viitoare! Nu uitați să adăugați site-ul nostru la favorite pentru acces rapid.