Advertisement
hugol

Untitled

Mar 12th, 2014
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.08 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5.  
  6. class VektorNd {
  7.     double *_liczby; //pole ze wskaźnikiem liczb
  8.     int _wymiar; //wymiar wektora
  9. public:
  10.     VektorNd()
  11.     {
  12.         _wymiar = 0;
  13.         _liczby = new double[1];
  14.     }
  15.  
  16.     VektorNd (const double liczby[], int wymiar){ //konstruktor
  17.         _liczby = new double[wymiar];
  18.         _wymiar = wymiar;
  19.         for(int i=0;i<_wymiar;i++)
  20.             _liczby[i] = liczby[i];
  21.     }
  22.     ~VektorNd(){
  23.         delete[] _liczby;
  24.     }
  25.  
  26.  
  27.     void wypisz(ostream & out = cout){
  28.         out << "|-------------------------BEGIN------------------------------|"<<endl;
  29.         out << "Jestem wektorem pod adresem: " << this <<endl;
  30.         out << "Moj wymiar to: " << _wymiar << endl;
  31.         out << "A elementy:"<<endl;
  32.         for(int i=0;i<_wymiar;i++)
  33.             out <<"["<<i<<"] = \t" << _liczby[i]<<endl;
  34.         out << "|--------------------------END-------------------------------|"<<endl;
  35.     }
  36.  
  37.  
  38.  
  39.     VektorNd& operator=(const VektorNd& right){ //implementacja operatora przypisania
  40.         if(_wymiar!=right._wymiar){ //gdy zgodne wymiary nie potrzeba realokować pamięci
  41.             delete[] _liczby;
  42.             _liczby = new double[right._wymiar]; //alokacja pamięci dla nowego wymiaru
  43.             _wymiar=right._wymiar;
  44.         }
  45.         for(int i=0;i<_wymiar;i++)
  46.             _liczby[i] = right._liczby[i];
  47.         return *this;
  48.     }
  49.  
  50.     void getCoefs(double liczby[]){ //metoda publiczna
  51.         for(int i=0;i<_wymiar;i++)
  52.             liczby[i] = _liczby[i];
  53.     }
  54.  
  55.     int getDim(){ //pomocznicza metoda
  56.         return _wymiar;
  57.     }
  58. };
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65. class VectorOfVectors {
  66. private:
  67.     VektorNd *vektory;
  68.     int size;
  69. public:
  70.     int Size()
  71.     {
  72.         return size;
  73.     }
  74.  
  75.     void Adres()
  76.     {
  77.         cout << this;
  78.     }
  79.  
  80.     VektorNd* Nvektor(int i)
  81.     {
  82.         return &vektory[i];
  83.     }
  84.  
  85.     // konstruktor
  86.     VectorOfVectors()
  87.     {
  88.         size = 1;
  89.         vektory = new VektorNd[1];
  90.     };
  91.  
  92.     VectorOfVectors(VektorNd* vectors, int size)
  93.     {
  94.         VectorOfVectors::size = size;
  95.         vektory = new VektorNd[size];
  96.         for (int i=0; i<size; i++)
  97.         {
  98.             vektory[i] = vectors[i];
  99.         }
  100.     };
  101.  
  102.     VectorOfVectors(const VectorOfVectors &a)
  103.     {
  104.         size = a.size;
  105.         vektory = new VektorNd[size];
  106.         for (int i=0; i<a.size; i++)
  107.         {
  108.             vektory[i] = a.vektory[i];
  109.         }
  110.     };
  111.  
  112.     ~VectorOfVectors()
  113.     {
  114.         if (size>0)
  115.         {
  116.             delete[] vektory;
  117.         }
  118.     }
  119.  
  120.     /*VectorOfVectors& operator=(const VectorOfVectors& a)
  121.     {
  122.         if(size!=a.size){ //gdy zgodne wymiary nie potrzeba realokować pamięci
  123.             delete[] vektory;
  124.             vektory = new VektorNd[a.size]; //alokacja pamięci dla nowego wymiaru
  125.             size = a.size;
  126.         }
  127.         for(int i=0;i<size;i++)
  128.             vektory[i] = a.vektory[i];
  129.         return *this;
  130.     };*/
  131.  
  132.    
  133.     VectorOfVectors& operator=(const VectorOfVectors& a)
  134.     {
  135.         VectorOfVectors tmp(a);
  136.        
  137.         delete[] vektory;
  138.         vektory = new VektorNd[tmp.size];
  139.         for (int i=0; i<tmp.size; i++)
  140.         {
  141.             vektory[i] = tmp.vektory[i];
  142.         }
  143.  
  144.         size = tmp.size;
  145.  
  146.         return *this;
  147.     };
  148.  
  149.  
  150.     friend ostream& operator<<(ostream & left,VectorOfVectors& right);
  151. };
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159. ostream& operator<<(ostream & left, VectorOfVectors& right){
  160.     left << "Ilosc vektorow: " << right.Size() << endl;
  161.     right.Adres();
  162.     for (int i = 0; i< right.Size(); i++)
  163.     {
  164.         right.Nvektor(i)->wypisz(left);
  165.     }
  166.     return left;
  167. }
  168.  
  169.  
  170. istream& operator>>(istream & left, VectorOfVectors& right){
  171.  
  172.  
  173.     cout << "Podaj ilosc of vectorow: ";
  174.     int n;
  175.     left >> n;
  176.     VektorNd* vectab = new VektorNd[n];
  177.     for (int i=0; i<n; i++)
  178.     {
  179.         int m;
  180.         cout << "podaj wymiar vektora " << i << ": ";
  181.         cin >> m;
  182.         double *htab = new double[m];
  183.         for (int j=0; j<m; j++)
  184.         {
  185.             left >> htab[j];
  186.         }
  187.         VektorNd tmpvec(htab, m);
  188.         vectab[i] = tmpvec;
  189.     }
  190.  
  191.     VectorOfVectors tmpr(vectab, n);
  192.     right = tmpr;
  193.     return left;
  194. }
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203. void wypisz(double tab[],int rozmiar){
  204.     for(int i=0;i<rozmiar;i++)
  205.         cout << tab[i]<<'\t';
  206.     cout <<endl;
  207. }
  208.  
  209.  
  210. int main(){
  211.  
  212.     VektorNd* vectors = new VektorNd[5];
  213.     for (int i=0; i< 15; i+=3)
  214.     {
  215.         double l[3];
  216.         l[0] = i; l[1] = i+1; l[2] = i+3;
  217.         VektorNd buff = VektorNd(l, 3);
  218.  
  219.         vectors[i/3] = buff;
  220.     }
  221.  
  222.  
  223.     VectorOfVectors *a = new VectorOfVectors(vectors, 5);
  224.     cout << *a;
  225.  
  226.  
  227.     VectorOfVectors b, c;
  228.     cin >> b;
  229.     cout << b;
  230.     c = b;
  231.  
  232.     cout << c;
  233.  
  234.  
  235.  
  236.     system("pause");
  237.     return 0;
  238. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement