Advertisement
Guest User

Untitled

a guest
Jun 21st, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.71 KB | None | 0 0
  1. /*Wprowadź z klawiatury rozmiar macierzy(klasa) kwadratowej (<=5) a następnie elementy dwóch takich macierzy (typ float)
  2. wyznacz iloczyn tych macierzy w sposób ogólny tj umożliwiających mnożenie także dużych macierzy skorzystaj
  3. z metody wyznaczającej iloczyn skalarny wiersza i kolumny macierzy*/
  4.  
  5. #include <iostream>
  6.  
  7. using namespace std;
  8.  
  9.  
  10.  
  11. class matrix
  12. {
  13.     float ** macierz; // wskaźnik na wskaźniki do typu float - nasza macierz
  14.     int size = 0;  // zmienna przechowujaca wielkosc
  15.  
  16.  
  17. public:
  18.     matrix(int); // konstruktor przyjmujacy typ int w argumentach
  19.     float* operator[](int part) { return macierz[part]; }; //przeciazony operator [] tak aby mozna bylo uzywac naszej klasy jak normalnej tablicy(macierzy)
  20.     void operator*(matrix& mnoznik); // przeciazony operator mnozenia
  21.     void wys_macierz();// wyswietla macierz
  22.     ~matrix(); // destruktor
  23.  
  24. };
  25.  
  26.  
  27. matrix::matrix(int size) : size(size)
  28. {
  29.  
  30.     macierz = new float*[size]; // rezerwacja pamieci dla wierszy
  31.     for (int i = 0; i < size; i++)
  32.         macierz[i] = new float[size]; // rezerwacja pamieci dla kolumn
  33.  
  34.     for (int i = 0; i < size; ++i)
  35.     {
  36.         for (int j = 0; j < size; ++j)
  37.         {
  38.             cout << "Podaj [" << i + 1 << "][" << j + 1 << "]" << endl;
  39.             cin >> macierz[i][j]; // wprowadzanie danych do macierzy
  40.         }
  41.     }
  42.  
  43. }
  44.  
  45. void matrix::wys_macierz()
  46. {
  47.     for (int i = 0; i < size; ++i)
  48.     {
  49.         for (int j = 0; j < size; ++j)
  50.         {
  51.             cout << macierz[i][j] << " ";
  52.         }
  53.         cout << endl;
  54.     }
  55. }
  56.  
  57. void matrix::operator*(matrix& mnoznik)
  58. {
  59.     float temp;
  60.     for (int i = 0; i < size; ++i)
  61.     {
  62.         for (int j = 0; j < mnoznik.size; ++j)
  63.         {
  64.             temp = 0;
  65.             for (int l = 0; l < size; ++l)
  66.             {
  67.                 temp = temp + macierz[i][l] * mnoznik.macierz[l][j]; //mnozenie dwoch macierzy zgodnie z wzorem https://pl.wikipedia.org/wiki/Mnożenie_macierzy
  68.             }
  69.             cout << temp << " ";
  70.         }
  71.         cout << endl;
  72.     }
  73. }
  74.  
  75. matrix::~matrix()
  76. {
  77.     for (int i = 0; i < size; i++)
  78.         delete[] macierz[i]; // czyszczenie pamieci  kolumn
  79.     delete[] macierz; //czyszczenie pamieci wierszy
  80. }
  81.  
  82.  
  83. int main()
  84. {
  85.     constexpr float max_size = 5;  //maksymalna wielkosc macierzy okreslona w tresci zadania, constexpr oznacza ze zmienna jest oblicza w trakcie czasu kompilacji
  86.     int size = 0;
  87.     while (size > max_size || size <= 0) // wykonuje dopoki podany rozmiar nie nalezy do (0,5>
  88.     {
  89.         cout << "Podaj rozmiar macierzy" << endl;
  90.         cin >> size;
  91.     };
  92.  
  93.     matrix macierz_1(size); // tworzenie macierzy o podanym rozmiarze
  94.     matrix macierz_2(size); // tworzenie drugiej  macierzy o podanym rozmiarze
  95.  
  96.  
  97.     cout << "Macierz 1:" << endl;
  98.     macierz_1.wys_macierz();
  99.     cout << "Macierz 2:" << endl;
  100.     macierz_2.wys_macierz();
  101.  
  102.  
  103.     cout << "Pomnozone macierze:" << endl;
  104.     macierz_1*macierz_2;
  105.  
  106.  
  107.  
  108.     return 0;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement