#include <conio.h>
#include <iostream.h>

class wektor
{
	private:
		int roz;
		int *tab;

	public:
		wektor(); 			    //konstruktor -> tworzy tablice 5 elementow
		wektor(int x);          //konstruktor -> tworzy tablice x elementow
 		wektor(wektor &p);      //konstruktor kopiujacy
		~wektor();              //destruktor

 		void wpisz_element(int x,int poz); //zapisuje w tablicy na pozycji poz wartosc x
		int jaki_rozmiar(void);            //zwraca wartosc roz
        void wypisz(void);                 //wypisuje wszystkie elenemty z tablicy

 		wektor operator=(wektor p);        //przyrownanie obiektow klasy wektor

 		wektor operator+(wektor p);        //DODAWANIE OBIEKTOW KLASY WEKTOR
 		wektor operator-(wektor p);        //ODEJMOWANIE OBIEKTOW KLASY WEKTOR
 		wektor operator*(int x);           //MNOZENIE WEKTORA PRZEZ SKALAR
 		int operator*(wektor p);           //ILOCZYN SKALARNY

 		wektor operator+=(wektor p);       // A+=B <=> A=A+B
 		wektor operator-=(wektor p);       // A-=B <=> A=A-B
     	wektor operator*=(int x);          // A*=B <=> A=A*B
//      	int operator*=(wektor p);          // A*=B <=> A=A*B

// OPWERATORY NIEOBOWIAZKOWE
    int operator==(wektor p);          //POROWNANIE ZWRACA 1 LUB 0 (PRAWDA, FALSZ)
	void operator!(void);          //NEGACJA A (ZMIANA ZNAKU WARTOSCI A)
};
/******************************************************************************/
wektor::wektor()
{ roz=5; tab = new int[roz]; }
/******************************************************************************/
wektor::wektor(int x)
{ roz=x; tab=new int[roz]; }
/******************************************************************************/
wektor::wektor(wektor &p)
{
 	int i;
    roz = p.roz;
    tab = new int[roz];
    for(i=0 ; i < roz; i++)
    tab[i] = p.tab[i];
    cout << "konstruktor kopiujacy" << endl;
}
/******************************************************************************/
wektor::~wektor()
{ if(tab!=NULL)	{	delete tab;	tab=NULL; roz=0;}}
/******************************************************************************/
void wektor::wpisz_element(int x, int poz)
{
	if(poz < roz  &&  poz >= 0)
	tab[poz]=x;
}
/******************************************************************************/
int wektor::jaki_rozmiar(void)
{ return roz; }
/******************************************************************************/
void wektor::wypisz(void)
{
	int i;
  for(i=0 ; i < roz ; i++) cout << tab[i] << ' ';
  cout << endl;
}
/******************************************************************************/
wektor wektor::operator=(wektor p)
{
	int i;
    if (tab!=NULL) { delete tab; tab=NULL;}
    roz = p.roz;
    tab = new int[roz];
    for(i=0 ; i <roz; i++)
 	tab[i] = p.tab[i];
 	return *this;
}
/******************************************************************************/
wektor wektor::operator+(wektor p)
{
 	int i, wiekszy, mniejszy;
    if(roz > p.roz)
    {	wiekszy = roz; mniejszy = p.roz;}
    else
    { wiekszy = p.roz; mniejszy = roz; }

    wektor pom(wiekszy);
    for(i=0 ; i < mniejszy ; i++)
 	pom.tab[i] = tab[i] + p.tab[i];

    if(wiekszy == p.roz)
 	{
  	    for(i=mniejszy ; i < wiekszy ; i++)	pom.tab[i] = p.tab[i];
    }
    else
 	{
   	    for(i=mniejszy ; i < wiekszy ; i++)	pom.tab[i]=tab[i];
    }
    return pom;
}
/******************************************************************************/
wektor wektor::operator-(wektor p)
{
 	int i, wiekszy, mniejszy;
    if(roz > p.roz)
    {	wiekszy = roz; mniejszy = p.roz;}
    else
    { wiekszy = p.roz; mniejszy = roz; }

    wektor pom(wiekszy);
    for(i=0 ; i < mniejszy ; i++)
 	pom.tab[i] = tab[i] - p.tab[i];

    if(wiekszy == p.roz)
 	{
   	    for(i=mniejszy ; i < wiekszy ; i++)	pom.tab[i] = p.tab[i];
    }
    else
 	{
   	    for(i=mniejszy ; i < wiekszy ; i++)	pom.tab[i]=tab[i];
    }
    return pom;
}
/******************************************************************************/
wektor wektor::operator*(int x)
{
 	int i;

    wektor pom(roz);
    for(i=0 ; i < roz ; i++)
 	pom.tab[i] = tab[i] * x;

    return pom;
}
/******************************************************************************/
int wektor::operator*(wektor p)
{
 	int i, rozmiar, il = 0;
    if(roz > p.roz)
    {	rozmiar = p.roz;}
    else
    {   rozmiar = roz; }

    for(i=0 ; i < rozmiar ; i++)
 	il += tab[i] * p.tab[i];

    return il;
}
/******************************************************************************/
wektor wektor::operator+=(wektor p)
{
 	int i, wiekszy, mniejszy;
    if(roz > p.roz)
    {	wiekszy = roz; mniejszy = p.roz;}
    else
    { wiekszy = p.roz; mniejszy = roz; }

    wektor pom(wiekszy);
    for(i=0 ; i < mniejszy ; i++)
 	pom.tab[i] = tab[i] + p.tab[i];

    if(wiekszy == p.roz)
 	{
   	    for(i=mniejszy ; i < wiekszy ; i++)	pom.tab[i] = p.tab[i];
    }
    else
 	{
   	    for(i=mniejszy ; i < wiekszy ; i++)	pom.tab[i]=tab[i];
    }

    delete[] tab;
    roz = wiekszy;
    tab=new int[roz];

    for(i=0 ; i < wiekszy ; i++)
 	tab[i] = pom.tab[i];

    return *this;
}
/******************************************************************************/
wektor wektor::operator-=(wektor p)
{
 	int i, wiekszy, mniejszy;
    if(roz > p.roz)
    {	wiekszy = roz; mniejszy = p.roz;}
    else
    { wiekszy = p.roz; mniejszy = roz; }

    wektor pom(wiekszy);
    for(i=0 ; i < mniejszy ; i++)
 	pom.tab[i] = tab[i] - p.tab[i];

    if(wiekszy == p.roz)
 	{
   	    for(i=mniejszy ; i < wiekszy ; i++)	pom.tab[i] = p.tab[i];
    }
    else
 	{
   	    for(i=mniejszy ; i < wiekszy ; i++)	pom.tab[i]=tab[i];
    }

    delete[] tab;
    roz = wiekszy;
    tab=new int[roz];

    for(i=0 ; i < wiekszy ; i++)
 	tab[i] = pom.tab[i];

    return *this;
}
/******************************************************************************/
wektor wektor::operator*=(int x)
{
 	int i;

    wektor pom(roz);
    for(i=0 ; i < roz ; i++)
 	tab[i] *= x;

    return *this;
}
/******************************************************************************/
int wektor::operator==(wektor p)
{
 	int i;

    if (roz != p.roz) {
        return 0;
    }

    for(i=0 ; i < roz ; i++)
 	if (tab[i] != p.tab[i])
    {
        return 0;
    }

    return 1;
}
/******************************************************************************/
void wektor::operator!(void)
{
    for(int i=0 ; i < roz ; i++)
 	tab[i] *= -1;
}
/******************************************************************************/
void main()
{
  wektor a,b,c,d;
  int i,z;
  /*
  for(i=0;i<a.jaki_rozmiar();i++)
  {
    cout << "element a[" << i << "]:";
    cin >> z;
    a.wpisz_element(z,i);
  }

   for(i=0;i<b.jaki_rozmiar();i++)
  {
    cout << "element b[" << i << "]:";
    cin >> z;
    b.wpisz_element(z,i);
  }

   for(i=0;i<c.jaki_rozmiar();i++)
  {
    cout << "element c[" << i << "]:";
    cin >> z;
    c.wpisz_element(z,i);
  }

   for(i=0;i<d.jaki_rozmiar();i++)
  {
    cout << "element d[" << i << "]:";
    cin >> z;
    d.wpisz_element(z,i);
  }
  */
    int j = 1;
   for(i=0;i<d.jaki_rozmiar();i++)
  {
    a.wpisz_element(j++,i);
    b.wpisz_element(j++,i);
    c.wpisz_element(j++,i);
    d.wpisz_element(j++,i);
  }

  a.wypisz(); b.wypisz(); c.wypisz(); d.wypisz(); getch();

  d=a+b+c;
  a.wypisz(); b.wypisz(); c.wypisz(); d.wypisz(); getch();

  d=a-b-c;
  a.wypisz(); b.wypisz(); c.wypisz(); d.wypisz(); getch();

  b=a*5;
  a.wypisz(); b.wypisz(); c.wypisz(); d.wypisz(); getch();


  cout << b*c << endl;

    f = b*c;
    a*f;
  a.wypisz(); b.wypisz(); c.wypisz(); d.wypisz(); getch();

  d+=a+=b+=c;
  a.wypisz(); b.wypisz(); c.wypisz(); d.wypisz(); getch();

  d-=a-=b-=c;
  a.wypisz(); b.wypisz(); c.wypisz(); d.wypisz(); getch();

  !a;
  !b;
  !c;
  !d;
  a.wypisz(); b.wypisz(); c.wypisz(); d.wypisz(); getch();

  if (a==b)
  cout << "rowne" <<endl;
  else
  cout << "nie"  << endl;

  a=b;

  if (a==b)
  cout << "rowne" <<endl;
  else
  cout << "nie"  << endl;


  a.wypisz(); getch(); b.wypisz(); getch(); c.wypisz(); getch(); d.wypisz(); getch();
}




