MeehoweCK

Untitled

Mar 25th, 2021
641
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.85 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. class Macierz
  7. {
  8.     friend Macierz suma(Macierz, Macierz);
  9.     friend Macierz iloczyn(Macierz, double);
  10.     friend Macierz iloczyn_macierzy(const Macierz, const Macierz);
  11.     friend ostream& operator<<(ostream&, const Macierz&);
  12.  
  13. private:
  14.     int liczba_kolumn;
  15.     int liczba_wierszy;
  16.     double ** tablica;
  17.  
  18. public:
  19.     Macierz(int);
  20.     Macierz(int, int);
  21.     Macierz(string);
  22.     ~Macierz();
  23. };
  24.  
  25. Macierz::Macierz(int a) : liczba_wierszy(a), liczba_kolumn(a), tablica(new double * [a])
  26. {
  27.     for(int i = 0; i < a; i++)
  28.     {
  29.         tablica[i] = new double[a];
  30.  
  31.         for(int j = 0; j < a; j++)
  32.         {
  33.             if(i == j)
  34.                 tablica[i][j] = 1;
  35.  
  36.             else
  37.                 tablica[i][j] = 0;
  38.         }
  39.     }
  40.  
  41.     cout << "Utworzono macierz o wymiarach " << a << 'x' << a << endl;
  42. }
  43.  
  44. Macierz::Macierz(int w, int k) : liczba_wierszy(w), liczba_kolumn(k), tablica(new double * [w])
  45. {
  46.     for(int i = 0; i < w; i++)
  47.     {
  48.         tablica[i] = new double[k];
  49.  
  50.         for(int j = 0; j < k; j++)
  51.         {
  52.             tablica[i][j] = 0;
  53.         }
  54.     }
  55.  
  56.     cout << "Utworzono macierz o wymiarach " << w << 'x' << k << endl;
  57. }
  58.  
  59. Macierz::Macierz(string nazwa_pliku)
  60. {
  61.     ifstream plik;
  62.  
  63.     nazwa_pliku += ".txt";
  64.  
  65.     plik.open(nazwa_pliku.c_str());
  66.  
  67.     plik >> liczba_wierszy;
  68.  
  69.     plik >> liczba_kolumn;
  70.  
  71.     tablica = new double * [liczba_wierszy];
  72.  
  73.     for(int i = 0; i < liczba_wierszy; i++)
  74.     {
  75.         tablica[i] = new double[liczba_kolumn];
  76.  
  77.         for(int j = 0; j < liczba_kolumn; j++)
  78.         {
  79.             plik >> tablica[i][j];
  80.         }
  81.     }
  82.  
  83.     plik.close();
  84.  
  85.     cout << "Utworzono macierz o wymiarach " << liczba_wierszy << 'x' << liczba_kolumn << endl;
  86. }
  87.  
  88. Macierz::~Macierz()
  89. {
  90.     if(tablica)
  91.     {
  92.         for(int i = 0; i < liczba_wierszy; ++i)
  93.         {
  94.             delete[] tablica[i];
  95.         }
  96.  
  97.         delete[] tablica;
  98.     }
  99.  
  100.  
  101.     cout << "Macierz zostala usunieta" << endl;
  102. }
  103.  
  104. Macierz suma(Macierz A, Macierz B)
  105. {
  106.     if(A.liczba_kolumn != B.liczba_kolumn || A.liczba_wierszy != B.liczba_wierszy)
  107.     {
  108.         Macierz wynik(0);
  109.  
  110.         return wynik;
  111.     }
  112.  
  113.     Macierz wynik(A.liczba_wierszy, A.liczba_kolumn);
  114.  
  115.     for(int i = 0; i < A.liczba_wierszy; i++)
  116.     {
  117.         for(int j = 0; j < A.liczba_kolumn; j++)
  118.         {
  119.             wynik.tablica[i][j] = A.tablica[i][j] + B.tablica[i][j];
  120.         }
  121.     }
  122.  
  123.     return wynik;
  124. }
  125.  
  126. Macierz iloczyn(Macierz A, double x)
  127. {
  128.     Macierz wynik(A.liczba_wierszy, A.liczba_kolumn);
  129.  
  130.     for(int i = 0; i < A.liczba_wierszy; i++)
  131.     {
  132.         for(int j = 0; j < A.liczba_kolumn; j++)
  133.         {
  134.             wynik.tablica[i][j] = A.tablica[i][j] * x;
  135.         }
  136.     }
  137.  
  138.     return wynik;
  139. }
  140.  
  141. Macierz iloczyn_macierzy(Macierz A, Macierz B)
  142. {
  143.     if(A.liczba_kolumn != B.liczba_wierszy)
  144.         return Macierz(0);
  145.  
  146.     Macierz wynik(A.liczba_wierszy, B.liczba_kolumn);
  147.  
  148.     double suma;
  149.  
  150.     for(int i = 0; i < A.liczba_wierszy; i++)
  151.     {
  152.         for(int j = 0; j < B.liczba_kolumn; j++)
  153.         {
  154.             suma = 0;
  155.             for(int x = 0; x < A.liczba_kolumn; x++)
  156.             {
  157.                 suma += A.tablica[i][x] * B.tablica[x][j];
  158.             }
  159.             wynik.tablica[i][j] = suma;
  160.         }
  161.     }
  162.  
  163.     return wynik;
  164. }
  165.  
  166. ostream & operator<<(ostream & os, const Macierz & ob)
  167. {
  168.     for(int i = 0; i < ob.liczba_wierszy; i++)
  169.     {
  170.         for(int j = 0; j < ob.liczba_kolumn; j++)
  171.         {
  172.             os << ob.tablica[i][j] << '\t';
  173.         }
  174.  
  175.         os << endl;
  176.     }
  177.  
  178.     return os;
  179. }
  180.  
  181. int main()
  182. {
  183.     Macierz A("macierz");
  184.     Macierz B("drugi");
  185.  
  186.     cout << A << endl;
  187.     cout << B << endl;
  188.     Macierz C = iloczyn_macierzy(A, B);
  189.  
  190.     cout << C << endl;
  191.  
  192.     return 0;
  193. }
Advertisement
Add Comment
Please, Sign In to add comment