Advertisement
Guest User

Labolatorium2

a guest
Jan 21st, 2018
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.90 KB | None | 0 0
  1. #include <iostream>
  2. /**
  3. Konstruktor kopiujący ma za zadanie stworzyć nowy obiekt na podstawie istniejącego służy do powielania obiektów, co może być kosztowna operacja w przypadku dużych obiektów,
  4. a jest nie pożądane, przy kopiowaniu obiektów tymczasowych które za chwile i tak maja zostać zniszczone.
  5. Z pomoca przychodzi konstruktor przenoszący którego zadaniem jest stworzenie nowego obiektu poprzez przeniesienie lub mozna powiedzieć przypisanie danych
  6. z istniejącego obiektu do nowo utworzonego, bez operacji kopiowania oraz zneutralizowanie starego wzkaźnika obiektu na podstawie
  7. którego stwożył nowy obiekt, dzięki czemu operacja kopiowania nie zabiera zasobów pamięci co optymalizuje program.
  8. */
  9. using namespace std;
  10.  
  11. class ZlyRozmiar{public: void komunikat(){cout<<"Niezgodnosc rozmiarow macierzy";}};
  12. class ZlyAdresKomorki{public: void komunikat(){cout<<"Zly adres komorki";}};
  13. class BladWprowadzania{public: void komunikat(){cout<<"Wprowadzono zla wartosc";}};
  14.  
  15. class Macierz
  16. {
  17.     int ** komorka;
  18.     int wiersze;
  19.     int kolumny;
  20.     //Getery i settery
  21. public:
  22.     int** daj_adres_komorki()//funkcja zwracajaca adres wskaznika komorka
  23.     {
  24.         return this->komorka;
  25.     }
  26.     int daj_kolumne()//getter zwracajacy liczbe kolumn
  27.     {
  28.         return this->kolumny;
  29.     }
  30.     int daj_wiersze()//getter zwracajacy liczbe wierszy
  31.     {
  32.         return this->wiersze;
  33.     }
  34.     int dajWartoscElementu(int kolumna, int wiersz)//getter zwracajacy wartość elementu o wspolrzednych [kolumna][wiersz]
  35.     {
  36.         if(kolumna>0 && kolumna<this->kolumny && wiersz>0 && wiersz<this->wiersze)
  37.         {
  38.             return this->komorka[kolumna][wiersz];
  39.         }
  40.         else
  41.         {
  42.             throw ZlyAdresKomorki();
  43.         }
  44.     }
  45.     void ustawWartoscElementu(int wartosc, int kolumna, int wiersz)//setter ustawiajacy wartość elementu o wspolrzednych[kolumna][wiersz] na wartość równej wartosc
  46.     {
  47.         this->komorka[kolumna][wiersz]=wartosc;
  48.     }
  49.     Macierz& dodajMacierz(const Macierz & dodawana)//funkcja dodająca macierz przekazywanej w parametrze do macierzy obiektu
  50.     {
  51.         if (this->wiersze == dodawana.wiersze && this->kolumny == dodawana.kolumny)//sprawdzanie moznosci dodawania macierzy
  52.            {
  53.                 for (int i=0;i<this->kolumny;i++)
  54.                 {
  55.                     for (int j=0;j<this->wiersze;j++)
  56.                     {
  57.                         this->komorka[i][j]+=dodawana.komorka[i][j];
  58.                     }
  59.                 }
  60.            }
  61.         else
  62.            {
  63.                 throw new ZlyRozmiar();
  64.            }
  65.         return *this;
  66.     }
  67.     Macierz& pomnozPrzezSkalar(int skalar)//funkcja mnożąca macierz obiektu przez skalar
  68.     {
  69.         for (int i=0;i<this->kolumny;i++)
  70.             {
  71.                 for (int j=0;j<this->wiersze;j++)
  72.                 {
  73.                     this->komorka[i][j]*=skalar;
  74.                 }
  75.             }
  76.         return *this;  
  77.     }
  78.     Macierz pomnozPrzezMacierz(const Macierz & mnoznik)//funkcja mnożąca macierz obiektu przez macierz
  79.     {
  80.         Macierz nowa = Macierz(mnoznik.kolumny,this->wiersze);
  81.         if (this->kolumny==mnoznik.wiersze)
  82.         {          
  83.             for(int i=0;i<nowa.kolumny;i++)
  84.             {
  85.                 for(int j=0;j<nowa.wiersze;j++)
  86.                 {
  87.                     int suma=0;
  88.                     for (int k=0;k<this->kolumny;k++)
  89.                     {
  90.                         suma+=this->komorka[k][j]*mnoznik.komorka[i][k];
  91.                     }
  92.                     nowa.komorka[i][j]=suma;
  93.                 }
  94.             }
  95.         }
  96.         else
  97.         {
  98.             throw new ZlyRozmiar();
  99.         }
  100.         return nowa;
  101.     }
  102.     void wyswietlMacierz()//funkcja wyświetlająca macierz
  103.     {
  104.         cout<<endl;
  105.         for (int i=0;i<this->wiersze;i++)
  106.         {
  107.             for(int j=0;j<this->kolumny;j++)
  108.             {
  109.                 cout<<"["<<this->komorka[j][i]<<"]";
  110.             }
  111.             cout<<"\n";
  112.         }
  113.     }
  114.     void wypelnijMacierz()//funkcja wypełniająca macierz
  115.     {
  116.                
  117.         for (int i=0;i<this->wiersze;i++)
  118.         {
  119.             for(int j=0;j<this->kolumny;j++)
  120.             {
  121.                 if(cin.good())
  122.                 {
  123.                     cout<<"Element ["<<j+1<<"]["<<i+1<<"]: ";
  124.                     cin>>this->komorka[j][i];
  125.                 }
  126.                 else
  127.                 {
  128.                     cin.sync();
  129.                     cin.clear();
  130.                     throw BladWprowadzania();
  131.                 }
  132.             }
  133.         }
  134.  
  135.     }
  136. Macierz(int kolumny,int wiersze)//konstruktor z dynamiczną alokacja pamięci przyjmujący w parametrach rozmiary macierzy
  137. {
  138.     this->kolumny = kolumny;
  139.     this->wiersze = wiersze;
  140.     this->komorka = new int * [kolumny];
  141.     for (int i=0;i<kolumny;i++)
  142.     {
  143.         this->komorka[i] = new int[wiersze];
  144.     }
  145. }
  146. Macierz(const Macierz & kopiowana)//konstruktor kopiujacy
  147. {
  148.     this->kolumny=kopiowana.kolumny;
  149.     this->wiersze=kopiowana.wiersze;
  150.     this->komorka = new int * [kopiowana.kolumny];
  151.     for (int i=0;i<kolumny;i++)
  152.     {
  153.         this->komorka[i] = new int[kopiowana.wiersze];
  154.     }
  155.     for(int i=0;i<kopiowana.kolumny;i++)
  156.     {
  157.         for(int j=0;j<kopiowana.wiersze;j++)
  158.         {
  159.             this->komorka[i][j]=kopiowana.komorka[i][j];
  160.         }
  161.    }
  162. }
  163. Macierz(Macierz && przenoszona) //konstruktor przenoszacy
  164. {
  165.     this->komorka=przenoszona.komorka;
  166.     przenoszona.komorka = NULL;
  167.     this->kolumny = przenoszona.kolumny;
  168.     this->wiersze = przenoszona.wiersze;
  169.     przenoszona.kolumny=0;
  170.     przenoszona.wiersze=0;
  171. }  
  172. ~Macierz()//destruktor
  173. {
  174.     for(int i =0;i<this->kolumny;i++)
  175.     {
  176.         delete[] this->komorka[i];
  177.     }
  178.     delete[] this->komorka;
  179. }
  180. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement