Structures de dates: Matrice rares - Applications résolues
1) Opérations de base avec des matrice rares.
#include<stdio.h> #include<conio.h> #include <iostream> using namespace std; template <class T> class element { public: int lin; int col; int val; element() { lin=0; col=0; val=0; } element(int a, int b, int c) { lin=a; col=b; val=c; } }; // liste pour memoriser une matrice rare template <class T> class matrice { int nr_lin; int nr_col; int nr_elem; element<T> data[10]; public: matrice(); void atribuire(matrice<T> ob); matrice<T> creare(); // creer une matrice rare void print(); // aficher une matrice rare void adaugaElement(element<T> e); // ajouter un element void stergere(element<T> e); // effacer un element void modificaElement(element<T> e); //modifier un element void adunare(matrice<T> ob1, matrice<T> ob2); //adition de deux matrices rares //void inmultire(matrice<T> ob1, matrice<T> ob2); //multiplication de deux matrices rares //void inmulConstanta(int cst); //multiplication d’une matrice rare avec une constante matrice<T> transpusa(matrice<T> a); //calcul transposee }; template <class T> matrice<T>::matrice() { nr_col=0; //nombre de lignes nr_lin=0; //nombre de colonnes nr_elem=0; //nombre des elements nules } template <class T> void matrice<T>::atribuire(matrice<T> ob) { nr_lin=ob.nr_lin; nr_col=ob.nr_col; nr_elem=ob.nr_elem; for(int i=0; i<nr_elem; i++) data[i]=ob.data[i]; } template <class T> matrice<T> matrice<T>::creare() { cout <<"Nombre de lignes matrice= "; cin >>nr_lin; cout <<"Nombre de colonnes matrice= "; cin >>nr_col; cout <<"Nombres des elements non-nules en matrice= "; cin >>nr_elem; cout <<"Introduire les elements: " <<endl; for(int i=1; i<=nr_elem; i++) { cout <<"element " <<i+1 <<endl; cout<<"ligne= "; cin >>data[i].lin; cout<<"colonne= "; cin >>data[i].col; cout <<"valeur= "; cin >>data[i].val; } return *this; } template <class T> void matrice<T>::print() { for(int i=1; i<=nr_lin; i++) { for (int j=1; j<=nr_col; j++) { int ok=1; for(int k=1; k<=nr_elem; k++) if((data[k].lin==i) && (data[k].col==j)) { cout<<data[k].val <<" "; ok=0; } if(ok==1) cout <<"0 "; } cout <<endl; } } template <class T> void matrice<T>::adaugaElement(element<T> e) { int ok=1; for(int i=0; i<nr_elem; i++) if((data[i].lin == e.lin) && (data[i].col == e.col)) { data[i].val += e.val; ok=0; } if(ok==1) { nr_elem++; data[nr_elem-1].lin=e.lin; data[nr_elem-1].col=e.col; data[nr_elem-1].val=e.val; } } template <class T> void matrice<T>::stergere(element<T> e) { for(int i=1; i<nr_elem; i++) { if((data[i].lin == e.lin) && (data[i].col == e.col) && (data[i].val == e.val)) { data[i].val -= e.val; } } } template <class T> void matrice<T>::modificaElement(element<T> m) { for(int i=0; i<nr_elem; i++) { if((data[i].lin == m.lin) && (data[i].col == m.col)) { data[i].val= m.val; } } } template <class T> void matrice<T>::adunare(matrice<T> ob1, matrice<T> ob2) { atribuire(ob1); for(int i=0; i<ob2.nr_elem; i++) adaugaElement(ob2.data[i]); } //les lignes deviennent colonnes template <class T> matrice<T> matrice<T>::transpusa(matrice<T> a) { nr_lin=a.nr_col; nr_col=a.nr_lin; nr_elem=a.nr_elem; for(int i=0;i<=nr_elem;i++) {data[i].val=a.data[i].val; data[i].lin=a.data[i].col; data[i].col=a.data[i].lin; } return *this; } void main() { matrice<int>ob1; matrice<int>ob2; matrice<int>ob3; element<int>e; element<int>s; element<int>m; cout <<"Creer matrice 1 " <<endl; ob1.creare(); cout <<"Aficher matrice 1 " <<endl; ob1.print(); cout<<"Matrice transposee est: "<<endl; ob2.transpusa(ob1); ob2.print(); cout <<"Creer matrice 2 " <<endl; ob2.creare(); cout <<"Aficher matrice 2 " <<endl; ob2.print(); cout <<"ADDITION DE 2 MATRICES" <<endl; ob3.adunare(ob1, ob2); ob3.print(); cout <<"AJOUTER UN ELEMENT DANS MATRICE" <<endl; cout <<"ligne= "; cin >>e.lin; cout <<"colonne= "; cin >>e.col; cout <<"valeur= "; cin >>e.val; ob1.adaugaElement(e); ob1.print(); cout <<"EFFACER UN ELEMENT DANS MATRICE" <<endl; cout <<"ligne= "; cin >>s.lin; cout <<"colonne= "; cin >>s.col; cout <<"valeur= "; cin >>s.val; ob1.stergere(s); ob1.print(); cout <<"MODIFIER UN ELEMENT DANS MATRICE" <<endl; cout <<"ligne= "; cin >>m.lin; cout <<"colonne= "; cin >>m.col; cout <<"Nouvelle valeur= "; cin >>m.val; ob1.modificaElement(m); ob1.print(); int g; cin >>g; }