Advertisement
anacercel2410

Untitled

Feb 22nd, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.48 KB | None | 0 0
  1. ///adunare si inmultire matrici
  2. ///detereminant unei matrici patratice sau rang matrice dreptunghiulare
  3. #include<cstdio>
  4. #include<algorithm>
  5. using namespace std;
  6. int n, m, i, j, a[101][101], b[101][101], intz[101];
  7. void aduna(){
  8. ///aici matricile au aceeasi dimensiune
  9. scanf("%d%d", &n, &m);
  10. for (i=1;i<=n;i++) for (j=1;j<=m;j++) scanf("%d", &a[i][j]);
  11. for (i=1;i<=n;i++) for (j=1;j<=m;j++) scanf("%d", &b[i][j]);
  12. for (i=1;i<=n;i++) {for (j=1;j<=m;j++) printf("%d ", a[i][j]+b[i][j]); printf("\n");}
  13. }
  14. void inmulteste(){
  15. ///aici matricile au dimensiunile NxM si MxK
  16. int k, cntr, sum;
  17. scanf("%d%d%d", &n, &m, &k);
  18. for (i=1;i<=n;i++) for (j=1;j<=m;j++) scanf("%d", &a[i][j]);
  19. for (i=1;i<=m;i++) for (j=1;j<=k;j++) scanf("%d", &b[i][j]);
  20. for (i=1;i<=n;i++) {
  21. for (j=1;j<=k;j++) {
  22. sum=0;
  23. for (cntr=1;cntr<=m;cntr++)
  24. sum+=(a[i][cntr]*b[cntr][j]);
  25. printf("%d ", sum);
  26. }
  27. printf("\n");
  28. }
  29. }
  30. int inv(){
  31. ///calculeaza nr de inversiuni din permutarea intz[]
  32. int i, j, nr=0;
  33. for (i=1;i<n;i++) for (j=i+1;j<=n;j++) if (intz[i]>intz[j]) nr++;
  34. if (nr%2==0) return 1; else return -1;
  35. }
  36. int determinant(int n, int x, int y){
  37. int sum=0, prod;
  38. for (i=1;i<=n;i++) intz[i]=i;
  39. do {
  40. prod=1;
  41. for (i=1;i<=n;i++)
  42. prod*=a[x+i-1][y+intz[i]-1];
  43. sum+=inv()*prod;
  44. } while (next_permutation(intz+1, intz+n+1));
  45. return sum;
  46. }
  47. int rang(){
  48. ///o singura matrice de dimensiunea NxM
  49. int dim;
  50. scanf("%d%d", &n, &m);
  51. for (i=1;i<=n;i++) for (j=1;j<=m;j++) scanf("%d", &a[i][j]);
  52. if (n<=m) dim=n; else dim=m;
  53. while (dim>0) {
  54. for (i=1;i+dim-1<=n;i++)
  55. for (j=1;j+dim-1<=m;j++)
  56. if (determinant(dim, i, j)!=0) return dim;
  57. dim--;
  58. }
  59. return 0;
  60. }
  61. int main(){
  62. int op, x;
  63. freopen("in.txt","r",stdin);
  64. freopen("out.txt","w",stdout);
  65. scanf("%d", &op);
  66. switch(op) {
  67. case 1: {aduna(); break;}
  68. case 2: {inmulteste(); break;}
  69. case 3: {
  70. ///o singura matrice de dimensiune NxN
  71. scanf("%d", &n);
  72. for (i=1;i<=n;i++) for (j=1;j<=n;j++) scanf("%d", &a[i][j]);
  73. x=determinant(n, 1,1); printf("%d\n", x);
  74. break;
  75. }
  76. case 4: {x=rang(); printf("%d\n", x); break;}
  77. default: {printf("Operatie necunoscuta\n");}
  78. }
  79. return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement