⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matrix computing.txt

📁 自己编写的c++矩阵运算分析程序,可以进行矩阵的和差积转置计算。
💻 TXT
字号:
//定义,初始数据输入,构成矩阵
#define maxsize 1000
#define ERROR 0
#define maxrc 100
#include<conio.h>
#include<stdio.h>
#include<string.h>
typedef struct
{ int i,j;
int v;
}node,*pnode;
typedef struct
{ int mu,nu,tu;
int rpos[maxrc+1];
node data[maxsize+1];
}matrix,pmatrix;
void	print(pmatrix *pm)
{
	int	pr,pc;
	int	colnum=(*pm).nu;
	int	cur=1;  /*current*/
	int	k=1;	/*point to Data[k]*/
	for(pr=1;pr<=(*pm).mu;pr++)
		{
		for(pc=1;pc<=(*pm).nu;pc++)
			{
			if( cur!=((*pm).data[k].i-1)*colnum+(*pm).data[k].j)
				{gotoxy(4,8);
				printf("%d\t",0);
				}
			else	{gotoxy(4,9);
				printf("%d\t",(*pm).data[k++].v);
				}
			cur++;
			}
		printf("\n");
		}
}
void *input(pmatrix *b)
{int a , c;
gotoxy(4,6);
cprintf(" please input the mu ,nu and tu of the matrix\n ");

scanf ("%d\n",&(*b).mu);
scanf ("%d\n",&(*b).nu);
scanf ("%d",&(*b).tu);
gotoxy(4,8);
cprintf(" please input the rpos of the matrix :");
for (c=1;c<=(*b).mu;c++)
{scanf ("%d",&(*b).rpos[c]);}

for (a=1;a<=(*b).tu;a++)
{ gotoxy(4,a+8);
cprintf("please input the element of the node:");
scanf("%d\n",&(*b).data[a].i);
scanf("%d\n",&(*b).data[a].j);
scanf("%d",&(*b).data[a].v); }
}

//矩阵加运算

int	add(matrix *a,matrix *b,matrix *c)
{
	int	l=1;
	int	m=1;
	int	n=1;
	int	j;
	if( (*a).mu!=(*b).mu || (*a).nu!=(*b).nu)
		{ cprintf("0\n");
		  cprintf("the column do not match!\n");
		  return ERROR;

		}
	(*c).mu=(*a).mu;
	(*c).nu=(*a).nu;
         while( l<=(*a).tu && m<=(*b).tu)
          {
		if( (*a).data[l].i<(*b).data[m].i)
			{
			(*c).data[n].i=(*a).data[l].i;
			(*c).data[n].j=(*a).data[l].j;
			(*c).data[n].v=(*a).data[l].v;
			n++;
			l++;
			}
		else if( (*a).data[l].i>(*b).data[m].i)
			{
			(*c).data[n].i=(*b).data[m].i;
			(*c).data[n].j=(*b).data[m].j;
			(*c).data[n].v=(*b).data[m].v;
			n++;
			m++;
			}
		else	{
			if( (*a).data[l].j<(*b).data[m].j )
				{
				(*c).data[n].i=(*a).data[l].i;
				(*c).data[n].j=(*a).data[l].j;
				(*c).data[n].v=(*a).data[l].v;
				n++;
				l++;
				}
			else if( (*a).data[l].j>(*b).data[m].j )
				{
				(*c).data[n].i=(*b).data[m].i;
				(*c).data[n].j=(*b).data[m].j;
				(*c).data[n].v=(*b).data[m].v;
				n++;
				m++;
				}
			else	{
				(*c).data[n].i=(*a).data[l].i;
				(*c).data[n].j=(*a).data[l].j;
				(*c).data[n].v=(*a).data[l].v
					+(*b).data[m].v;
				n++;
				l++;
				m++;
				}
			}
		}
	for(j=l;j<(*a).tu;j++)
		{
		(*c).data[n].i=(*a).data[l].i;
		(*c).data[n].j=(*a).data[l].j;
		(*c).data[n].v=(*a).data[l].v;
		n++;
		l++;
		}
	for(j=m;j<=(*b).tu;j++)
		{
		(*c).data[n].i=(*b).data[m].i;
		(*c).data[n].j=(*b).data[m].j;
		(*c).data[n].v=(*b).data[m].v;
		n++;
		m++;
		}
	(*c).tu=n;
	print(c);
}
//矩阵减运算
int	surplus(matrix *a,matrix *b,matrix *c)
{
	int	l=1;
	int	m=1;
	int	n=1;
	int	j;
	if( (*a).mu!=(*b).mu || (*a).nu!=(*b).nu)
		{ cprintf("0\n");
		  cprintf("the column do not match!\n");
		  return ERROR;
		}
	(*c).mu=(*a).mu;
	(*c).nu=(*a).nu;
	while( l<=(*a).tu && m<=(*b).tu)
		{
		if( (*a).data[l].i<(*b).data[m].i)
			{
			(*c).data[n].i=(*a).data[l].i;
			(*c).data[n].j=(*a).data[l].j;
			(*c).data[n].v=(*a).data[l].v;
			n++;
			l++;
			}
		else if( (*a).data[l].i>(*b).data[m].i)
			{
			(*c).data[n].i=(*b).data[m].i;
			(*c).data[n].j=(*b).data[m].j;
			(*c).data[n].v=-(*b).data[m].v;
			n++;
			m++;
			}
		else	{
			if( (*a).data[l].j<(*b).data[m].j )
				{
				(*c).data[n].i=(*a).data[l].i;
				(*c).data[n].j=(*a).data[l].j;
				(*c).data[n].v=(*a).data[l].v;
				n++;
				l++;
				}
			else if( (*a).data[l].j>(*b).data[m].j )
				{
				(*c).data[n].i=(*b).data[m].i;
				(*c).data[n].j=(*b).data[m].j;
				(*c).data[n].v=-(*b).data[m].v;
				n++;
				m++;
				}
			else	{
				(*c).data[n].i=(*a).data[l].i;
				(*c).data[n].j=(*a).data[l].j;
				(*c).data[n].v=(*a).data[l].v
					-(*b).data[m].v;
				n++;
				l++;
				m++;
				}
			}
		}
	for(j=l;j<(*a).tu;j++)
		{
		(*c).data[n].i=(*a).data[l].i;
		(*c).data[n].j=(*a).data[l].j;
		(*c).data[n].v=(*a).data[l].v;
		n++;
		l++;
		}
	for(j=m;j<=(*b).tu;j++)
		{
		(*c).data[n].i=(*b).data[m].i;
		(*c).data[n].j=(*b).data[m].j;
		(*c).data[n].v=-(*b).data[m].v;
		n++;
		m++;
		}
	(*c).tu=n;
	print(c);
}

//矩阵乘

void *mult(pmatrix *m,pmatrix *n,pmatrix *q)
{int brow;
int arow,tp;
int a,p,l,t;
int ccol;
int cur=0;
int ctemp[100];
if ((*m).nu!=(*n).mu){ printf("0\n");printf("error!");return ERROR;}
q->mu=m->mu;(*q).nu=(*n).nu;(*q).tu=0;
if((*m).tu*(*n).tu!=0){
for (arow=1;arow<=(*m).mu;++arow){
for (a=1;a<=q->nu;++a)
   ctemp[a]=0;

q->rpos[arow]=q->tu+1;
if(arow<m->mu) tp=m->rpos[arow+1] ;
else{(tp=m->tu+1); }
  for (p=(*m).rpos[arow];p<tp;++p)
   {
     brow=(*m).data[p].j;
     if(brow<n->mu)  t=n->rpos[brow+1];
     else{t=n->tu+1;}
       for (l=(*n).rpos[brow];l<t;++l)
        {
	  ccol=(*n).data[l].j;
	  ctemp[ccol]+=(*m).data[p].v*(*n).data[l].v;
         }
   }
  for (ccol=1;ccol<=(*q).nu;++ccol)
   if(ctemp[ccol])
   {
    if(++(q->tu)>maxsize) return ERROR;
    (*q).data[q->tu].i=arow;
    (*q).data[q->tu].j=ccol;
    (*q).data[q->tu].v=ctemp[ccol];

  }
 }
}
print(q);
}


//矩阵转置运算

void *transmatrix(pmatrix *a,pmatrix *b)
{
  int am,bn,col;
  b->nu=a->mu;
  b->mu=a->nu;
  b->tu=a->tu;
  bn=1;
  if(a->tu)
 {bn=1;
  for(col=1;col<=a->nu;++col)
   for(am=1;am<=a->tu;++am)
   { if(a->data[am].j==col)
    {  b->data[bn].i=a->data[am].j;
       b->data[bn].j=a->data[am].i;
	   b->data[bn].v=a->data[am].v;
	   ++bn;
     }
    }
 }
print(b);
}


//输出


main()
{
matrix *b;
matrix *a;
matrix *c,*l;
int i;
char f;
char *buf[1*35*2];
a=(matrix*)malloc(sizeof(matrix));
b=(matrix*)malloc(sizeof(matrix));
c=(matrix*)malloc(sizeof(matrix));
l=(matrix*)malloc(sizeof(matrix));
 window(1,1,80,25);
 textbackground(LIGHTMAGENTA);
 textcolor(14+128);
 clrscr();
 gotoxy(19,2);
 cprintf("**** welcome to our programme! ****");cprintf("\n");
 textcolor(6);
 gotoxy(1,3);
for(i=1;i<=80;i++)
{gotoxy(i,3);putch(0xcd);
 gotoxy(i,24);putch(0xcd);}
for(i=1;i<=25;i++)
{gotoxy(2,i);putch(0xba);
gotoxy(79,i);putch(0xba);
}
window(4,4,70,20);
textbackground(LIGHTMAGENTA);
/*clrscr();*/
textcolor(0);
  gotoxy(9,2);
  printf("add:     surplus:      multply:       transmatrix: \n");
  gotoxy(13,2);
  cprintf("'+'");
  gotoxy(26,2);
  cprintf("'-'");
  gotoxy(40,2);
  cprintf("'*'");
  gotoxy(58,2);
  cprintf("'t'");
  gotoxy(4,5);
  cprintf("please input the first matrix \n");
  input(a);
  clrscr();
  gotoxy(4,5);
  cprintf("please input the second matrix\n");
   input(b);
  while(1)
  {
 cprintf("        please input the wanted operation:");
  fflush(stdin);
  f=getchar();
  switch(f){
  case'+':add(a,b,c);break;
  case'-':surplus(a,b,c);break;
  case'*':mult(a,b,c);break;
  case't':/*cprintf("please choose which one do you want to transmatrix:");
           scanf("%c",&n);
	   if(n==a){c=transmatrix(a);print(c);break;}
           else if(n==b){c=transmatrix(b);print(c);break;}
	   else cprintf("error input!");*/
	   transmatrix(a,c);break;
  default: printf("error input,please input again!\n");break;
  cprintf("please input the first matrix \n");
  input(a);
  clrscr();
  gotoxy(4,5);
  cprintf("please input the second matrix\n");
   input(b);
   }
 }

getch();
free(a);
free(b);
free(c) ;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -