begin process at 2010 03 16 16:35:22
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > MATRICE CREUSE

MATRICE CREUSE


 Information sur la source

Note :
1 / 10 - par 1 personne
1,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths & Algorithmes Niveau :Débutant Date de création :27/12/2004 Vu :3 487

Auteur : jirani

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
pour copleter ce code il vous faut laz fonction mygraph.cpp , c simple et bon à réaliser;)

Source

  • #include "\MyGraph.cpp"
  • struct Noeud
  • {
  • int l,c,v;
  • struct Noeud *suivL,*suivC;
  • };
  • class MatriceCreuse
  • {
  • public:
  • MatriceCreuse (int MaxL, int MaxC);
  • ~MatriceCreuse();
  • void Assigner (int ligne, int colonne, int valeur);
  • int Extraire (int ligne, int colonne);
  • void Lire ();
  • void Ecrire (int Ld, int Lf, int Cd, int Cf);
  • MatriceCreuse operator + (MatriceCreuse M1);
  • int NbLignes() { return MaxL; }
  • int NbColonnes() { return MaxC; }
  • private:
  • int MaxL, MaxC;
  • struct Noeud * VPL[1000], * VPC[1000];
  • };
  • void AffichageMatrice(MatriceCreuse M)
  • {
  • int PosX=4,PosY=3;
  • int Ld,Lf,Cd,Cf;
  • if(M.NbLignes()<21) Lf=M.NbLignes() ; else Lf=20;
  • if(M.NbColonnes()<15) Cf=M.NbColonnes() ; else Cf=14;
  • gotoxy(PosX,PosY);
  • M.Ecrire(1,Lf,1,Cf);
  • textcolor(0);
  • textbackground(15);
  • if(M.NbLignes()>20){gotoxy(79,22);cprintf("%c",25);}
  • if(M.NbColonnes()>14){gotoxy(77,1);cprintf("%c",16);}
  • PosX=8;
  • int NumC=1, NumL=1;
  • gotoxy(PosX,PosY);
  • char c1='!';
  • do
  • {
  • gotoxy(10,23);
  • cout <<setw(4)<<NumL<<":"<<setw(4)<<NumC;
  • if(PosX>73) PosX=73;
  • if(PosY>22) PosY=22;
  • gotoxy(PosX,PosY);
  • c1=getch();
  • if(c1==71) //HOME
  • {
  • PosX=8;
  • NumC=1;
  • }
  • else
  • if(c1==72) //FLECHE HAUT
  • {
  • if(PosY>3 && NumL<=20) PosY--;
  • if(NumL>1 ) NumL--;
  • }
  • else
  • if(c1==73) //EXTREMITE HAUT
  • {
  • PosY=3;
  • NumL=1;
  • }
  • else
  • if(c1==75) //FLECHE GAUCHE
  • {
  • if(PosX>8 &&NumC<=14) PosX-=5;
  • if(NumC>1) NumC--;
  • }
  • else
  • if(c1==77) //FLECHE DROIT
  • {
  • if( PosX < 5*M.NbColonnes()) PosX+=5;
  • if( NumC < M.NbColonnes()) NumC++;
  • }
  • else
  • if(c1==79) //FIN
  • {
  • PosX=(M.NbColonnes()*5)+3;
  • NumC=M.NbColonnes();
  • }
  • else
  • if(c1==80) //FLECHE BAS
  • {
  • if( PosY < M.NbLignes()+2) PosY++;
  • if( NumL < M.NbLignes()) NumL++;
  • }
  • else
  • if(c1==81) //EXTREMITE BAS
  • {
  • PosY=M.NbLignes()+2;
  • NumL=M.NbLignes();
  • }
  • gotoxy(4,3);
  • if(NumL>20) Ld=NumL-19;else Ld=1;
  • if(M.NbLignes()<=20) Lf=M.NbLignes(); else Lf=Ld+19;
  • if(NumC>14) Cd=NumC-13;else Cd=1;
  • if(M.NbColonnes()<=14) Cf=M.NbColonnes(); else Cf=Cd+13;
  • textcolor(0);
  • textbackground(15);
  • gotoxy(79,3);cprintf(" ");
  • gotoxy(79,22);cprintf(" ");
  • gotoxy(3,1);cprintf(" ");
  • gotoxy(77,1);cprintf(" ");
  • M.Ecrire(Ld,Lf,Cd,Cf);
  • if(NumL>20) {gotoxy(79,3);cprintf("%c",24);}
  • if(M.NbLignes()>20 && NumL<M.NbLignes()){gotoxy(79,22);cprintf("%c",25);}
  • if(NumC>14 ) {gotoxy(3,1);cprintf("%c",17);}
  • if(M.NbColonnes()>14 && NumC<M.NbColonnes()){gotoxy(77,1);cprintf("%c",16);}
  • gotoxy(PosX,PosY);
  • }
  • while(c1!=27);
  • }
  • void Cadre()
  • {
  • textbackground(15);textcolor(0);
  • clrscr();printf("\n");
  • printf(" ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n");
  • for( int i=0;i<20;i++)
  • printf(" º º\n");
  • printf(" ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n");
  • textbackground(0);textcolor(15);gotoxy(3,24);
  • }
  • MatriceCreuse::MatriceCreuse(int ML, int MC)
  • {
  • MaxL=ML;MaxC=MC;
  • for(int l=1;l<=MaxL;l++) {VPL[l]=NULL;}
  • for(int c=1;c<=MaxC;c++) {VPC[c]=NULL;}
  • }
  • MatriceCreuse::~MatriceCreuse()
  • {
  • /*struct Noeud *n=NULL,*ns=NULL;
  • for(int l=1;l<=this->NbLignes();l++)
  • {
  • n=VPL[l];
  • ns=n->suivL;
  • while(n)
  • {
  • delete n;
  • n=ns;
  • ns=ns->suivL;
  • }
  • delete n;delete ns;
  • } */
  • for(int l=1;l<=this->NbLignes();l++) {VPL[l]=NULL ;}
  • for(int c=1;c<=this->NbColonnes();c++) {VPC[c]=NULL ;}
  • }
  • void MatriceCreuse::Assigner(int l, int c, int v)
  • {
  • struct Noeud *nouv , *courant,*prec;
  • nouv =(struct Noeud *)malloc (sizeof(struct Noeud));
  • /* courant =(struct Noeud *)malloc (sizeof(struct Noeud));
  • prec =(struct Noeud *)malloc (sizeof(struct Noeud));
  • */ if(v) {nouv->l=l;nouv->c=c;nouv->v=v;nouv->suivL=NULL;nouv->suivC=NULL;}
  • /*INSERTION DANS LA LIGNE L*/
  • courant = VPL[l];
  • while(courant && (courant->c< c))
  • {
  • prec=courant;
  • courant=courant->suivL;
  • }
  • if (v)
  • {
  • nouv->suivL=courant;
  • if (courant==VPL[l]) VPL[l]=nouv;else prec->suivL=nouv;
  • }
  • else
  • {
  • if(courant==VPL[l]) VPL[l]=courant->suivL; else prec->suivL=courant->suivL;
  • }
  • /*INSERTION DANS LA COLONNE C*/
  • courant=VPC[c];
  • while(courant && (courant->l < l))
  • {
  • prec=courant;
  • courant=courant->suivC;
  • }
  • if (v)
  • {
  • nouv->suivC=courant;
  • if (courant==VPC[c]) VPC[c]=nouv; else prec->suivC=nouv;
  • }
  • else
  • {
  • if(courant==VPC[c]) VPC[c]=courant->suivC; else prec->suivC=courant->suivC;
  • }
  • }
  • int MatriceCreuse::Extraire( int l, int c )
  • {
  • struct Noeud *Ln;
  • int trouve=0;
  • Ln=VPL[l];
  • while(Ln && trouve==0)
  • {
  • if (Ln->c==c) {trouve =1;return Ln->v;}
  • else if(Ln->c > c) return 0;
  • else Ln=Ln->suivL;
  • }
  • if (trouve==0) return 0;
  • }
  • void MatriceCreuse::Lire()
  • {
  • for(int l=0; l<MaxL ;l++)
  • for(int c=0; c<MaxC ; c++)
  • Extraire(l,c);
  • }
  • void MatriceCreuse::Ecrire(int Ld, int Lf, int Cd, int Cf)
  • {
  • struct Noeud *ln;
  • int elt,posY=3;
  • int ll,cc;
  • for(ll=Ld; ll<=Lf; ll++)
  • {
  • gotoxy(4,posY++);
  • for(cc=Cd; cc<=Cf; cc++)
  • {
  • int e=Extraire(ll,cc);
  • cout <<setw(5)<<e;
  • }
  • printf("\n");
  • }
  • }
  • MatriceCreuse MatriceCreuse::operator + (MatriceCreuse M1)
  • {
  • int v1=0,v2=0;
  • MatriceCreuse MR(this->NbLignes(),this->NbColonnes());
  • for (int l=1;l<=this->NbLignes();l++)
  • for (int c=1;c<=this->NbColonnes();c++)
  • {
  • v1=this->Extraire(l,c);
  • v2=M1.Extraire(l,c);
  • if (v1+v2) MR.Assigner(l,c,v1+v2);
  • }
  • return MR;
  • }
  • MatriceCreuse Multiplication(MatriceCreuse &m )
  • {
  • int l,c,e=0;
  • do
  • {
  • setfillstyle(1,0);
  • bar(20,335,610,460);
  • settextstyle(SMALL_FONT,0,5);
  • outtextxy(230,350,"Dimension de la 2Šme matrice :");
  • settextstyle(SMALL_FONT,0,5);
  • outtextxy(450,363,"Nombre de lignes :");
  • outtextxy(440,378,"Nombre de colonnes :");
  • line(520,368,525,368);
  • gotoxy(66,23);scanf("%d",&l);
  • setcolor(1); line(520,368,525,368);
  • setcolor(15);line(520,384,525,384);
  • gotoxy(66,24);scanf("%d",&c);
  • if(l!=m.NbColonnes())
  • {
  • bar(20,335,610,460);
  • int vl=m.NbLignes();
  • int vc=m.NbColonnes();
  • outtextxy(330,390,"Reprenez! le nombre de lignes de la 2Šme matrice ");
  • outtextxy(330,410,"est diff‚rent du nombre de colonnes de la 1Šre matrice:");
  • char*d;
  • outtextxy(320,430,itoa(vl,d,10));
  • outtextxy(340,430,"X");
  • outtextxy(360,430,itoa(vc,d,10));
  • getch();
  • }
  • }
  • while(l!=m.NbColonnes());
  • MatriceCreuse M2(l,c);
  • setfillstyle(1,0);
  • bar(20,335,610,460);
  • settextstyle(SMALL_FONT,0,5);
  • outtextxy(300,350,"Assigner un ‚lement pour la 2Šme matrice ?(O/N)");
  • char r;
  • r=getch();
  • while(r==111)
  • {
  • int il,ic,iv;
  • setfillstyle(1,0);
  • bar(20,335,610,460);
  • settextstyle(SMALL_FONT,0,5);
  • outtextxy(458,348,"Ligne :");
  • outtextxy(450,363,"Colonne :");
  • outtextxy(454,378,"Valeur :");
  • do
  • { line(488,353,493,353);gotoxy(62,22);
  • scanf("%d",&il);
  • if(il<1||il>m.NbLignes())
  • {
  • setfillstyle(1,0);
  • bar(488,335,625,353);
  • }
  • }while(il<1||il>m.NbLignes());
  • setcolor(1); line(488,353,493,353);
  • setcolor(15);line(488,369,493,369);
  • do
  • { line(488,369,493,369);gotoxy(62,23);
  • scanf("%d",&ic);
  • if(ic<1||ic>m.NbColonnes())
  • {
  • setfillstyle(1,0);
  • bar(488,351,625,369);
  • }
  • }while(ic<1||ic>m.NbColonnes());
  • setcolor(1); line(488,369,493,369);
  • setcolor(15);line(488,387,493,387);
  • gotoxy(62,24);scanf("%d",&iv);
  • if (iv) M2.Assigner(il,ic,iv);
  • settextstyle(SMALL_FONT,0,5);
  • outtextxy(300,410,"Assigner autre ‚l‚ment ?(O/N)");
  • r=getch();
  • }
  • MatriceCreuse MatRes(m.NbLignes(),M2.NbColonnes());
  • for (l=1;l<=MatRes.NbLignes();l++)
  • for (c=1;c<=MatRes.NbColonnes();c++)
  • {
  • e=0;
  • for (int k=1;k<=M2.NbLignes();k++)
  • {
  • e=e+(m.Extraire(l,k)*M2.Extraire(k,c));
  • }
  • if (e) MatRes.Assigner(l,c,e);
  • }
  • closegraph();
  • clrscr();
  • Cadre();
  • cprintf("Fleche Gauche %c Fleche Haut %c Fleche Bas %c Fleche Droit %c Esc pour sortir ",17,24,25,16);
  • gotoxy(23,1);
  • cprintf("Resultat de la multiplication : Matrice %d X %d",MatRes.NbLignes(),MatRes.NbColonnes());
  • AffichageMatrice(MatRes);
  • return MatRes;
  • }
  • int main(void)
  • {
  • Dekhla();
  • int MxL, MxC;
  • settextstyle(SMALL_FONT,0,6);
  • outtextxy(200,320,"Dimension de la matrice creuse :");
  • outtextxy(201,320,"Dimension de la matrice creuse :");
  • settextstyle(SMALL_FONT,0,5);
  • outtextxy(450,363,"Nombre de lignes :");
  • outtextxy(440,378,"Nombre de colonnes :");
  • do
  • { line(520,368,525,368);gotoxy(66,23);
  • scanf("%d",&MxL);
  • if(MxL<1||MxL>1000)
  • {
  • setfillstyle(1,0);
  • bar(520,350,630,368);
  • }
  • }while(MxL<1||MxL>1000);
  • setcolor(1); line(520,368,525,368);
  • setcolor(15);line(520,384,525,384);
  • do
  • { line(520,384,525,384);gotoxy(66,24);
  • scanf("%d",&MxC);
  • if(MxC<1||MxC>1000)
  • {
  • setfillstyle(1,0);
  • bar(520,366,630,384);
  • }
  • }while(MxC<1||MxC>1000);
  • MatriceCreuse M(MxL,MxC);
  • char c='!';
  • Graphisme();
  • int val=1;
  • Twichia(pos);
  • while (val==1)
  • {
  • setfillstyle(1,0);
  • bar(150,180,450,380);
  • Twichia(pos);
  • MenuGrise();
  • MenuSurbrillant(pos);
  • c= getch();
  • if (c==13)
  • {
  • switch(pos)
  • {
  • case 1:
  • {
  • int il,ic,iv;
  • setfillstyle(1,0);
  • bar(20,140,610,460);
  • BAR();
  • settextstyle(SMALL_FONT,0,6);
  • outtextxy(140,320,"Assigner un ‚lement");
  • outtextxy(141,320,"Assigner un ‚lement");
  • settextstyle(SMALL_FONT,0,5);
  • outtextxy(458,348,"Ligne :");
  • outtextxy(450,363,"Colonne :");
  • outtextxy(454,378,"Valeur :");
  • do
  • { line(488,353,493,353);gotoxy(62,22);
  • scanf("%d",&il);
  • if(il<1||il>M.NbLignes())
  • {
  • setfillstyle(1,0);
  • bar(488,335,625,353);
  • }
  • }while(il<1||il>M.NbLignes());
  • setcolor(1); line(488,353,493,353);
  • setcolor(15);line(488,369,493,369);
  • do
  • { line(488,369,493,369);gotoxy(62,23);
  • scanf("%d",&ic);
  • if(ic<1||ic>M.NbColonnes())
  • {
  • setfillstyle(1,0);
  • bar(488,351,625,369);
  • }
  • }while(ic<1||ic>M.NbColonnes());
  • setcolor(1); line(488,369,493,369);
  • setcolor(15);line(488,387,493,387);
  • gotoxy(62,24);scanf("%d",&iv);
  • M.Assigner(il,ic,iv);
  • Graphisme();
  • break;
  • }
  • case 2:
  • {
  • int il,ic,iv;
  • setfillstyle(1,0);
  • bar(20,140,610,460);
  • BAR();
  • settextstyle(SMALL_FONT,0,6);
  • outtextxy(140,320,"Extraire un ‚lement");
  • outtextxy(141,320,"Extraire un ‚lement");
  • settextstyle(SMALL_FONT,0,5);
  • outtextxy(458,348,"Ligne :");
  • outtextxy(450,363,"Colonne :");
  • do
  • { line(488,353,493,353);gotoxy(62,22);
  • scanf("%d",&il);
  • if(il<1||il>M.NbLignes())
  • {
  • setfillstyle(1,0);
  • bar(488,335,625,353);
  • }
  • }while(il<1||il>M.NbLignes());
  • setcolor(1); line(488,353,493,353);
  • setcolor(15);line(488,369,493,369);
  • do
  • { line(488,369,493,369);gotoxy(62,23);
  • scanf("%d",&ic);
  • if(ic<1||ic>M.NbColonnes())
  • {
  • setfillstyle(1,0);
  • bar(488,351,625,369);
  • }
  • }while(ic<1||ic>M.NbColonnes());
  • setcolor(1); line(488,369,493,369);
  • setcolor(15);
  • int e=M.Extraire(il,ic);
  • char *s;
  • gotoxy(50,24);
  • outtextxy(430,390,"La valeur est :");
  • outtextxy(500,390,itoa(e,s,10));
  • getch();
  • Graphisme();
  • break;
  • }
  • case 3:
  • {
  • closegraph();
  • Cadre();
  • cprintf("Fleche Gauche %c Fleche Haut %c Fleche Bas %c Fleche Droit %c Esc pour sortir ",17,24,25,16);
  • gotoxy(32,1);
  • cprintf("Matrice %d X %d",M.NbLignes(),M.NbColonnes());
  • AffichageMatrice(M);
  • InitGraph();Graphisme();
  • break;
  • }
  • case 4:
  • {
  • setfillstyle(1,0);
  • bar(20,140,610,460);
  • BAR();
  • settextstyle(SMALL_FONT,0,6);
  • outtextxy(120,320,"Addition matricielle");
  • outtextxy(121,320,"Addition matricielle");
  • MatriceCreuse M1(M.NbLignes(),M.NbColonnes());
  • settextstyle(SMALL_FONT,0,5);
  • outtextxy(300,350,"Assigner un ‚lement pour la 2Šme matrice ?(O/N)");
  • char r;
  • r=getch();
  • while(r==111)
  • {
  • int il,ic,iv;
  • setfillstyle(1,0);
  • bar(20,335,610,460);
  • settextstyle(SMALL_FONT,0,5);
  • outtextxy(458,348,"Ligne :");
  • outtextxy(450,363,"Colonne :");
  • outtextxy(454,378,"Valeur :");
  • do
  • { line(488,353,493,353);gotoxy(62,22);
  • scanf("%d",&il);
  • if(il<1||il>M.NbLignes())
  • {
  • setfillstyle(1,0);
  • bar(488,335,625,353);
  • }
  • }while(il<1||il>M.NbLignes());
  • setcolor(1); line(488,353,493,353);
  • setcolor(15);line(488,369,493,369);
  • do
  • { line(488,369,493,369);gotoxy(62,23);
  • scanf("%d",&ic);
  • if(ic<1||ic>M.NbColonnes())
  • {
  • setfillstyle(1,0);
  • bar(488,351,625,369);
  • }
  • }while(ic<1||ic>M.NbColonnes());
  • setcolor(1); line(488,369,493,369);
  • setcolor(15);line(488,387,493,387);
  • gotoxy(62,24);scanf("%d",&iv);
  • M1.Assigner(il,ic,iv);
  • settextstyle(SMALL_FONT,0,5);
  • outtextxy(300,410,"Assigner autre ‚l‚ment ?(O/N)");
  • r=getch();
  • }
  • M=M+M1;
  • closegraph();
  • Cadre();
  • cprintf("Fleche Gauche %c Fleche Haut %c Fleche Bas %c Fleche Droit %c Esc pour sortir ",17,24,25,16);
  • gotoxy(25,1);
  • cprintf("Resultat de l'addition : Matrice %d X %d",M.NbLignes(),M.NbColonnes());
  • AffichageMatrice(M);
  • InitGraph();Graphisme();
  • break;
  • }
  • case 5:
  • {
  • setfillstyle(1,0);
  • bar(20,140,610,460);
  • BAR();
  • settextstyle(SMALL_FONT,0,6);
  • outtextxy(140,320,"Multiplication matricielle");
  • outtextxy(141,320,"Multiplication matricielle");
  • Multiplication(M);
  • InitGraph();Graphisme();
  • break;
  • }
  • case 6:
  • {
  • exit(-1);
  • break;
  • }
  • }
  • }
  • else if (c==72)
  • {
  • if (pos>1) pos--; else pos=6;
  • }
  • else if (c==80)
  • {
  • if (pos<6) pos++; else pos=1;
  • }
  • }
  • closegraph();
  • return 0;
  • }
