Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- void afisaretext(int &o)
- {
- cout<<'\n'<<'\n';
- cout<<" ALEGE O OPTIUNE:"<<'\n';
- cout<<" 1.Adunarea a doua matrici"<<'\n';
- cout<<" 2.Scaderea a doua matrici"<<'\n';
- cout<<" 3.Inmultirea unei matrici cu un scalar"<<'\n';
- cout<<" 4.Inmultirea a doua matrici"<<'\n';
- cout<<" 5.Ridicarea la putere a unei matrici"<<'\n';
- cout<<" 6.Calculul determinantului"<<'\n';
- cout<<" 7.Transpunerea unei matrici"<<'\n';
- cout<<" 8.Inversa unei matrici"<<'\n';
- cout<<" 0.Inchidere program"<<'\n'<<'\n';
- cout<<" Alegerea dumneavoastra este ";
- cin>>o;
- cout<<'\n'<<'\n';
- }
- void citirematrice(int n,int m,int v[105][105])
- {
- for(int i=1; i<=n; i++)
- for(int j=1; j<=m; j++)
- {
- cout<<"a["<<i<<"]["<<j<<"]=";
- cin>>v[i][j];
- }
- }
- void afisarematrice(int n,int m,int v[105][105])
- {
- cout<<"Matricea este"<<'\n';
- for(int i=1; i<=n; i++)
- {
- for(int j=1; j<=m; j++)
- cout<<v[i][j]<<' ';
- cout<<'\n';
- }
- cout<<'\n'<<'\n';
- }
- void adun(int n,int m,int v1[105][105],int v2[105][105])
- {
- for(int i=1; i<=n; i++)
- for(int j=1; j<=m; j++)
- v2[i][j]+=v1[i][j];
- }
- void adunarematrici()
- {
- int k,v1[105][105]= {0},v2[105][105]= {0},n,m;
- cout<<"Numarul de matrici adunate este ";
- cin>>k;
- cout<<'\n'<<"numar de linii a matricilor este ";
- cin>>n;
- cout<<'\n'<<"numar de coloane a matricilor este ";
- cin>>m;
- cout<<'/n';
- for(int i=1; i<=k; i++)
- {
- cout<<"matricea cu numarul "<<i<<'\n';
- citirematrice(n,m,v1);
- adun(n,m,v1,v2);
- }
- afisarematrice(n,m,v2);
- }
- void scad(int n,int m,int v1[105][105],int v2[105][105])
- {
- for(int i=1; i<=n; i++)
- for(int j=1; j<=m; j++)
- v2[i][j]=v2[i][j]-v1[i][j];
- }
- void scaderematrici()
- {
- int k,v1[105][105]= {0},v2[105][105]= {0},n,m;
- cout<<"Numarul de matrici scazute este ";
- cin>>k;
- cout<<'\n'<<"numar de linii a matricilor este ";
- cin>>n;
- cout<<"numar de coloane a matricilor este ";
- cin>>m;
- cout<<'/n';
- cout<<"matricea cu numarul 1"<<'\n';
- citirematrice(n,m,v2);
- for(int i=2; i<=k; i++)
- {
- cout<<"matricea cu numarul "<<i<<'\n';
- citirematrice(n,m,v1);
- scad(n,m,v1,v2);
- }
- afisarematrice(n,m,v2);
- }
- void inmultirescalar()
- {
- int v[105][105]= {0},k,n,m;
- cout<<"Scalarul este ";
- cin>>k;
- cout<<'\n'<<"numar de linii a matricilor este ";
- cin>>n;
- cout<<"numar de coloane a matricilor este ";
- cin>>m;
- cout<<'/n'<<"matricea este"<<'\n';
- citirematrice(n,m,v);
- for(int i=1; i<=n; i++)
- for(int j=1; j<=m; j++)
- v[i][j]*=k;
- afisarematrice(n,m,v);
- }
- void dublarematrice(int n,int m,int v1[105][105],int v2[105][105])
- {
- for(int i=1; i<=n; i++)
- for(int j=1; j<=m; j++)
- v1[i][j]=v2[i][j];
- }
- void inmultire(int n1,int m1,int n2,int m2,int v1[105][105],int v2[105][105])
- {
- int x[105][105]= {0};
- for(int i=1; i<=n1; i++)
- for(int j=1; j<=m2; j++)
- for(int k=1; k<=m1; k++)
- x[i][j]+=v1[i][k]*v2[k][j];
- dublarematrice(n1,m2,v1,x);
- }
- int inmultirematrici()
- {
- int k,v1[105][105]= {0},v2[105][105]= {0},n1,m1,n2,m2;
- cout<<"Numarul de matrici inmultite este ";
- cin>>k;
- cout<<'\n'<<"numar de linii a matrici 1 este ";
- cin>>n1;
- cout<<"numar de coloane a matrici 1 este ";
- cin>>m1;
- cout<<'/n';
- cout<<"matricea cu numarul 1"<<'\n';
- citirematrice(n1,m1,v1);
- for(int i=2; i<=k; i++)
- {
- cout<<'\n'<<"numar de linii a matrici "<<i<<" este ";
- cin>>n2;
- cout<<"numar de coloane a matricilor "<<i<<" este ";
- cin>>m2;
- cout<<'/n';
- cout<<"matricea cu numarul "<<i<<'\n';
- citirematrice(n2,m2,v2);
- if(m1==n2)
- {
- inmultire(n1,m1,n2,m2,v1,v2);
- m1=m2;
- }
- else
- {
- cout<<"Nu se poate efectua inmultirea deoarece nu corespunde numarul de linii sau coloane"<<'\n';
- return 0;
- }
- }
- cout<<"Matricea obtinuta in urma inmultirilor are "<<n1<<" lini si "<<m1<<" coloane"<<'\n';
- afisarematrice(n1,m1,v1);
- return 0;
- }
- void ridicarelaputere()
- {
- int k,v1[105][105]= {0},v2[105][105]= {0},n,m;
- cout<<"Puterea la care ridici matricia este ";
- cin>>k;
- cout<<'\n'<<"numar de linii a matrici este ";
- cin>>n;
- cout<<"numar de coloane a matrici este ";
- cin>>m;
- cout<<'/n';
- cout<<"matricea este"<<'\n';
- citirematrice(n,m,v2);
- dublarematrice(n,m,v1,v2);
- for(int i=1; i<k; i++)
- inmultire(n,m,n,m,v1,v2);
- afisarematrice(n,m,v1);
- }
- void trans(int &n,int &m,int v[105][105])
- {
- int x[105][105];
- for(int i=1; i<=n; i++)
- for(int j=1; j<=m; j++)
- x[j][i]=v[i][j];
- dublarematrice(m,n,v,x);
- int aux=n;
- n=m;
- m=aux;
- }
- void transpunere()
- {
- int v[105][105]= {0},n,m;
- cout<<'\n'<<"numar de linii a matrici este ";
- cin>>n;
- cout<<"numar de coloane a matrici este ";
- cin>>m;
- cout<<"matricea este"<<'\n';
- citirematrice(n,m,v);
- trans(n,m,v);
- cout<<"Matricea transpusa are "<<n<<" lini si "<<m<<" coloane"<<'\n';
- afisarematrice(n,m,v);
- }
- int cmmdc(int a,int b)
- {
- if(a*b==0)
- return a+b;
- while(b!=0)
- {
- int r=a%b;
- a=b;
- b=r;
- }
- return a;
- }
- int calcdetn(int n,int v[105][105])
- {
- if(n==1) return v[1][1];
- else
- {
- int det=0;
- for(int i=1; i<n; i++)
- {
- int q=cmmdc(v[n][n],v[i][n]);
- for(int j=n; j>=1; j--)
- v[i][j]=q/v[i][n]*v[i][j]-q/v[n][n]*v[n][j];
- }
- afisarematrice(n,n,v);
- return det+calcdetn(n-1,v);
- }
- }
- void calculdeterminant()
- {
- int v[105][105]= {0},n,k=0;
- cout<<'\n'<<"numar de linii si coloane a matrici este ";
- cin>>n;
- cout<<"matricea este"<<'\n';
- citirematrice(n,n,v);
- k=calcdetn(n,v);
- cout<<"Determinantul este "<<k;
- }
- int main()
- {
- int o;
- do
- {
- afisaretext(o);
- if(o==1) adunarematrici();
- if(o==2) scaderematrici();
- if(o==3) inmultirescalar();
- if(o==4) inmultirematrici();
- if(o==5) ridicarelaputere();
- if(o==6) calculdeterminant();
- if(o==7) transpunere();
- //if(o==8) invers
- }
- while(o!=0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement