👤

Buna! Ma puteti ajuta cu implementarea functiei pentru rotirea matricei?
Enuntul este urmatorul:

Se dă o matrice pătratică a[n][n] cu elemente formate din caractere din alfabetul latin.
Să se rotească elementele matricei în sens trigonometric, folosind spaţiu suplimentar
de memorie constant.


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 pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile prezentate v-au fost utile. Dacă aveți întrebări suplimentare sau nevoie de ajutor, vă rugăm să ne contactați cu încredere. Așteptăm cu drag să reveniți și nu uitați să ne salvați în lista dumneavoastră de favorite!


En Studentsy: Alte intrebari