#include "\MyGraph.cpp"

struct Noeud
{
	int l,c,v;
	struct Noeud *suivL,*suivC;
};

class MatriceCreuse
{
	public:
		MatriceCreuse (int MaxL, int MaxC);
		~MatriceCreuse();
		void Assigner (int ligne, int colonne, int valeur);
		int  Extraire (int ligne, int colonne);
		void Lire     ();
		void Ecrire   (int Ld, int Lf, int Cd, int Cf);
		MatriceCreuse operator + (MatriceCreuse M1);
		int NbLignes()   { return MaxL; }
		int NbColonnes() { return MaxC; }
	private:
		int MaxL, MaxC;
		struct Noeud * VPL[1000], * VPC[1000];
};

void AffichageMatrice(MatriceCreuse M)
{
	int PosX=4,PosY=3;
	int Ld,Lf,Cd,Cf;
	if(M.NbLignes()<21) Lf=M.NbLignes() ; else Lf=20;
	if(M.NbColonnes()<15) Cf=M.NbColonnes() ; else Cf=14;
	gotoxy(PosX,PosY);
	M.Ecrire(1,Lf,1,Cf);
	textcolor(0);
	textbackground(15);
	if(M.NbLignes()>20){gotoxy(79,22);cprintf("%c",25);}
	if(M.NbColonnes()>14){gotoxy(77,1);cprintf("%c",16);}
	PosX=8;
	int NumC=1, NumL=1;
	gotoxy(PosX,PosY);
	char c1='!';
	do
	{
		gotoxy(10,23);
		cout <<setw(4)<<NumL<<":"<<setw(4)<<NumC;
		if(PosX>73) PosX=73;
		if(PosY>22) PosY=22;
		gotoxy(PosX,PosY);
		c1=getch();
		if(c1==71)      //HOME
		{
			PosX=8;
			NumC=1;
		}
		else
		if(c1==72)      //FLECHE HAUT
		{
			if(PosY>3 && NumL<=20) PosY--;
			if(NumL>1 ) NumL--;
		}
		else
		if(c1==73)      //EXTREMITE HAUT
		{
			PosY=3;
			NumL=1;
		}
		else
		if(c1==75)      //FLECHE GAUCHE
		{
			if(PosX>8 &&NumC<=14) PosX-=5;
			if(NumC>1) NumC--;
		}
		else
		if(c1==77)      //FLECHE DROIT
		{
			if( PosX < 5*M.NbColonnes()) PosX+=5;
			if( NumC < M.NbColonnes()) NumC++;
		}
		else
		if(c1==79)      //FIN
		{
			PosX=(M.NbColonnes()*5)+3;
			NumC=M.NbColonnes();
		}
		else
		if(c1==80)      //FLECHE BAS
		{
			if( PosY < M.NbLignes()+2) PosY++;
			if( NumL < M.NbLignes()) NumL++;
		}
		else
		if(c1==81)      //EXTREMITE BAS
		{
			PosY=M.NbLignes()+2;
			NumL=M.NbLignes();
		}
		gotoxy(4,3);
		if(NumL>20) Ld=NumL-19;else Ld=1;
		if(M.NbLignes()<=20) Lf=M.NbLignes(); else Lf=Ld+19;
		if(NumC>14) Cd=NumC-13;else Cd=1;
		if(M.NbColonnes()<=14) Cf=M.NbColonnes(); else Cf=Cd+13;
		textcolor(0);
		textbackground(15);
		gotoxy(79,3);cprintf(" ");
		gotoxy(79,22);cprintf(" ");
		gotoxy(3,1);cprintf(" ");
		gotoxy(77,1);cprintf(" ");
		M.Ecrire(Ld,Lf,Cd,Cf);
		if(NumL>20) {gotoxy(79,3);cprintf("%c",24);}
		if(M.NbLignes()>20 && NumL<M.NbLignes()){gotoxy(79,22);cprintf("%c",25);}
		if(NumC>14 ) {gotoxy(3,1);cprintf("%c",17);}
		if(M.NbColonnes()>14 && NumC<M.NbColonnes()){gotoxy(77,1);cprintf("%c",16);}
		gotoxy(PosX,PosY);
	}
	while(c1!=27);
}

void Cadre()
{
	textbackground(15);textcolor(0);
	clrscr();printf("\n");
	printf("  ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n");
	for( int i=0;i<20;i++)
	printf("  º                                                                         º\n");
	printf("  ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n");
	textbackground(0);textcolor(15);gotoxy(3,24);
}

MatriceCreuse::MatriceCreuse(int ML, int MC)
{
	MaxL=ML;MaxC=MC;
	for(int l=1;l<=MaxL;l++) {VPL[l]=NULL;}
	for(int c=1;c<=MaxC;c++) {VPC[c]=NULL;}
}
MatriceCreuse::~MatriceCreuse()
{
	/*struct Noeud *n=NULL,*ns=NULL;
	for(int l=1;l<=this->NbLignes();l++)
	{
	n=VPL[l];
	ns=n->suivL;
	while(n)
		{
		delete n;
		n=ns;
		ns=ns->suivL;
		}
	delete n;delete ns;
	} */
	for(int l=1;l<=this->NbLignes();l++)   {VPL[l]=NULL ;}
	for(int c=1;c<=this->NbColonnes();c++) {VPC[c]=NULL ;}
}

void MatriceCreuse::Assigner(int l, int c, int v)
{
	struct Noeud *nouv , *courant,*prec;
	nouv =(struct Noeud *)malloc (sizeof(struct Noeud));
/*	courant =(struct Noeud *)malloc (sizeof(struct Noeud));
	prec =(struct Noeud *)malloc (sizeof(struct Noeud));
*/	if(v) {nouv->l=l;nouv->c=c;nouv->v=v;nouv->suivL=NULL;nouv->suivC=NULL;}
	/*INSERTION DANS LA LIGNE L*/
	courant = VPL[l];
	while(courant && (courant->c< c))
	{
	  prec=courant;
	  courant=courant->suivL;
	}
	if (v)
	{
	  nouv->suivL=courant;
	  if (courant==VPL[l]) VPL[l]=nouv;else	prec->suivL=nouv;
	}
	else
	{
	  if(courant==VPL[l]) VPL[l]=courant->suivL; else prec->suivL=courant->suivL;
	}
	/*INSERTION DANS LA COLONNE C*/
	courant=VPC[c];
	while(courant && (courant->l < l))
	{
	  prec=courant;
	  courant=courant->suivC;
	}
	if (v)
	{
	  nouv->suivC=courant;
	  if (courant==VPC[c]) VPC[c]=nouv; else prec->suivC=nouv;
	}
	else
	{
	  if(courant==VPC[c]) VPC[c]=courant->suivC; else prec->suivC=courant->suivC;
	}
}
int MatriceCreuse::Extraire( int l, int c )
{
	struct Noeud *Ln;
	int trouve=0;
	Ln=VPL[l];
	while(Ln && trouve==0)
	{
		if (Ln->c==c) {trouve =1;return Ln->v;}
		else if(Ln->c > c) return 0;
		else Ln=Ln->suivL;
	}
	if (trouve==0) return 0;
}

void MatriceCreuse::Lire()
{
	for(int l=0; l<MaxL ;l++)
		for(int c=0; c<MaxC ; c++)
			Extraire(l,c);
}

void MatriceCreuse::Ecrire(int Ld, int Lf, int Cd, int Cf)
{
	struct Noeud *ln;
	int elt,posY=3;
	int ll,cc;
	for(ll=Ld; ll<=Lf; ll++)
	{
		gotoxy(4,posY++);
		for(cc=Cd; cc<=Cf; cc++)
		{
			int e=Extraire(ll,cc);
			cout <<setw(5)<<e;
		}
		printf("\n");
	}
}

MatriceCreuse MatriceCreuse::operator + (MatriceCreuse M1)
{
	int v1=0,v2=0;
	MatriceCreuse MR(this->NbLignes(),this->NbColonnes());
	for (int l=1;l<=this->NbLignes();l++)
		for (int c=1;c<=this->NbColonnes();c++)
		{
			v1=this->Extraire(l,c);
			v2=M1.Extraire(l,c);
			if (v1+v2) MR.Assigner(l,c,v1+v2);
		}
	return MR;
}

MatriceCreuse Multiplication(MatriceCreuse &m )
{
	int l,c,e=0;
	do
	{
		setfillstyle(1,0);
		bar(20,335,610,460);
		settextstyle(SMALL_FONT,0,5);
		outtextxy(230,350,"Dimension de la 2Šme matrice :");
		settextstyle(SMALL_FONT,0,5);
		outtextxy(450,363,"Nombre de lignes :");
		outtextxy(440,378,"Nombre de colonnes :");
		line(520,368,525,368);
		gotoxy(66,23);scanf("%d",&l);
		setcolor(1); line(520,368,525,368);
		setcolor(15);line(520,384,525,384);
		gotoxy(66,24);scanf("%d",&c);
		if(l!=m.NbColonnes())
		{
			bar(20,335,610,460);
			int vl=m.NbLignes();
			int vc=m.NbColonnes();
			outtextxy(330,390,"Reprenez! le nombre de lignes de la 2Šme matrice ");
			outtextxy(330,410,"est diff‚rent du nombre de colonnes de la 1Šre matrice:");
			char*d;
			outtextxy(320,430,itoa(vl,d,10));
			outtextxy(340,430,"X");
			outtextxy(360,430,itoa(vc,d,10));
			getch();
		}
	}
	while(l!=m.NbColonnes());
	MatriceCreuse M2(l,c);
	setfillstyle(1,0);
	bar(20,335,610,460);
	settextstyle(SMALL_FONT,0,5);
	outtextxy(300,350,"Assigner un ‚lement pour la 2Šme matrice ?(O/N)");
	char r;
	r=getch();
	while(r==111)
	{
		int il,ic,iv;
		setfillstyle(1,0);
		bar(20,335,610,460);
		settextstyle(SMALL_FONT,0,5);
		outtextxy(458,348,"Ligne :");
		outtextxy(450,363,"Colonne :");
		outtextxy(454,378,"Valeur :");
		do
		{ line(488,353,493,353);gotoxy(62,22);
		scanf("%d",&il);
		if(il<1||il>m.NbLignes())
		{
		setfillstyle(1,0);
		bar(488,335,625,353);
		}
		}while(il<1||il>m.NbLignes());
		setcolor(1); line(488,353,493,353);
		setcolor(15);line(488,369,493,369);
		do
		{ line(488,369,493,369);gotoxy(62,23);
		scanf("%d",&ic);
		if(ic<1||ic>m.NbColonnes())
		{
		setfillstyle(1,0);
		bar(488,351,625,369);
		}
		}while(ic<1||ic>m.NbColonnes());
		setcolor(1); line(488,369,493,369);
		setcolor(15);line(488,387,493,387);
		gotoxy(62,24);scanf("%d",&iv);
		if (iv) M2.Assigner(il,ic,iv);
		settextstyle(SMALL_FONT,0,5);
		outtextxy(300,410,"Assigner autre ‚l‚ment ?(O/N)");
		r=getch();
	}
	MatriceCreuse MatRes(m.NbLignes(),M2.NbColonnes());
	for (l=1;l<=MatRes.NbLignes();l++)
		for (c=1;c<=MatRes.NbColonnes();c++)
		{
			e=0;
			for (int k=1;k<=M2.NbLignes();k++)
			{
			e=e+(m.Extraire(l,k)*M2.Extraire(k,c));
			}
			if (e) MatRes.Assigner(l,c,e);
		}
	closegraph();
	clrscr();
	Cadre();
	cprintf("Fleche Gauche %c Fleche Haut %c  Fleche Bas %c Fleche Droit %c Esc pour sortir ",17,24,25,16);
	gotoxy(23,1);
	cprintf("Resultat de la multiplication : Matrice %d X %d",MatRes.NbLignes(),MatRes.NbColonnes());
	AffichageMatrice(MatRes);
	return MatRes;
}

int main(void)
{
   Dekhla();
   int MxL, MxC;
   settextstyle(SMALL_FONT,0,6);
   outtextxy(200,320,"Dimension de la matrice creuse :");
   outtextxy(201,320,"Dimension de la matrice creuse :");
   settextstyle(SMALL_FONT,0,5);
   outtextxy(450,363,"Nombre de lignes :");
   outtextxy(440,378,"Nombre de colonnes :");
   do
   { line(520,368,525,368);gotoxy(66,23);
   scanf("%d",&MxL);
   if(MxL<1||MxL>1000)
	{
	 setfillstyle(1,0);
	 bar(520,350,630,368);
	}
   }while(MxL<1||MxL>1000);
   setcolor(1); line(520,368,525,368);
   setcolor(15);line(520,384,525,384);
   do
   { line(520,384,525,384);gotoxy(66,24);
   scanf("%d",&MxC);
   if(MxC<1||MxC>1000)
	{
	 setfillstyle(1,0);
	 bar(520,366,630,384);
	}
   }while(MxC<1||MxC>1000);
   MatriceCreuse M(MxL,MxC);
   char c='!';
   Graphisme();
   int val=1;
   Twichia(pos);
   while (val==1)
   {
	setfillstyle(1,0);
	bar(150,180,450,380);
	Twichia(pos);
	MenuGrise();
	MenuSurbrillant(pos);
	c= getch();
	if (c==13)
	{
		switch(pos)
		{
			case 1:
			{
				int il,ic,iv;
				setfillstyle(1,0);
				bar(20,140,610,460);
				BAR();
				settextstyle(SMALL_FONT,0,6);
				outtextxy(140,320,"Assigner un ‚lement");
				outtextxy(141,320,"Assigner un ‚lement");
				settextstyle(SMALL_FONT,0,5);
				outtextxy(458,348,"Ligne :");
				outtextxy(450,363,"Colonne :");
				outtextxy(454,378,"Valeur :");
				do
				{ line(488,353,493,353);gotoxy(62,22);
				scanf("%d",&il);
				if(il<1||il>M.NbLignes())
				{
				setfillstyle(1,0);
				bar(488,335,625,353);
				}
				}while(il<1||il>M.NbLignes());
				setcolor(1); line(488,353,493,353);
				setcolor(15);line(488,369,493,369);
				do
				{ line(488,369,493,369);gotoxy(62,23);
				scanf("%d",&ic);
				if(ic<1||ic>M.NbColonnes())
				{
				setfillstyle(1,0);
				bar(488,351,625,369);
				}
				}while(ic<1||ic>M.NbColonnes());
				setcolor(1); line(488,369,493,369);
				setcolor(15);line(488,387,493,387);
				gotoxy(62,24);scanf("%d",&iv);
				M.Assigner(il,ic,iv);
				Graphisme();
				break;
			}
			case 2:
			{
				int il,ic,iv;
				setfillstyle(1,0);
				bar(20,140,610,460);
				BAR();
				settextstyle(SMALL_FONT,0,6);
				outtextxy(140,320,"Extraire un ‚lement");
				outtextxy(141,320,"Extraire un ‚lement");
				settextstyle(SMALL_FONT,0,5);
				outtextxy(458,348,"Ligne :");
				outtextxy(450,363,"Colonne :");
				do
				{ line(488,353,493,353);gotoxy(62,22);
				scanf("%d",&il);
				if(il<1||il>M.NbLignes())
				{
				setfillstyle(1,0);
				bar(488,335,625,353);
				}
				}while(il<1||il>M.NbLignes());
				setcolor(1); line(488,353,493,353);
				setcolor(15);line(488,369,493,369);
				do
				{ line(488,369,493,369);gotoxy(62,23);
				scanf("%d",&ic);
				if(ic<1||ic>M.NbColonnes())
				{
				setfillstyle(1,0);
				bar(488,351,625,369);
				}
				}while(ic<1||ic>M.NbColonnes());
				setcolor(1); line(488,369,493,369);
				setcolor(15);
				int e=M.Extraire(il,ic);
				char *s;
				gotoxy(50,24);
				outtextxy(430,390,"La valeur est :");
				outtextxy(500,390,itoa(e,s,10));
				getch();
				Graphisme();
				break;
			}
			case 3:
			{
				closegraph();
				Cadre();
				cprintf("Fleche Gauche %c Fleche Haut %c  Fleche Bas %c Fleche Droit %c Esc pour sortir ",17,24,25,16);
				gotoxy(32,1);
				cprintf("Matrice %d X %d",M.NbLignes(),M.NbColonnes());
				AffichageMatrice(M);
				InitGraph();Graphisme();
				break;
			}
			case 4:
			{
				setfillstyle(1,0);
				bar(20,140,610,460);
				BAR();
				settextstyle(SMALL_FONT,0,6);
				outtextxy(120,320,"Addition matricielle");
				outtextxy(121,320,"Addition matricielle");
				MatriceCreuse M1(M.NbLignes(),M.NbColonnes());
				settextstyle(SMALL_FONT,0,5);
				outtextxy(300,350,"Assigner un ‚lement pour la 2Šme matrice ?(O/N)");
				char r;
				r=getch();
				while(r==111)
				{
					int il,ic,iv;
					setfillstyle(1,0);
					bar(20,335,610,460);
					settextstyle(SMALL_FONT,0,5);
					outtextxy(458,348,"Ligne :");
					outtextxy(450,363,"Colonne :");
					outtextxy(454,378,"Valeur :");
					do
					{ line(488,353,493,353);gotoxy(62,22);
					scanf("%d",&il);
					if(il<1||il>M.NbLignes())
					{
					setfillstyle(1,0);
					bar(488,335,625,353);
					}
					}while(il<1||il>M.NbLignes());
					setcolor(1); line(488,353,493,353);
					setcolor(15);line(488,369,493,369);
					do
					{ line(488,369,493,369);gotoxy(62,23);
					scanf("%d",&ic);
					if(ic<1||ic>M.NbColonnes())
					{
					setfillstyle(1,0);
					bar(488,351,625,369);
					}
					}while(ic<1||ic>M.NbColonnes());
					setcolor(1); line(488,369,493,369);
					setcolor(15);line(488,387,493,387);
					gotoxy(62,24);scanf("%d",&iv);
					M1.Assigner(il,ic,iv);
					settextstyle(SMALL_FONT,0,5);
					outtextxy(300,410,"Assigner autre ‚l‚ment ?(O/N)");
					r=getch();
				}
				M=M+M1;
				closegraph();
				Cadre();
				cprintf("Fleche Gauche %c Fleche Haut %c  Fleche Bas %c Fleche Droit %c Esc pour sortir ",17,24,25,16);
				gotoxy(25,1);
				cprintf("Resultat de l'addition : Matrice %d X %d",M.NbLignes(),M.NbColonnes());
				AffichageMatrice(M);
				InitGraph();Graphisme();
				break;
			}
			case 5:
			{
				setfillstyle(1,0);
				bar(20,140,610,460);
				BAR();
				settextstyle(SMALL_FONT,0,6);
				outtextxy(140,320,"Multiplication matricielle");
				outtextxy(141,320,"Multiplication matricielle");
				Multiplication(M);
				InitGraph();Graphisme();
				break;
			}
			case 6:
			{
				exit(-1);
				break;
			}
		}
	}
	else if (c==72)
	{
		if (pos>1) pos--; else pos=6;
	}
	else if (c==80)
	{
		if (pos<6) pos++; else pos=1;
	}
   }
   closegraph();
   return 0;
}



 Sources du même auteur

Source avec une capture MATRICE SOUS FORME POINTEUR

 Sources de la même categorie

CALCULE LOG(X) par tagtog
Source avec Zip Source avec une capture ALGORITHME DE TRI D'UN TABLEAU PAR ORDRE CROISSANT OU DÉCROI... par Thuzhen
Source avec une capture CALCUL DE VARIANCE par Minilogus
Source avec une capture GÉNÉRATEUR DE CLÉS SUR 26 DIGITS AU FORMAT HEXADÉCIMAL par besilent
Source avec Zip Source avec une capture ALGORITHME DE CRYPTAGE/DECRYPTAGE par besilent

Commentaires et avis

Commentaire de jerrol le 29/12/2004 11:23:44

Où peut-on trouver mygraph.cpp ?

Commentaire de EMSIEN le 05/01/2005 12:47:25

est ce qu'on pouras avoir votre biblioteque mygraph

Commentaire de belhauss le 04/12/2007 00:15:56 1/10

pffffffffff elle ou cette bibliothék :@!!!!!!!

 Ajouter un commentaire




Nos sponsors


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,952 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales