Advertisement
CzarnyBarszcz

Untitled

Apr 3rd, 2020
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.73 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. using namespace std;
  5.  
  6. //Michal Szuleta
  7. void utworz(double **&M,const int m,const int n)
  8. {
  9. M = new double*[m];
  10. for(int i=0;i<m;i++)
  11. {
  12. M[i]=new double [n];
  13. }
  14. for (int i=0;i<m;i++)
  15. {
  16. for(int j=0;j<n;j++)
  17. {
  18. M[i][j]=0;
  19. }
  20. }
  21. }
  22. void zapisz(double **M,const unsigned int m,const unsigned int n)
  23. {
  24. cout<<m<<"x"<<n<<endl;
  25. cout<<endl;
  26. for(unsigned int i=0;i<m;i++)
  27. {
  28. for(unsigned int j=0;j<n;j++)
  29. {
  30. cout<<M[i][j]<<" ";
  31. }
  32. cout<<endl;
  33. }
  34. cout<<endl;
  35. }
  36. void usun(double **M,const int m)
  37. {
  38. for(int i=0;i<m;i++)
  39. {
  40. delete [] M[m];
  41. }
  42. delete [] M;
  43. }
  44. bool czytaj(double **&M,unsigned int &m,unsigned int &n,double **&N,unsigned int &p,unsigned &q)
  45. {
  46. cout<<"Macierz A!"<<endl;
  47. cout<<"Liczba wierszy :";
  48. cin>>m;
  49. cout<<"Liczba kolumn :";
  50. cin>>n;
  51. utworz(M,m,n);
  52. for(unsigned int i=0;i<m;i++)
  53. {
  54. for(unsigned int j=0;j<n;j++)
  55. {
  56. cin>>M[i][j];
  57. }
  58. }
  59. cout<<"Macierz B!"<<endl;
  60. cout<<"Liczba wierszy :";
  61. cin>>p;
  62. cout<<"Liczba kolumn :";
  63. cin>>q;
  64. utworz(N,p,q);
  65. for(unsigned int i=0;i<p;i++)
  66. {
  67. for(unsigned int j=0;j<q;j++)
  68. {
  69. cin>>N[i][j];
  70. }
  71. }
  72.  
  73. return true;
  74. }
  75. bool czytaj_losowo(double **&M,unsigned int &m,unsigned int &n,double **&N,unsigned int &p,unsigned &q)
  76. {
  77. cout<<"Macierz A!"<<endl;
  78. cout<<"Liczba wierszy :";
  79. cin>>m;
  80. cout<<"Liczba kolumn :";
  81. cin>>n;
  82. utworz(M,m,n);
  83. for(unsigned int i=0;i<m;i++)
  84. {
  85. for(unsigned int j=0;j<n;j++)
  86. {
  87. M[i][j]=rand()%10+1;
  88. }
  89. }
  90. cout<<"Macierz B!"<<endl;
  91. cout<<"Liczba wierszy :";
  92. cin>>p;
  93. cout<<"Liczba kolumn :";
  94. cin>>q;
  95. utworz(N,p,q);
  96. for(unsigned int i=0;i<p;i++)
  97. {
  98. for(unsigned int j=0;j<q;j++)
  99. {
  100. N[i][j]=rand()%10+1;
  101. }
  102. }
  103.  
  104. return true;
  105. }
  106. bool suma(double **M,unsigned int m,unsigned int n,double **N,unsigned int p,unsigned int q,double **&C)
  107. {
  108. if(m==p&&n==q)
  109. {
  110.  
  111. utworz(C,m,n);
  112. for(unsigned int i=0;i<n;i++)
  113. {
  114. for(unsigned int j=0;j<n;j++)
  115. {
  116. C[i][j]=M[i][j]+N[i][j];
  117. }
  118. }
  119. return true;
  120. }
  121. else
  122. return false;
  123. }
  124. bool roznica(double **M,unsigned int m,unsigned int n,double **N,unsigned int p,unsigned int q,double **&C)
  125. {
  126. if(m==p&&n==q)
  127. {
  128.  
  129. utworz(C,m,n);
  130. for(unsigned int i=0;i<n;i++)
  131. {
  132. for(unsigned int j=0;j<n;j++)
  133. {
  134. C[i][j]=M[i][j]-N[i][j];
  135. }
  136. }
  137. return true;
  138. }
  139. else
  140. return false;
  141. }
  142. bool iloczyn(double **M,unsigned int m,unsigned int n,double **N,unsigned int p,unsigned int q,double **&C)
  143. {
  144. if(n==p)
  145. {
  146.  
  147. utworz(C,m,n);
  148. for(unsigned int i=0;i<m;i++)
  149. {
  150. for(unsigned int k=0;k<q;k++)
  151. {
  152. for(unsigned int j=0;j<n;j++)
  153. {
  154. C[i][k]+=M[i][j]*N[j][k];
  155. }
  156. }
  157.  
  158. }
  159. return true;
  160. }
  161. else
  162. return false;
  163. }
  164. void transpose(double **N,unsigned int &p, unsigned &q,double **&C)
  165. {
  166. utworz(C,q,p);
  167. for(unsigned int i=0;i<p;i++)
  168. {
  169. for(unsigned int j=0;j<q;j++)
  170. {
  171. C[j][i]=N[i][j];
  172. }
  173. }
  174. }
  175. int main()
  176. {
  177.  
  178. double **C = 0;
  179. srand(time(NULL));
  180. double **A = 0, **B = 0;
  181. unsigned int n = 2, m = 3, p = 3, q = 2;
  182. if (czytaj_losowo(A, m, n, B, p, q)) {
  183. zapisz(A, m, n);
  184. zapisz(B, p, q);
  185. usun(A,m);
  186. usun(B,q);
  187. }
  188.  
  189.  
  190. if (czytaj(A, m, n, B, p, q)) {
  191. zapisz(A, m, n);
  192. zapisz(B, p, q);
  193. if(!suma(A, m, n, B, p, q, C)){
  194. cerr << "Macierze maja nieprawidlowe wymiary - suma niemozliwa" << endl;
  195. }
  196. else{
  197. cout << "suma macierzy" << endl;
  198. zapisz(C, m, n);
  199. usun(C,m);
  200. }
  201. if(!roznica(A, m, n, B, p, q, C)){
  202. cerr << "Macierze maja nieprawidlowe wymiary - roznica niemozliwa" << endl;
  203. }
  204. else{
  205. cout << "roznica macierzy" << endl;
  206. zapisz(C, m, n);
  207. usun(C,m);
  208. }
  209. if(!iloczyn(A, m, n, B, p, q, C)){
  210. cerr << "Macierze maja nieprawidlowe wymiary - iloczyn niemozliwy" << endl;
  211. }
  212. else{
  213. cout << "iloczyn macierzy" << endl;
  214. zapisz(C, m, q);
  215. usun(C,m);
  216. }
  217. cout << "macierz przed transponowaniem" << endl;
  218. zapisz(B, p, q);
  219. cout << "macierz transponowana" << endl;
  220. transpose(B, p, q, C);
  221. zapisz(C, q, p);
  222. usun(C,m);
  223. }
  224. usun(A,m);
  225. usun(B,p);
  226.  
  227. return 0;
  228. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement