#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
class Matrix
{
private:
size_t Y,X;
int *T;
protected:
int width()const;
public:
Matrix():Y(0),X(0),T(0) {}
Matrix(size_t Y,size_t X,int V=0):Y(Y),X(X)
{
size_t S=X*Y;
T=new int[S];
for(size_t i=0;i<S;++i) T[i]=V;
}
size_t Rows()const { return Y; }
size_t Cols()const { return X; }
ostream &out(ostream &s)const;
istream &inp(istream &s);
const int *operator[](size_t y)const { return T+y*X; }
int *operator[](size_t y) { return T+y*X; }
};
inline ostream &operator<<(ostream &s,const Matrix &m) { return m.out(s); }
inline istream &operator>>(istream &s,Matrix &m) { return m.inp(s); }
int Matrix::width()const
{
size_t S=Y*X;
if(S<=0) return 1;
int min=T[0],max=min;
for(size_t i=1;i<S;++i) if(min>T[i]) min=T[i]; else if(max<T[i]) max=T[i];
max=log10(abs(max))+(max<0)+1;
min=log10(abs(min))+(min<0)+1;
return min>max?min:max;
}
ostream &Matrix::out(ostream &s)const
{
size_t S=Y*X;
int w=1+width();
for(size_t y=0,i=0;y<Y;++y,s<<endl)
{
for(size_t x=0;x<X;++x,++i)
{
if(&s==&cout) s<<setw(w-!x);
s<<T[i];
if(&s!=&cout) s<<'\t';
}
}
return s;
}
istream &Matrix::inp(istream &s)
{
size_t S=Y*X;
for(size_t y=0,i=0;y<S;y+=X)
{
for(size_t x=0;x<X;++x,++i)
{
if(&s==&cin) cout<<"Matrix["<<y<<"]["<<x<<"]= ";
s>>T[i];
}
}
return s;
}
int main()
{
Matrix m(2,2);
cout<<"Podaj macierz:"<<endl;
cin>>m;
cout<<endl<<m<<endl;
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);
cout<<endl<<m<<endl;
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);
cout<<endl<<m<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNtYXRoPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgTWF0cml4CiAgewogICBwcml2YXRlOgogICBzaXplX3QgWSxYOwogICBpbnQgKlQ7CiAgIHByb3RlY3RlZDoKICAgaW50IHdpZHRoKCljb25zdDsKICAgcHVibGljOgogICBNYXRyaXgoKTpZKDApLFgoMCksVCgwKSB7fQogICBNYXRyaXgoc2l6ZV90IFksc2l6ZV90IFgsaW50IFY9MCk6WShZKSxYKFgpCiAgICAgewogICAgICBzaXplX3QgUz1YKlk7CiAgICAgIFQ9bmV3IGludFtTXTsKICAgICAgZm9yKHNpemVfdCBpPTA7aTxTOysraSkgVFtpXT1WOwogICAgIH0KICAgc2l6ZV90IFJvd3MoKWNvbnN0IHsgcmV0dXJuIFk7IH0KICAgc2l6ZV90IENvbHMoKWNvbnN0IHsgcmV0dXJuIFg7IH0KICAgb3N0cmVhbSAmb3V0KG9zdHJlYW0gJnMpY29uc3Q7CiAgIGlzdHJlYW0gJmlucChpc3RyZWFtICZzKTsKICAgY29uc3QgaW50ICpvcGVyYXRvcltdKHNpemVfdCB5KWNvbnN0IHsgcmV0dXJuIFQreSpYOyB9CiAgIGludCAqb3BlcmF0b3JbXShzaXplX3QgeSkgeyByZXR1cm4gVCt5Klg7IH0KICB9OwppbmxpbmUgb3N0cmVhbSAmb3BlcmF0b3I8PChvc3RyZWFtICZzLGNvbnN0IE1hdHJpeCAmbSkgeyByZXR1cm4gbS5vdXQocyk7IH0KaW5saW5lIGlzdHJlYW0gJm9wZXJhdG9yPj4oaXN0cmVhbSAmcyxNYXRyaXggJm0pIHsgcmV0dXJuIG0uaW5wKHMpOyB9CgppbnQgTWF0cml4Ojp3aWR0aCgpY29uc3QKICB7CiAgIHNpemVfdCBTPVkqWDsKICAgaWYoUzw9MCkgcmV0dXJuIDE7CiAgIGludCBtaW49VFswXSxtYXg9bWluOwogICBmb3Ioc2l6ZV90IGk9MTtpPFM7KytpKSBpZihtaW4+VFtpXSkgbWluPVRbaV07IGVsc2UgaWYobWF4PFRbaV0pIG1heD1UW2ldOwogICBtYXg9bG9nMTAoYWJzKG1heCkpKyhtYXg8MCkrMTsKICAgbWluPWxvZzEwKGFicyhtaW4pKSsobWluPDApKzE7CiAgIHJldHVybiBtaW4+bWF4P21pbjptYXg7CiAgfQogIApvc3RyZWFtICZNYXRyaXg6Om91dChvc3RyZWFtICZzKWNvbnN0CiAgewogICBzaXplX3QgUz1ZKlg7CiAgIGludCB3PTErd2lkdGgoKTsKICAgZm9yKHNpemVfdCB5PTAsaT0wO3k8WTsrK3ksczw8ZW5kbCkKICAgICB7CiAgICAgIGZvcihzaXplX3QgeD0wO3g8WDsrK3gsKytpKQogICAgICAgIHsKICAgICAgICAgaWYoJnM9PSZjb3V0KSBzPDxzZXR3KHctIXgpOwogICAgICAgICBzPDxUW2ldOwogICAgICAgICBpZigmcyE9JmNvdXQpIHM8PCdcdCc7CiAgICAgICAgfQogICAgIH0KICAgcmV0dXJuIHM7CiAgfQoKaXN0cmVhbSAmTWF0cml4OjppbnAoaXN0cmVhbSAmcykKICB7CiAgIHNpemVfdCBTPVkqWDsKICAgZm9yKHNpemVfdCB5PTAsaT0wO3k8Uzt5Kz1YKQogICAgIHsKICAgICAgZm9yKHNpemVfdCB4PTA7eDxYOysreCwrK2kpCiAgICAgICAgewogICAgICAgICBpZigmcz09JmNpbikgY291dDw8Ik1hdHJpeFsiPDx5PDwiXVsiPDx4PDwiXT0gIjsKICAgICAgICAgcz4+VFtpXTsKICAgICAgICB9CiAgICAgfQogICByZXR1cm4gczsKICB9CgppbnQgbWFpbigpCiAgewogICBNYXRyaXggbSgyLDIpOwogICBjb3V0PDwiUG9kYWogbWFjaWVyejoiPDxlbmRsOwogICBjaW4+Pm07CiAgIGNvdXQ8PGVuZGw8PG08PGVuZGw7CiAgIGZvcihzaXplX3QgeT0wO3k8bS5Sb3dzKCk7Kyt5KSBmb3Ioc2l6ZV90IHg9MDt4PG0uUm93cygpOysreCkgbVt5XVt4XT0oeSsyKSooeCszKTsKICAgY291dDw8ZW5kbDw8bTw8ZW5kbDsKICAgZm9yKHNpemVfdCB5PTA7eTxtLlJvd3MoKTsrK3kpIGZvcihzaXplX3QgeD0wO3g8bS5Sb3dzKCk7Kyt4KSBtW3ldW3hdPSh5LTUpKih4KzcpOwogICBjb3V0PDxlbmRsPDxtPDxlbmRsOwogICByZXR1cm4gMDsKICB9