Advertisement
Evilerus

macierz P.M.

Jun 18th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.76 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4.  
  5. using namespace std;
  6.  
  7. class macierz{
  8.     int w, k; //wiersze, koulmny
  9.     double **wsk; //tu bêdzie tablica z danymi
  10.     public:
  11.         macierz(int wiersze, int kolumny);
  12.         ~macierz(); //destruktor
  13.         macierz(macierz &m); //konstruktor kopiuj¹cy
  14.         macierz& operator=(const macierz &m)
  15.         {
  16.                 if (this!=&m) {
  17.                     for (int i = 0; i<w; i++)
  18.                     {
  19.                         delete[] wsk[i];
  20.                     }
  21.                     delete[] wsk;
  22.                     wsk=new double*[m.w];            // tworzymy tablicę wierszy - dwie gwiazdki sugerują, że to
  23.                     for (int i = 0; i<m.w; i++)        // będzie tablica dwuwymiarowa
  24.                     {                                      //
  25.                         wsk[i]=new double[m.k];        // w pętli tworzymy drugi wymiar tablicy, z kolumnami
  26.                     }
  27.                     this->w=m.w;                       // dajemy do klasy ilość wierszy
  28.                     this->k=m.k;
  29.                     for (int j = 0; j<m.w; j++)
  30.                     {
  31.                         for (int l = 0; l<m.k; l++)
  32.                         {
  33.                             wsk[j][l]=m.wsk[j][l];
  34.                         }
  35.                     }
  36.                 }
  37.                 return *this;
  38.         }
  39.         macierz operator+(macierz &m)
  40.         {
  41.                 macierz tmp(m.w, m.k);                                // tworzymy obiekt macierzy który potem zwrócimy
  42.                 for (int i = 0; i<m.w; i++)
  43.                 {
  44.                     for (int j = 0; j<m.k; j++)
  45.                     {
  46.                         tmp.wsk[i][j]=this->wsk[i][j]+m.wsk[i][j];    // wykonujemy dodawanie macierzy - każdy wiersz, każda kolumna
  47.                     }
  48.                 }
  49.                 return tmp;                                           // zwracamy nasz obiekt
  50.         }
  51.         void wpisz_wartosc(int x, int y, double val);
  52.         void wpisz_losowe();
  53.         void wypisz();
  54. };
  55.  
  56. macierz::macierz(int wiersze, int kolumny)
  57. {
  58.     wsk=new double*[wiersze];            // tworzymy tablicę wierszy - dwie gwiazdki sugerują, że to
  59.     for (int i = 0; i<wiersze; i++)        // będzie tablica dwuwymiarowa
  60.     {                                      //
  61.         wsk[i]=new double[kolumny];        // w pętli tworzymy drugi wymiar tablicy, z kolumnami
  62.     }
  63.     this->w=wiersze;                       // dajemy do klasy ilość wierszy
  64.     this->k=kolumny;                       // i ilość kolumn
  65. }
  66.  
  67. macierz::~macierz()
  68. {
  69.     for (int i = 0; i<w; i++)           // destruktor usuwa z pamięci po kolei
  70.     {
  71.         delete[] wsk[i];                // wszystkie kolumny z każdego wiersza
  72.     }
  73.     delete[] wsk;                       // a na końcu całą tablicę
  74. }
  75.  
  76. macierz::macierz(macierz &m)
  77. {
  78.     wsk=new double*[m.w];                // analogicznie do głównego konstruktora, tworzymy
  79.     for (int i = 0; i<m.w; i++)            // tablicę wierszy
  80.     {                                      // po czym tworzymy w każdym wierszu kolummny
  81.         wsk[i]=new double[m.k];
  82.     }
  83.     this->w=m.w;                           // podobnie ustawiamy ilość wierszy i kolumn w klasie
  84.     this->k=m.k;
  85.     for (int l = 0; l<m.w; l++)
  86.     {
  87.         for (int n = 0; n<m.k; n++)
  88.         {                                 // tą pętlą kopiujemy wiersz po wierszu, kolumnę po kolumnie
  89.             wsk[l][n]=m.wsk[l][n];        // zawartość oryginalnej macierzy
  90.         }
  91.     }
  92. }
  93.  
  94. void macierz::wpisz_wartosc(int x, int y, double val)
  95. {
  96.     this->wsk[x][y]=val;                                    // Ta funkcja tylko nam daje określoną wartość do komórki
  97. }
  98.  
  99. void macierz::wpisz_losowe()
  100. {
  101.     srand(time(NULL));                                      // Inicjalizujemy ziarno pseudolosowości
  102.     for (int i = 0; i<this->w; i++)
  103.     {
  104.         for (int j = 0; j<this->k; j++)
  105.         {
  106.             this->wsk[i][j]=(rand()%666)+1;                // Wpisujemy losowe wartości
  107.         }
  108.     }
  109. }
  110.  
  111. void macierz::wypisz()
  112. {
  113.     for (int i = 0; i<this->w; i++)
  114.     {
  115.         for (int j = 0; j<this->k; j++)
  116.         {
  117.             cout << "[" << i << ", " << j << "] = " << this->wsk[i][j] << endl;
  118.         }
  119.     }
  120. }
  121.  
  122. int main()
  123. {
  124.     macierz m1(10,10);
  125.     macierz m2(10,10);
  126.     macierz m3(10,10);
  127.     m1.wpisz_losowe();
  128.     m2.wpisz_losowe();
  129.     cout << "Macierz m1: " << endl;
  130.     m1.wypisz();
  131.     cout << "Macierz m2: " << endl;
  132.     m2.wypisz();
  133.     cout << "Dodaje macierze m1 i m2" << endl;
  134.     m3=m1+m2;
  135.     cout << "A ich suma wynosi: " << endl;
  136.     cout << endl;
  137.     cout << "Macierz m3: " << endl;
  138.     m3.wypisz();
  139.     return 0;
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement