#include "Matrix.h" #include #include #include #include #include #include using namespace std; class Matrix{ int **Ar; int n; int m; public: void obnul(); void zapol(int s); int dostyp(int &i, int & j); int output(int i, int j); void Create(); void first_column(int &imin, int &imax, int &jmin,int &i, int &k); void last_stroka(int&size, int&jmin, int&jmax, int&imax, int&j, int&k); void last_column(int &imax, int&imin, int&jmax,int&i, int&k); void first_line(int&size, int &jmax, int&jmin, int&imin, int&j, int&k); int size(); void prov(); ~Matrix(); /*Matrix(int a, int b);*/ int N = 0; Matrix(int i, int j); }; void Matrix:: Create() { Ar = new int*[n]; for (int z = 0; z < n; z++) Ar[z] = new int[m]; obnul(); }Matrix::Matrix (int i, int j) : n(i), m(j) { Create(); } Matrix::~Matrix () { for (int z = 0; z < m; z++) delete[] Ar[z]; delete[] Ar; } void Matrix::obnul(){ int N = (n*m); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) Ar[i][j] = 0; } } int Matrix::size(){ return N; } void Matrix::prov(){ if (N == 0) cout << " Матрица пустая\n"; } int Matrix::dostyp(int &i, int &j){ for (int a = 0; i < n; i++) { for (int b = 0; j < m; j++) if (i == a&&b == j) return Ar[a][b]; } } int Matrix::output(int i,int j) { //выход по 10 в строке последняя строка может быть не полная return Ar[i][j]; } void Matrix:: first_column( int &imin, int &imax, int &jmin,int &i, int &k){ for (i = imin; i <=imax; i++) //pervii stolbec { Ar[i][jmin] = k++; } jmin++; } void Matrix::zapol(int s){ s = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) this->Ar[i][j]=s++; } } void Matrix:: last_stroka(int&size,int&jmin, int&jmax, int&imax, int&j, int&k){ /*if ((size / 10) > 0){ jmax = 10; size = size - 10; } else jmax = size;*/ for (j = jmin; j <= jmax; j++) //posledniaia stroka { Ar[imax][j] = k++; } imax--; } void Matrix:: last_column( int &imax, int&imin, int&jmax, int&i, int&k){ for (i = imax; i >= imin; i--) //poslednii stolbec { Ar[i][jmax] = k++; } jmax--; } void Matrix::first_line(int&size, int &jmax, int&jmin, int&imin, int&j, int&k){ for (j = jmax; j >= jmin; j--) //pervaia stroka { Ar[imin][j] = k++; } imin++; } void main() { setlocale(0, ""); int n, m, col = 0, res = 0; cin >> n >> m; int size = (n*m); int jmin = 0, imin = 0, jmax=m-1, imax = n-1, i, k=0,j; Matrix A(n, m); if (n*m == 0) cout << "Матрица пустая\n"; else { A.obnul(); A.zapol(0); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cout << A.output(i, j)<<" "; col++; if (col % 10 == 0){ cout << endl; } } } int size = (n*m); do{ A.first_column(imin, imax, jmin, i, k); A.last_stroka(size, jmin, jmax, imax, j, k); A.last_column(imax, imin, jmax, i, k); A.first_line(size, jmax, jmin, imin, j, k); } while (k < (n*m)); col = 0; cout << endl; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cout << A.output(i, j)<<" "; col++; /*if (col % 10 == 0){ }*/ } cout << endl; } } system("pause"); }