// matriceraratempate.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include #include #include #include #include #include template class MatriceRara { T l[10];// l reprezinta vectorul liniilor elementelor nenule T c[10];//c reprezinta vectorul coloanelor elementelor nenule. T val[10]; //val reprezinta vectorul valorilor int dim; //dim serveste pentru memorarea numarului de elemente nenule, int m; //cate linii are matricea int n; //cate coloane are matricea public:MatriceRara(); MatriceRara(int,int,int); //constructor MatriceRara( MatriceRara &); //constructor de copiere ~MatriceRara(); //destructor MatriceRara operator+=(MatriceRara & ); // operator pentru adaugarea unui triplet MatriceRara operator -=(MatriceRara & ); //operatorul pentru eliminarea unui operator MatriceRara operator+(MatriceRara & ); // operatorul care implementeaza operatia de adunare MatriceRara operator-(MatriceRara & ); //operatorul pentru implementarea operatiei de sacdere MatriceRara operator *(MatriceRara &x); //operatorul pentru implementarea operatei de inmultire MatriceRara operator*(float *v); //operatorul pentru implementarea operatiei de imnultire cu un vector. MatriceRara &operator =( MatriceRara &); //operatorul de atribuire T operator[](int i) {return val[i];} //Operatorul [] pentru adresarea unui element friend ostream & operator<<(ostream &, MatriceRara&); //operatorul pentru intrari standard de date friend istream & operator>>(istream &, MatriceRara&); //operatorul pentru iesiri standard de date int Nr_linii(); //determina numarul liniilor matricei int Nr_coloane(); //determina numarul coloanelor matricei float Grad(); //determina gradul de umplere }; template MatriceRara ::MatriceRara() { } template MatriceRara ::MatriceRara(int ii,int jj,int iii) { m=ii; n=jj; dim=iii; } template MatriceRara MatriceRara ::operator +=(MatriceRara & x) { MatriceRara nou(m,n,dim+1); int lin,col; float va; for(int i=0;i>lin; if (lin>col; if (col>va; if (va==0) {vb=0; cout<<"Gresit!Valoare nenula\n"; } else {x.val[i]=va; vb=1; } } while(!vb); // cin>>va; nou.val[dim]=va; *this=nou; return *this; } template MatriceRara MatriceRara ::operator -=(MatriceRara & x) { MatriceRara nou(m,n,dim-1); for(int i=0;i MatriceRara ::MatriceRara ( MatriceRara &x) { m=x.m; n=x.n; dim=x.dim; for(int i=0;i MatriceRara MatriceRara ::operator +(MatriceRara & x) { MatriceRara p; int i,j,k; i=j=k=0; while((ix.l[j]) j++; else if (c[i]x.c[j]) j++; else { k++; if(!(val[i]+x.val[j])) k++; i++;j++; } } p.dim=dim+x.dim-k; for(i=0,j=0,k=0;kx.l[j]) { p.l[k]=x.l[j]; p.c[k]=x.c[j]; p.val[k]=x.val[j]; j++;k++; } else if (c[i]x.c[j]) { p.l[k]=x.l[j]; p.c[k]=x.c[j]; p.val[k]=x.val[j]; j++;k++; } else if (!(val[i]+x.val[j])) { i++; j++;} else { p.l[k]=l[i]; p.c[k]=c[i]; p.val[k]=val[i]+x.val[j]; j++;i++;k++; } } return p; } template MatriceRara MatriceRara ::operator -(MatriceRara & x) { MatriceRara p; int i,j,k; i=j=k=0; while((ix.l[j]) j++; else if (c[i]x.c[j]) j++; else { k++; if(!(val[i]-x.val[j])) k++; i++;j++; } } p.dim=dim+x.dim-k; for(i=0,j=0,k=0;kx.l[j]) { p.l[k]=x.l[j]; p.c[k]=x.c[j]; p.val[k]=-x.val[j]; j++;k++; } else if (c[i]x.c[j]) { p.l[k]=x.l[j]; p.c[k]=x.c[j]; p.val[k]=-x.val[j]; j++;k++; } else if (!(val[i]-x.val[j])) { i++; j++;} else { p.l[k]=l[i]; p.c[k]=c[i]; p.val[k]=val[i]-x.val[j]; j++;i++;k++; } } return p; } template MatriceRara &MatriceRara ::operator =(MatriceRara &x) { m=x.m; n=x.n; dim=x.dim; for(int i=0;i MatriceRara MatriceRara ::operator*(float *v) { MatriceRara r; int k=0; int j=0; for(int i=0;i MatriceRara MatriceRara :: operator *(MatriceRara &x) { int i,k,j; MatriceRara d,p; for(k=0,i=0;i istream &operator>>(istream &intrare, MatriceRara &x) { int i,t; float f; cout<<"Liniile matricei unde sunt elemente nenule: \n"; for(i=0;i>t; if (t>=x.m) {vb=0; cout<<"Gresit!Mai introduceti o data!\n"; } else {x.l[i]=t; vb=1; } } while(!vb); } cout<<"Coloanele matricei unde sunt elemente nenule: \n"; for(i=0;i>t; if (t>=x.n) {vb=0; cout<<"Gresit!Mai introduceti o data!\n"; } else {x.c[i]=t; vb=1; } } while(!vb); } cout<<"Valorile elementelor nenule sunt: \n"; for(i=0;i>f; if (f==0) {vb=0; cout<<"Gresit!Valoare nenula\n"; } else {x.val[i]=f; vb=1; } } while(!vb); } return intrare; } template ostream &operator<<(ostream &iesire, MatriceRara &x) { int i; cout<<"\nRezultatul este: "< int MatriceRara :: Nr_linii() { return m; } template int MatriceRara :: Nr_coloane() { return n; } template float MatriceRara :: Grad() {float gr; gr= float((dim*100)/(m*n)); return gr; } template MatriceRara ::~MatriceRara() { } int main(int argc, char* argv[]) { MatriceRara x(4,4,3),c=x; MatriceRara b(4,4,3); cin>>x; cout<>b; cout<