Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ///adunare si inmultire matrici
- ///detereminant unei matrici patratice sau rang matrice dreptunghiulare
- #include<cstdio>
- #include<algorithm>
- using namespace std;
- int n, m, i, j, a[101][101], b[101][101], intz[101];
- void aduna(){
- ///aici matricile au aceeasi dimensiune
- scanf("%d%d", &n, &m);
- for (i=1;i<=n;i++) for (j=1;j<=m;j++) scanf("%d", &a[i][j]);
- for (i=1;i<=n;i++) for (j=1;j<=m;j++) scanf("%d", &b[i][j]);
- for (i=1;i<=n;i++) {for (j=1;j<=m;j++) printf("%d ", a[i][j]+b[i][j]); printf("\n");}
- }
- void inmulteste(){
- ///aici matricile au dimensiunile NxM si MxK
- int k, cntr, sum;
- scanf("%d%d%d", &n, &m, &k);
- for (i=1;i<=n;i++) for (j=1;j<=m;j++) scanf("%d", &a[i][j]);
- for (i=1;i<=m;i++) for (j=1;j<=k;j++) scanf("%d", &b[i][j]);
- for (i=1;i<=n;i++) {
- for (j=1;j<=k;j++) {
- sum=0;
- for (cntr=1;cntr<=m;cntr++)
- sum+=(a[i][cntr]*b[cntr][j]);
- printf("%d ", sum);
- }
- printf("\n");
- }
- }
- int inv(){
- ///calculeaza nr de inversiuni din permutarea intz[]
- int i, j, nr=0;
- for (i=1;i<n;i++) for (j=i+1;j<=n;j++) if (intz[i]>intz[j]) nr++;
- if (nr%2==0) return 1; else return -1;
- }
- int determinant(int n, int x, int y){
- int sum=0, prod;
- for (i=1;i<=n;i++) intz[i]=i;
- do {
- prod=1;
- for (i=1;i<=n;i++)
- prod*=a[x+i-1][y+intz[i]-1];
- sum+=inv()*prod;
- } while (next_permutation(intz+1, intz+n+1));
- return sum;
- }
- int rang(){
- ///o singura matrice de dimensiunea NxM
- int dim;
- scanf("%d%d", &n, &m);
- for (i=1;i<=n;i++) for (j=1;j<=m;j++) scanf("%d", &a[i][j]);
- if (n<=m) dim=n; else dim=m;
- while (dim>0) {
- for (i=1;i+dim-1<=n;i++)
- for (j=1;j+dim-1<=m;j++)
- if (determinant(dim, i, j)!=0) return dim;
- dim--;
- }
- return 0;
- }
- int main(){
- int op, x;
- freopen("in.txt","r",stdin);
- freopen("out.txt","w",stdout);
- scanf("%d", &op);
- switch(op) {
- case 1: {aduna(); break;}
- case 2: {inmulteste(); break;}
- case 3: {
- ///o singura matrice de dimensiune NxN
- scanf("%d", &n);
- for (i=1;i<=n;i++) for (j=1;j<=n;j++) scanf("%d", &a[i][j]);
- x=determinant(n, 1,1); printf("%d\n", x);
- break;
- }
- case 4: {x=rang(); printf("%d\n", x); break;}
- default: {printf("Operatie necunoscuta\n");}
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement