fork download
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <cmath>
  4. using namespace std;
  5.  
  6. class Matrix
  7. {
  8. private:
  9. size_t Y,X;
  10. int *T;
  11. protected:
  12. int width()const;
  13. public:
  14. Matrix():Y(0),X(0),T(0) {}
  15. Matrix(size_t Y,size_t X,int V=0):Y(Y),X(X)
  16. {
  17. size_t S=X*Y;
  18. T=new int[S];
  19. for(size_t i=0;i<S;++i) T[i]=V;
  20. }
  21. size_t Rows()const { return Y; }
  22. size_t Cols()const { return X; }
  23. ostream &out(ostream &s)const;
  24. istream &inp(istream &s);
  25. const int *operator[](size_t y)const { return T+y*X; }
  26. int *operator[](size_t y) { return T+y*X; }
  27. };
  28. inline ostream &operator<<(ostream &s,const Matrix &m) { return m.out(s); }
  29. inline istream &operator>>(istream &s,Matrix &m) { return m.inp(s); }
  30.  
  31. int Matrix::width()const
  32. {
  33. size_t S=Y*X;
  34. if(S<=0) return 1;
  35. int min=T[0],max=min;
  36. for(size_t i=1;i<S;++i) if(min>T[i]) min=T[i]; else if(max<T[i]) max=T[i];
  37. max=log10(abs(max))+(max<0)+1;
  38. min=log10(abs(min))+(min<0)+1;
  39. return min>max?min:max;
  40. }
  41.  
  42. ostream &Matrix::out(ostream &s)const
  43. {
  44. size_t S=Y*X;
  45. int w=1+width();
  46. for(size_t y=0,i=0;y<Y;++y,s<<endl)
  47. {
  48. for(size_t x=0;x<X;++x,++i)
  49. {
  50. if(&s==&cout) s<<setw(w-!x);
  51. s<<T[i];
  52. if(&s!=&cout) s<<'\t';
  53. }
  54. }
  55. return s;
  56. }
  57.  
  58. istream &Matrix::inp(istream &s)
  59. {
  60. size_t S=Y*X;
  61. for(size_t y=0,i=0;y<S;y+=X)
  62. {
  63. for(size_t x=0;x<X;++x,++i)
  64. {
  65. if(&s==&cin) cout<<"Matrix["<<y<<"]["<<x<<"]= ";
  66. s>>T[i];
  67. }
  68. }
  69. return s;
  70. }
  71.  
  72. int main()
  73. {
  74. Matrix m(2,2);
  75. cout<<"Podaj macierz:"<<endl;
  76. cin>>m;
  77. cout<<endl<<m<<endl;
  78. for(size_t y=0;y<m.Rows();++y) for(size_t x=0;x<m.Rows();++x) m[y][x]=(y+2)*(x+3);
  79. cout<<endl<<m<<endl;
  80. for(size_t y=0;y<m.Rows();++y) for(size_t x=0;x<m.Rows();++x) m[y][x]=(y-5)*(x+7);
  81. cout<<endl<<m<<endl;
  82. return 0;
  83. }
Success #stdin #stdout 0s 3036KB
stdin
-77777
2
5
-999
stdout
Podaj macierz:
Matrix[0][0]= Matrix[0][1]= Matrix[2][0]= Matrix[2][1]= 
-77777      2
     5   -999


 6  8
 9 12


-35 -40
-28 -32