Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- class Macierz
- {
- friend Macierz suma(Macierz, Macierz);
- friend Macierz iloczyn(Macierz, double);
- friend Macierz iloczyn_macierzy(const Macierz, const Macierz);
- friend ostream& operator<<(ostream&, const Macierz&);
- private:
- int liczba_kolumn;
- int liczba_wierszy;
- double ** tablica;
- public:
- Macierz(int);
- Macierz(int, int);
- Macierz(string);
- ~Macierz();
- };
- Macierz::Macierz(int a) : liczba_wierszy(a), liczba_kolumn(a), tablica(new double * [a])
- {
- for(int i = 0; i < a; i++)
- {
- tablica[i] = new double[a];
- for(int j = 0; j < a; j++)
- {
- if(i == j)
- tablica[i][j] = 1;
- else
- tablica[i][j] = 0;
- }
- }
- cout << "Utworzono macierz o wymiarach " << a << 'x' << a << endl;
- }
- Macierz::Macierz(int w, int k) : liczba_wierszy(w), liczba_kolumn(k), tablica(new double * [w])
- {
- for(int i = 0; i < w; i++)
- {
- tablica[i] = new double[k];
- for(int j = 0; j < k; j++)
- {
- tablica[i][j] = 0;
- }
- }
- cout << "Utworzono macierz o wymiarach " << w << 'x' << k << endl;
- }
- Macierz::Macierz(string nazwa_pliku)
- {
- ifstream plik;
- nazwa_pliku += ".txt";
- plik.open(nazwa_pliku.c_str());
- plik >> liczba_wierszy;
- plik >> liczba_kolumn;
- tablica = new double * [liczba_wierszy];
- for(int i = 0; i < liczba_wierszy; i++)
- {
- tablica[i] = new double[liczba_kolumn];
- for(int j = 0; j < liczba_kolumn; j++)
- {
- plik >> tablica[i][j];
- }
- }
- plik.close();
- cout << "Utworzono macierz o wymiarach " << liczba_wierszy << 'x' << liczba_kolumn << endl;
- }
- Macierz::~Macierz()
- {
- if(tablica)
- {
- for(int i = 0; i < liczba_wierszy; ++i)
- {
- delete[] tablica[i];
- }
- delete[] tablica;
- }
- cout << "Macierz zostala usunieta" << endl;
- }
- Macierz suma(Macierz A, Macierz B)
- {
- if(A.liczba_kolumn != B.liczba_kolumn || A.liczba_wierszy != B.liczba_wierszy)
- {
- Macierz wynik(0);
- return wynik;
- }
- Macierz wynik(A.liczba_wierszy, A.liczba_kolumn);
- for(int i = 0; i < A.liczba_wierszy; i++)
- {
- for(int j = 0; j < A.liczba_kolumn; j++)
- {
- wynik.tablica[i][j] = A.tablica[i][j] + B.tablica[i][j];
- }
- }
- return wynik;
- }
- Macierz iloczyn(Macierz A, double x)
- {
- Macierz wynik(A.liczba_wierszy, A.liczba_kolumn);
- for(int i = 0; i < A.liczba_wierszy; i++)
- {
- for(int j = 0; j < A.liczba_kolumn; j++)
- {
- wynik.tablica[i][j] = A.tablica[i][j] * x;
- }
- }
- return wynik;
- }
- Macierz iloczyn_macierzy(Macierz A, Macierz B)
- {
- if(A.liczba_kolumn != B.liczba_wierszy)
- return Macierz(0);
- Macierz wynik(A.liczba_wierszy, B.liczba_kolumn);
- double suma;
- for(int i = 0; i < A.liczba_wierszy; i++)
- {
- for(int j = 0; j < B.liczba_kolumn; j++)
- {
- suma = 0;
- for(int x = 0; x < A.liczba_kolumn; x++)
- {
- suma += A.tablica[i][x] * B.tablica[x][j];
- }
- wynik.tablica[i][j] = suma;
- }
- }
- return wynik;
- }
- ostream & operator<<(ostream & os, const Macierz & ob)
- {
- for(int i = 0; i < ob.liczba_wierszy; i++)
- {
- for(int j = 0; j < ob.liczba_kolumn; j++)
- {
- os << ob.tablica[i][j] << '\t';
- }
- os << endl;
- }
- return os;
- }
- int main()
- {
- Macierz A("macierz");
- Macierz B("drugi");
- cout << A << endl;
- cout << B << endl;
- Macierz C = iloczyn_macierzy(A, B);
- cout << C << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment