Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.10 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #include<fstream>
  3. using namespace std;
  4. ifstream f("prob.in");
  5. ofstream g("prob.out");
  6. // Dimension of input square matrix
  7. int prim(int a) {
  8. if(a < 2)
  9. return 0;
  10. for(int i = 2; i * i <= a; i++)
  11. if(a % i == 0)
  12. return 0;
  13. return 1;
  14. }
  15.  
  16. // Function to get determinant of matrix
  17. int determinant(int mat[10][10], int n)
  18. {
  19. int num1,num2,det = 1,index,total = 1; // Initialize result
  20.  
  21. // temporary array for storing row
  22. int temp[n + 1];
  23.  
  24. //loop for traversing the diagonal elements
  25. for(int i = 0; i < n; i++)
  26. {
  27. index = i; // intialize the index
  28.  
  29. //finding the index which has non zero value
  30. while(mat[index][i] == 0 && index < n) {
  31. index++;
  32.  
  33. }
  34. if(index == n) // if there is non zero element
  35. {
  36. // the determinat of matrix as zero
  37. continue;
  38.  
  39. }
  40. if(index != i)
  41. {
  42. //loop for swaping the diagonal element row and index row
  43. for(int j = 0; j < n; j++)
  44. {
  45. swap(mat[index][j],mat[i][j]);
  46.  
  47. //determinant sign changes when we shift rows
  48. //go through determinant properties
  49. det = det*pow(-1,index-i);
  50.  
  51. }
  52. }
  53.  
  54. //storing the values of diagonal row elements
  55. for(int j = 0; j < n; j++)
  56. {
  57. temp[j] = mat[i][j];
  58.  
  59. }
  60. //traversing every row below the diagonal element
  61. for(int j = i+1; j < n; j++)
  62. {
  63. num1 = temp[i]; //value of diagonal element
  64. num2 = mat[j][i]; //value of next row element
  65.  
  66. //traversing every column of row
  67. // and multiplying to every row
  68. for(int k = 0; k < n; k++)
  69. {
  70. //multiplying to make the diagonal
  71. // element and next row element equal
  72. mat[j][k] = (num1 * mat[j][k]) - (num2 * temp[k]);
  73.  
  74. }
  75. total = total * num1; // Det(kA)=kDet(A);
  76. }
  77.  
  78. }
  79.  
  80. //mulitplying the diagonal elements to get determinant
  81. for(int i = 0; i < n; i++)
  82. {
  83. det = det * mat[i][i];
  84.  
  85. }
  86. return (det/total); //Det(kA)/k=Det(A);
  87. }
  88.  
  89. // Driver code
  90. int main()
  91. {
  92. // i rand
  93. //j coloana
  94. int n, i, j,x;
  95. int m[10][10],a[10][10],b[1][10],c[10][10],d[10][10],w,e[10][10],h[10][10];
  96.  
  97. f >> n;
  98.  
  99.  
  100. for (i = 0; i < n; i++)
  101. {
  102. for (j = 0; j < n+1; j++)
  103. {
  104.  
  105. f >> m[i][j];
  106. }
  107. }
  108. g<<" Ati introdus matricea principala : "<<endl;
  109. for (i = 0; i < n; i++) {
  110. for (j = 0; j < n+1; j++)
  111. g << m[i][j] <<" ";
  112. g<<endl;
  113. }
  114. for (i = 0; i < n; i++)
  115. {
  116. for (j = 0; j < n+1; j++)
  117. {
  118.  
  119. a[i][j]=m[i][j];
  120.  
  121.  
  122.  
  123. }
  124. }
  125. for (i = 0; i < n; i++)
  126. {
  127. for (j = 0; j < n+1; j++)
  128. {
  129.  
  130. b[i][j]=a[i][j];
  131.  
  132.  
  133. }
  134. }
  135. for (i = 0; i < n; i++)
  136. {
  137. for (j = 0; j < n+1; j++)
  138. {
  139.  
  140. c[i][j]=b[i][j];
  141.  
  142.  
  143. }
  144. }
  145. for (i = 0; i < n; i++)
  146. {
  147. for (j = 0; j < n+1; j++)
  148. {
  149.  
  150. d[i][j]=c[i][j];
  151.  
  152.  
  153. }
  154. }
  155. for (i = 0; i < n; i++)
  156. {
  157. for (j = 0; j < n+1; j++)
  158. {
  159.  
  160. e[i][j]=d[i][j];
  161.  
  162.  
  163. }
  164. }
  165. for (i = 0; i < n; i++)
  166. {
  167. for (j = 0; j < n+1; j++)
  168. {
  169.  
  170. d[i][j]=e[i][j];
  171.  
  172.  
  173. }
  174. }
  175.  
  176.  
  177. int k=0;
  178. x=determinant(a, n);
  179. g<<" Determinantul principal : "<<x <<endl;
  180. if (x==0){ g<<" Sunt o infinitate de solutii"<<endl;}
  181. if(x!=0){
  182.  
  183.  
  184. if ( n>=2) {
  185. for (i = 0; i < n; i++)
  186. {
  187.  
  188. b[i][0]=b[i][n];
  189.  
  190.  
  191.  
  192. }
  193. int x1=0;
  194. x1=determinant(b, n);
  195. g<<" Determinantul lui x1 : "<<x1 <<endl;
  196. g<<" x1 : " << x1/x<<endl;
  197. for (i = 0; i < n; i++)
  198. {
  199.  
  200. c[i][1]=c[i][n];
  201.  
  202.  
  203.  
  204. }
  205. int x2=0;
  206. x2=determinant(c, n);
  207. g<<" Determinantul lui x2 : "<<x2 <<endl;
  208. g<<" x2 : " << x2/x<<endl;
  209. }
  210. if(n>=3){
  211.  
  212. for (i = 0; i < n; i++)
  213. {
  214.  
  215. d[i][2]=d[i][n];
  216.  
  217.  
  218.  
  219. }
  220. int x3=0;
  221. x3=determinant(d, n);
  222. g<<" Determinantul lui x3 : "<<x3 <<endl;
  223. g<<" x3 : " << x3/x<<endl;
  224. }
  225. if(n>=4){
  226.  
  227. for (i = 0; i < n; i++)
  228. {
  229.  
  230. e[i][3]=e[i][n];
  231.  
  232.  
  233.  
  234. }
  235. int x4=0;
  236. x4=determinant(e, n);
  237. g<<" Determinantul lui x4 : "<<x4 <<endl;
  238. g<<" x4 : " << x4/x<<endl;
  239. }
  240. if(n>=5){
  241.  
  242. for (i = 0; i < n; i++)
  243. {
  244.  
  245. h[i][4]=h[i][n];
  246.  
  247.  
  248.  
  249. }
  250. int x5=0;
  251. x5=determinant(h, n);
  252. g<<" Determinantul lui x5 : "<<x5 <<endl;
  253. g<<" x5 : " << x5/x<<endl;
  254. }
  255. }
  256.  
  257.  
  258.  
  259.  
  260. return 0;
  261. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement