Advertisement
STANAANDREY

IMPO:mat_pat2

Jun 24th, 2019
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.69 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void display(int n,int m,int a[100][100])
  5. {
  6.     for (int i=0; i<n; i++)
  7.     {
  8.         for (int j=0; j<m; j++)
  9.             cout<<a[i][j]<<' ';
  10.         cout<<endl;
  11.     }
  12. }
  13.  
  14. namespace spin
  15. {
  16. void spinby90_clockwise (int n,int m,int a[100][100])
  17. {
  18.     int aux[100][100];
  19.     for (int i=0; i<n; i++)
  20.         for (int j=0; j<m; j++)
  21.             aux[j][n-i-1]=a[i][j];//n-i+1 pt index=1
  22.     display(n,m,aux);
  23. }
  24.  
  25. void spinby180 (int n,int m,int a[100][100])
  26. {
  27.     int aux[100][100];
  28.     for (int i=0; i<n; i++)
  29.         for (int j=0; j<m; j++)
  30.             aux[i][j]=a[n-i-1][m-j-1];
  31.     display(n,m,aux);
  32. }
  33.  
  34. void spinby270_clocwise(int n,int m,int a[100][100])
  35. {
  36.     int aux[100][100];
  37.     for (int i=0; i<n; i++)
  38.         for (int j=0; j<m; j++)
  39.             aux[m-j-1][i]=a[i][j];
  40.     display(n,m,aux);
  41. }
  42. }
  43.  
  44. void spiral(int N,int M,int a[100][100])
  45. {
  46.     int celule_parcurse=0,col_sf=M-1,col_inc=0,line_inc=0,line_sf=N-1;
  47.     while (celule_parcurse < N * M)
  48.     {
  49.         // Partea de sus
  50.         for (int j = col_inc; j <= col_sf; ++j)
  51.         {
  52.             cout<<a[line_inc][j]<<' ';
  53.             ++celule_parcurse;
  54.         }
  55.  
  56.         // Partea din dreapta
  57.         // incepem de pe linia urmatoare pentru ca am inclus deja primul element
  58.         // din dreapta in partea de sus
  59.         for (int i = line_inc + 1; i <= line_sf; ++i)
  60.         {
  61.             cout<<a[i][col_sf]<<' ';
  62.             ++celule_parcurse;
  63.         }
  64.  
  65.         // Partea de jos
  66.         // incepem de la col_sf - 1 deoarece deja am parcurs elementul
  67.         // de la col_sf cand am parcurs partea din dreapta
  68.         for (int j = col_sf - 1; j >= col_inc; --j)
  69.         {
  70.             cout<<a[line_sf][j]<<' ';
  71.             ++celule_parcurse;
  72.         }
  73.  
  74.         // Partea din stanga
  75.         // setam inceputul si sfarsitul din for pentru a nu parcurge elementele
  76.         // deja parcurse
  77.         for (int i = line_sf - 1; i > line_inc; --i)
  78.         {
  79.             cout<<a[i][col_inc]<<' ';
  80.             ++celule_parcurse;
  81.         }
  82.  
  83.         ++line_inc;
  84.         ++col_inc;
  85.         --line_sf;
  86.         --col_sf;
  87.     }
  88.  
  89. }
  90.  
  91. int main()
  92. {
  93.  
  94.     int a[100][100],n,m;
  95.     cin>>n>>m;
  96.     for (int i=0; i<n; i++)
  97.         for (int j=0; j<m; j++)
  98.             cin>>a[i][j];
  99.     cout<<"Matrice initiala:"<<endl;
  100.     display(n,m,a);
  101.     cout<<endl<<"Matrice rotita cu 90de grade:"<<endl;
  102.     spin::spinby90_clockwise(n,m,a);//*/
  103.     cout<<"rotita cu 180"<<endl<<endl;
  104.     spin::spinby180(n,m,a);
  105.     cout<<endl<<"Matricea rotita cu 270 de grade:"<<endl;
  106.     spin::spinby270_clocwise(n,m,a);
  107.     cout<<"parcurgerea in spriala:"<<endl;
  108.    spiral(n,m,a);
  109.     return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement