Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <math.h>
- using namespace std;
- class macierz {
- int *pole;
- int m, n;
- public:
- macierz(int k, int l) {
- pole = new int[k * l];
- m = k;
- n = l;
- cout << "Obiekt zostal stworzony" << endl;
- };
- ~macierz() {
- delete[] pole;
- pole = NULL;
- m = 0;
- n = 0;
- cout << "Obiekt zostal usuniety" << endl;
- };
- //metody
- void cinm() {
- cout << "Podawaj kolejne wartosci elementow macierzy" << endl;
- for (int i = 0; i < m * n; i++) {
- cin >> *(pole + i);
- }
- }
- void coutm() {
- for (int i = 0; i < m * n; i++) {
- cout.width(4);
- cout << *(pole + i);
- if ((i + 1) % n == 0) cout << endl;
- }
- }
- void put(int nrm, int nrn, int liczba) {
- if (nrm > m && nrn > n)
- cout << "Nie ma takiego elemntu macierzy" << endl;
- else
- *(pole + (nrm - 1) * n + nrn - 1) = liczba;
- }
- int get(int nrm, int nrn) {
- if (nrm > m || nrn > n)
- return 0;
- return *(pole + (nrm - 1) * n + nrn - 1);
- }
- int det() {
- int wartosc = 0;
- if (m != n)
- return 999;
- if (m * n > 4) {
- for (int i = 1; i <= m; i++) {
- macierz minor(m - 1, n - 1);
- for (int j = 1; j <= m - 1; j++)
- for (int k = 1; k <= n - 1; k++) {
- if (k >= i)
- minor.put(j, k, get(j + 1, k + 1));
- else
- minor.put(j, k, get(j + 1, k));
- }
- wartosc += pow(-1, 1 + i) * get(1, i) * minor.det();
- }
- return wartosc;
- } else if (m * n == 4) {
- return get(1, 1) * get(2, 2) - get(1, 2) * get(2, 1);
- } else {
- return *(pole);
- }
- }
- macierz product(macierz m2) {
- if (n != m2.m) {
- cout << " Nie mozna pomnozyc macierzy" << endl;
- } else {
- macierz wynik(0,0);
- wynik = macierz(m, m2.n);
- int zmienna = 0;
- for (int i = 1; i <= m2.n; i++) {
- for (int j = 1; j <= m; j++) {
- zmienna = 0;
- for (int k = 1; k <= n; k++) {
- zmienna += m2.get(j, k) * get(k, i);
- }
- wynik.put(j, i, zmienna);
- cout << zmienna << endl;
- }
- }
- return wynik;
- }
- }
- //przeciazanie
- friend ostream& operator<<(ostream &out, const macierz &m);
- friend istream& operator>>(istream &in, const macierz &m);
- friend macierz operator*(macierz& m1, macierz& m2);
- macierz operator=(macierz& m2){
- m2 = macierz(m, n);
- for(int i=1; i<=m*m2.n; i++) *(m2.pole)=*(pole);
- }
- };
- ostream & operator<< (ostream &out,const macierz& m){
- for (int i = 0; i < m.m * m.n; i++) {
- out.width(4);
- out << *(m.pole + i);
- if ((i + 1) % m.n == 0) out << endl;
- }
- }
- istream& operator>>(istream &in, const macierz &m){
- cout << "Podawaj kolejne wartosci elementow macierzy" << endl;
- for (int i = 0; i < m.m * m.n; i++) {
- in >> *(m.pole + i);
- }
- }
- macierz operator*(macierz& m1, macierz& m2){
- if (m1.n != m2.m) {
- cout << " Nie mozna pomnozyc macierzy" << endl;
- } else {
- macierz wynik(0,0);
- wynik = macierz(m1.m, m2.n);
- int zmienna = 0;
- for (int i = 1; i <= m2.n; i++) {
- for (int j = 1; j <= m1.m; j++) {
- zmienna = 0;
- for (int k = 1; k <= m1.n; k++) {
- zmienna += m2.get(j, k) * m1.get(k, i);
- }
- wynik.put(j, i, zmienna);
- }
- }
- return wynik;
- }
- }
- int main(){
- int m, n;
- cout << "Wpisz wymiar macierzy m x n" << endl;
- cout << "Wymiar m: ";
- cin >> m;
- cout << "Wymiar n: ";
- cin >> n;
- macierz macierz1(m, n);
- macierz1.cinm();
- macierz1.coutm();
- cout << macierz1.det() << endl;
- cout << macierz1;
- macierz macierz2(3,2);
- cin >> macierz2;
- macierz macierz3(2,2);
- cin >> macierz3;
- cout << macierz1*macierz2;
- // cout << macierz1=macierz;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement