MeehoweCK

Untitled

Dec 4th, 2020
456
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // main.cpp
  2. #include <iostream>
  3. #include "macierz.h"
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.     /*Macierz A(5,4,3);
  10.     Macierz B(5,4,2);
  11.  
  12.     A.wypisz_macierz();
  13.     cout << endl;
  14.     B.wypisz_macierz();
  15.  
  16.     Macierz C = A + B;
  17.     C.wypisz_macierz();
  18.  
  19.     cout << C[0][1] << endl;*/
  20.  
  21.     Macierz A(5, 5);
  22.     A.wypisz_macierz();
  23.     cout << endl;
  24.     Macierz B(A);
  25.     B.wypisz_macierz();
  26.  
  27.     Macierz C(2, 5, 10);
  28.     C = B;
  29.     cout << endl;
  30.     C.wypisz_macierz();
  31.  
  32.     return 0;
  33. }
  34.  
  35. // macierz.cpp
  36. #include <iostream>
  37. #include "macierz.h"
  38. #include <cstdlib>
  39. #include <ctime>
  40.  
  41. using namespace std;
  42.  
  43. /*
  44. class Macierz
  45. {
  46.     int kolumny;
  47.     int wiersze;
  48.     float** wartosci;
  49. public:
  50.     Macierz(int, int, float);
  51.     Macierz(int, int);
  52.     ~Macierz();
  53.     void wypisz_macierz();
  54.     float& operator[][](unsigned i, unsigned j);
  55.     friend Macierz operator+(Macierz, Macierz);
  56. };
  57. */
  58.  
  59. Macierz::Macierz(int w, int k, float val) : kolumny(k), wiersze(w)
  60. {
  61.     if(wiersze == 0 && kolumny == 0)
  62.     {
  63.         wartosci = nullptr;
  64.         return;
  65.     }
  66.  
  67.     wartosci = new float*[w];
  68.  
  69.     for(int i = 0; i < w; ++i)
  70.         wartosci[i] = new float[k];
  71.  
  72.     for(int i = 0; i < w; ++i)
  73.         for(int j = 0; j < k; ++j)
  74.             wartosci[i][j] = val;
  75. }
  76.  
  77. Macierz::Macierz(int w, int k) : kolumny(k), wiersze(w)
  78. {
  79.     if(wiersze == 0 && kolumny == 0)
  80.     {
  81.         wartosci = nullptr;
  82.         return;
  83.     }
  84.  
  85.     wartosci = new float*[w];
  86.  
  87.     srand(time(nullptr));
  88.  
  89.     for(int i = 0; i < w; ++i)
  90.         wartosci[i] = new float[k];
  91.  
  92.     for(int i = 0; i < w; ++i)
  93.         for(int j = 0; j < k; ++j)
  94.             wartosci[i][j] = 100.0 * rand() / RAND_MAX;
  95. }
  96.  
  97. void Macierz::wypisz_macierz()
  98. {
  99.     if(wartosci == nullptr)
  100.     {
  101.         cout << "Macierz pusta" << endl;
  102.     }
  103.  
  104.     for(int i = 0; i < wiersze; ++i)
  105.     {
  106.         for(int j = 0; j < kolumny; ++j)
  107.         {
  108.             cout << wartosci[i][j] << '\t';
  109.         }
  110.         cout << endl;
  111.     }
  112. }
  113.  
  114. Macierz::~Macierz()
  115. {
  116.     //cout << 'x';
  117.     for(int i = 0; i < wiersze; ++i)
  118.     {
  119.         delete[] wartosci[i];
  120.         //cout << 'i';
  121.     }
  122.     delete[] wartosci;
  123.     cout << "Destruktor\n";
  124. }
  125.  
  126. float*& Macierz::operator[](unsigned i)
  127. {
  128.     return wartosci[i];
  129. }
  130.  
  131. Macierz operator+(Macierz A, Macierz B)
  132. {
  133.     if(A.kolumny == B.kolumny && A.wiersze == B.wiersze)
  134.     {
  135.         Macierz wynik(B.wiersze, B.kolumny);
  136.  
  137.         for(int i = 0; i < B.wiersze; ++i)
  138.         {
  139.             for(int j = 0; j < B.kolumny; ++j)
  140.             {
  141.                 wynik.wartosci[i][j] = A.wartosci[i][j] + B.wartosci[i][j];
  142.             }
  143.         }
  144.  
  145.         return wynik;
  146.     }
  147.     else
  148.     {
  149.         cout << "Rozne rozmiary macierzy" << endl;
  150.         return Macierz(0,0);
  151.     }
  152.  
  153. }
  154.  
  155. Macierz& Macierz::operator= (const Macierz& A)
  156. {
  157.     if(&A != this)      // sprawdzamy czy nie kopiujemy samego siebie
  158.     {
  159.         for(int i = 0; i < wiersze; ++i)
  160.             delete[] wartosci[i];
  161.         delete[] wartosci;
  162.  
  163.         wiersze = A.wiersze;
  164.         kolumny = A.kolumny;
  165.  
  166.         wartosci = new float*[wiersze];
  167.         for(int i = 0; i < wiersze; ++i)
  168.         {
  169.             wartosci[i] = new float[kolumny];
  170.             for(int j = 0; j < kolumny; ++j)
  171.                 wartosci[i][j] = A.wartosci[i][j];
  172.         }
  173.     }
  174.     return *this;
  175. }
  176.  
  177. // macierz.h
  178. class Macierz
  179. {
  180.     int kolumny;
  181.     int wiersze;
  182.     float** wartosci;
  183. public:
  184.     Macierz(int, int, float);
  185.     Macierz(int, int);
  186.     ~Macierz();
  187.     void wypisz_macierz();
  188.     float*& operator[](unsigned);
  189.     Macierz& operator= (const Macierz&);
  190.     friend Macierz operator+(Macierz, Macierz);
  191. };
RAW Paste Data