Advertisement
Guest User

Untitled

a guest
Mar 21st, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.41 KB | None | 0 0
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4.  
  5. class macierz {
  6. int *pole;
  7. int m, n;
  8. public:
  9. macierz(int k, int l) {
  10. pole = new int[k * l];
  11. m = k;
  12. n = l;
  13. cout << "Obiekt zostal stworzony" << endl;
  14. };
  15.  
  16. ~macierz() {
  17. delete[] pole;
  18. pole = NULL;
  19. m = 0;
  20. n = 0;
  21. cout << "Obiekt zostal usuniety" << endl;
  22. };
  23. //metody
  24. void cinm() {
  25. cout << "Podawaj kolejne wartosci elementow macierzy" << endl;
  26. for (int i = 0; i < m * n; i++) {
  27. cin >> *(pole + i);
  28. }
  29. }
  30.  
  31. void coutm() {
  32. for (int i = 0; i < m * n; i++) {
  33. cout.width(4);
  34. cout << *(pole + i);
  35. if ((i + 1) % n == 0) cout << endl;
  36. }
  37. }
  38.  
  39. void put(int nrm, int nrn, int liczba) {
  40. if (nrm > m && nrn > n)
  41. cout << "Nie ma takiego elemntu macierzy" << endl;
  42. else
  43. *(pole + (nrm - 1) * n + nrn - 1) = liczba;
  44. }
  45.  
  46. int get(int nrm, int nrn) {
  47. if (nrm > m || nrn > n)
  48. return 0;
  49. return *(pole + (nrm - 1) * n + nrn - 1);
  50. }
  51.  
  52. int det() {
  53. int wartosc = 0;
  54. if (m != n)
  55. return 999;
  56.  
  57. if (m * n > 4) {
  58. for (int i = 1; i <= m; i++) {
  59. macierz minor(m - 1, n - 1);
  60. for (int j = 1; j <= m - 1; j++)
  61. for (int k = 1; k <= n - 1; k++) {
  62. if (k >= i)
  63. minor.put(j, k, get(j + 1, k + 1));
  64. else
  65. minor.put(j, k, get(j + 1, k));
  66. }
  67. wartosc += pow(-1, 1 + i) * get(1, i) * minor.det();
  68. }
  69. return wartosc;
  70. } else if (m * n == 4) {
  71. return get(1, 1) * get(2, 2) - get(1, 2) * get(2, 1);
  72. } else {
  73. return *(pole);
  74. }
  75. }
  76.  
  77. macierz product(macierz m2) {
  78. if (n != m2.m) {
  79. cout << " Nie mozna pomnozyc macierzy" << endl;
  80. } else {
  81. macierz wynik(0,0);
  82. wynik = macierz(m, m2.n);
  83. int zmienna = 0;
  84. for (int i = 1; i <= m2.n; i++) {
  85. for (int j = 1; j <= m; j++) {
  86. zmienna = 0;
  87. for (int k = 1; k <= n; k++) {
  88. zmienna += m2.get(j, k) * get(k, i);
  89. }
  90. wynik.put(j, i, zmienna);
  91. cout << zmienna << endl;
  92.  
  93. }
  94. }
  95. return wynik;
  96. }
  97. }
  98.  
  99.  
  100. //przeciazanie
  101. friend ostream& operator<<(ostream &out, const macierz &m);
  102. friend istream& operator>>(istream &in, const macierz &m);
  103. friend macierz operator*(macierz& m1, macierz& m2);
  104. macierz operator=(macierz& m2){
  105. m2 = macierz(m, n);
  106. for(int i=1; i<=m*m2.n; i++) *(m2.pole)=*(pole);
  107. }
  108. };
  109.  
  110. ostream & operator<< (ostream &out,const macierz& m){
  111. for (int i = 0; i < m.m * m.n; i++) {
  112. out.width(4);
  113. out << *(m.pole + i);
  114. if ((i + 1) % m.n == 0) out << endl;
  115. }
  116. }
  117. istream& operator>>(istream &in, const macierz &m){
  118. cout << "Podawaj kolejne wartosci elementow macierzy" << endl;
  119. for (int i = 0; i < m.m * m.n; i++) {
  120. in >> *(m.pole + i);
  121. }
  122. }
  123. macierz operator*(macierz& m1, macierz& m2){
  124. if (m1.n != m2.m) {
  125. cout << " Nie mozna pomnozyc macierzy" << endl;
  126. } else {
  127. macierz wynik(0,0);
  128. wynik = macierz(m1.m, m2.n);
  129. int zmienna = 0;
  130. for (int i = 1; i <= m2.n; i++) {
  131. for (int j = 1; j <= m1.m; j++) {
  132. zmienna = 0;
  133. for (int k = 1; k <= m1.n; k++) {
  134. zmienna += m2.get(j, k) * m1.get(k, i);
  135. }
  136. wynik.put(j, i, zmienna);
  137.  
  138. }
  139. }
  140. return wynik;
  141. }
  142. }
  143.  
  144.  
  145.  
  146. int main(){
  147. int m, n;
  148. cout << "Wpisz wymiar macierzy m x n" << endl;
  149. cout << "Wymiar m: ";
  150. cin >> m;
  151. cout << "Wymiar n: ";
  152. cin >> n;
  153. macierz macierz1(m, n);
  154. macierz1.cinm();
  155. macierz1.coutm();
  156. cout << macierz1.det() << endl;
  157. cout << macierz1;
  158. macierz macierz2(3,2);
  159. cin >> macierz2;
  160. macierz macierz3(2,2);
  161. cin >> macierz3;
  162. cout << macierz1*macierz2;
  163. // cout << macierz1=macierz;
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement