稀疏矩阵运算器实习报告Word文档格式.docx

上传人:b****5 文档编号:17991381 上传时间:2022-12-12 格式:DOCX 页数:15 大小:105.91KB
下载 相关 举报
稀疏矩阵运算器实习报告Word文档格式.docx_第1页
第1页 / 共15页
稀疏矩阵运算器实习报告Word文档格式.docx_第2页
第2页 / 共15页
稀疏矩阵运算器实习报告Word文档格式.docx_第3页
第3页 / 共15页
稀疏矩阵运算器实习报告Word文档格式.docx_第4页
第4页 / 共15页
稀疏矩阵运算器实习报告Word文档格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

稀疏矩阵运算器实习报告Word文档格式.docx

《稀疏矩阵运算器实习报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《稀疏矩阵运算器实习报告Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。

稀疏矩阵运算器实习报告Word文档格式.docx

AddSMatrix(M,N,&

Q);

稀疏矩阵M与N的行数和列数对应相等.

求稀疏矩阵的和Q=M+N.

SubSMatrix(M,N,&

求稀疏矩阵的差Q=M-N.

MultSMatrix(M,N,&

稀疏矩阵M的列数等于N的行数.

求稀疏矩阵的乘积Q=M*N.

2、本程序包含四个模块

1)主程序模块

Voidmain()

{

初始化

Do{

接受命令;

处理命令;

}while(命令!

=“退出”)

}

2)模块调用关系图

主程序模块

创建稀疏矩阵模块

运算稀疏矩阵模块

三、详细设计

#defineMAXSIZE20

#defineMAXRC10

#include<

iostream>

usingnamespacestd;

typedefstruct

inti,j;

inte;

}Triple;

typedefstruct

Tripledata[MAXSIZE+1];

intrpos[MAXRC+1];

intmu,nu,tu;

//mu是行,nu是列,tu是非零元个数

}Matrix;

voidcreatematrix(Matrix&

M)

intm,n,t,e;

intnum[MAXSIZE+1];

//每行非零元素个数

do{

cout<

<

"

输入矩阵的行数,列数和非零元数:

endl;

矩阵行数:

;

cin>

>

m;

矩阵列数:

n;

非零元个数:

t;

if(m<

0||n<

0||t<

0||t>

m*n)

cout<

error"

}while(m<

m*n);

//检测输入是否合法

M.mu=m,M.nu=n,M.tu=t;

//保存数据

inti,j,k,a;

intflag[MAXSIZE][MAXSIZE];

//标记数组:

此位置是否已经有非零元素

for(i=0;

i<

MAXSIZE;

i++)//标记数组的初始化

for(j=0;

j<

j++)

flag[i][j]=0;

for(k=1;

k<

=t;

k++)

{

do{

输入第"

个非零元(共"

t<

个)的行数,列数和非零元:

cin>

i>

j>

e;

if(i<

=0||i>

m||j<

=0||j>

n)

cout<

if(flag[i][j]!

=0)

{

重复!

flag[i][j]=2;

}

if(e==0)

}while(i<

n||flag[i][j]==2||e==0);

for(a=1;

a<

=k-1&

&

(i>

M.data[a].i||(i==M.data[a].i&

M.data[a].j));

a++);

//找到此三元组插入的位置

for(intb=k-1;

b>

=a;

b--)

M.data[b+1]=M.data[b];

//行序比它大的三元组依次向后移动

M.data[a].i=i;

M.data[a].j=j;

M.data[a].e=e;

}

for(i=1;

=M.mu;

i++)

num[i]=0;

for(t=1;

=M.tu;

t++)

num[M.data[t].i]++;

//求M中每一行含非零元素个数

M.rpos[1]=1;

for(i=2;

M.rpos[i]=M.rpos[i-1]+num[i-1];

voidprintmatrix(MatrixM)//输出矩阵

for(inti=1,k=1;

for(intj=1;

=M.nu;

{

if(M.data[k].i==i&

M.data[k].j==j)

M.data[k].e<

\t"

k++;

else

0\t"

}

cout<

矩阵共有"

M.mu<

行"

M.nu<

列"

M.tu<

个非零元元素"

voidjiafa(MatrixM,MatrixN,Matrix&

Q)

if(M.mu!

=N.mu||M.nu!

=N.nu)

Q.mu=M.mu;

Q.nu=M.nu;

Q.tu=0;

intm,n,t;

m=n=t=1;

for(introw=1;

row<

row++)

if(M.data[m].i==row&

N.data[n].i==row)//矩阵行数相等

if(M.data[m].j==N.data[n].j)//矩阵列数相等

intsum=M.data[m].e+N.data[n].e;

if(sum!

{

Q.data[t].i=row;

Q.data[t].j=M.data[m].j;

Q.data[t].e=sum;

Q.tu++;

++m;

++n;

++t;

}

else

while(M.data[m].i==row)//M矩阵剩下的元素

Q.data[t].i=row;

Q.data[t].j=M.data[m].j;

Q.data[t].e=M.data[m].e;

Q.tu++;

++m;

++t;

while(N.data[n].i==row)//N矩阵剩下的元素

Q.data[t].j=N.data[n].j;

Q.data[t].e=N.data[n].e;

++n;

矩阵相加结果为:

printmatrix(Q);

voidjianfa(MatrixM,MatrixN,Matrix&

=M.nu)

intcha=M.data[m].e-N.data[n].e;

if(cha!

Q.data[t].e=cha;

m++;

n++;

t++;

m++;

t++;

inte1=N.data[n].e;

e1=0-e1;

Q.data[t].e=e1;

n++;

矩阵相减结果为"

voidchengfa(MatrixM,MatrixN,Matrix&

intctemp[MAXSIZE+1];

inttp,t,col,p,q;

intarow=1,brow=1;

if(M.nu!

=N.mu)//稀疏矩阵M的列数和N的行数不相等,不能相乘

Q.nu=N.nu;

if(M.tu*N.tu!

for(arow=1;

arow<

arow++)

for(inti=1;

=Q.nu;

ctemp[i]=0;

//当前行各元素累加器清零

Q.rpos[arow]=Q.tu+1;

if(arow<

M.mu)

tp=M.rpos[arow+1];

tp=M.tu+1;

for(p=M.rpos[arow];

p<

tp;

p++)//对当前行中的每一个非零元

brow=M.data[p].j;

//找到对应元在N中的行号

if(brow<

N.mu)

t=N.rpos[brow+1];

t=N.tu+1;

for(q=N.rpos[brow];

q<

q++)

col=N.data[q].j;

//乘积元素在Q中列号

ctemp[col]+=M.data[p].e*N.data[q].e;

for(col=1;

col<

col++)//压缩存储该行非零元

if(ctemp[col])

if(++Q.tu>

MAXSIZE)

cout<

Q.data[Q.tu].i=arow;

Q.data[Q.tu].j=col;

Q.data[Q.tu].e=ctemp[col];

矩阵相乘结果为:

intmain()

intchioce;

MatrixM,N,Q;

inti;

1、输入矩阵1:

2、输入矩阵2:

3、矩阵相加"

4、矩阵相减"

5、矩阵相乘"

6、结束"

输入选择功能:

chioce;

switch(chioce)

case1:

creatematrix(M);

printmatrix(M);

i=1;

break;

case2:

creatematrix(N);

printmatrix(N);

case3:

jiafa(M,N,Q);

case4:

jianfa(M,N,Q);

case5:

chengfa(M,N,Q);

case6:

i=0;

}while(i!

=0);

return0;

四、调试分析

1、开始对三元组了解不彻底,致使代码总是出现基本错误

2、对于矩阵相乘的算法参考了书很久,并请教了同学

3、矩阵乘法运算在调试中出现多次错误,反复试验才调试好

5、用户手册

1.本程序的运行环境为DOS操作系统,执行文件为TestMaze.exe

2.进入演示程序后即显示文本方式的用户界面:

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小学作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1