




免费预览已结束,剩余11页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/#include matrix.h#define EX_TRUE (0)#define EX_FALSE (1)#define EX_MALLOC (2)typedef struct tagMatrixunsigned char ucRow;unsigned char ucCol;unsigned short usRev;float *pfDataAdd;Matrix_s;extern int InputRowColInfo(unsigned char *pucRow, unsigned char *pucCol);extern int CreateMatrixMem(void *pvData);extern int InputMatrixData(void *pvData);extern int PrintMatrixData(void *pvData);extern int PrintInverseMatrixData(void *pvData);extern int Show_matrix(Matrix_s *pstMatrixA, Matrix_s *pstMatrixB);/#include operate_matrix.h#define EX_MATRIX_INIT (1)#define EX_MATRIX_UNINIT (0)typedef enumEX_INPUT_MATRIX = 1,EX_ADD_MATRIX,EX_SUBTRACT_MATRIX,EX_MULTIPLY_MATRIX,EX_INVERSE_MATRIX,EX_QUIT_MATRIX,EX_BOTTOM_MATRIXMatrix_opcode_en;extern int OperateMatrix(int iOpCode, Matrix_s *pstMatrixA, Matrix_s *pstMatrix);extern int ShowMatrixMenu();extern int CheckMatrix(int iOpCode, Matrix_s *pstMatrixA, Matrix_s *pstMatrixB);extern int AddMatrix(int iOpCode, Matrix_s *pstMatrixA, Matrix_s *pstMatrixB, Matrix_s *pstMatrixC);extern int SubtractMatrix(int iOpCode, Matrix_s *pstMatrixA, Matrix_s *pstMatrixB, Matrix_s *pstMatrixC);extern int MultiplyMatrix(int iOpCode, Matrix_s *pstMatrixA, Matrix_s *pstMatrixB, Matrix_s *pstMatrixC);extern int CreateResultMatrix(unsigned char ucRow, unsigned char ucCol, void *pvData);extern int InverseMatrix(float a, int n);/*Guanlin Luo ID:10529749*/#include #include #include #include #include matrix.h/*We have already done this header.*/#include operate_matrix.h/*We have already done this header.*/char g_cFlag = EX_MATRIX_UNINIT;int main ()int iInputOpCode;int iRet = EX_FALSE;Matrix_s stMatrixA, stMatrixB;memset(&stMatrixA, 0, sizeof(stMatrixA);memset(&stMatrixB, 0, sizeof(stMatrixB);while(1)/* show menu */(void)ShowMatrixMenu();/* operete matrix */scanf(%d, &iInputOpCode);iRet = OperateMatrix(iInputOpCode, &stMatrixA, &stMatrixB);if (EX_TRUE = iRet)if (EX_QUIT_MATRIX = iInputOpCode)break;if (NULL != stMatrixA.pfDataAdd)free(stMatrixA.pfDataAdd);if (NULL != stMatrixB.pfDataAdd)free(stMatrixB.pfDataAdd);return EX_TRUE;int ShowMatrixMenu()/*choices for users.*/printf(1 - Enter matrices A & Brn);printf(2 - Add matricesrn);printf(3 - Subtract matricesrn);printf(4 - Multiply matricesrn);printf(5 - Inverse of Arn);printf(6 - Quit programrn);printf(Option: );return EX_TRUE;int OperateMatrix(int iOpCode, Matrix_s *pstMatrixA, Matrix_s *pstMatrixB)int iRet = EX_FALSE;Matrix_s stMatrixC;float *pfTmpBuf = NULL;memset(&stMatrixC, 0, sizeof(Matrix_s);switch (iOpCode)case EX_INPUT_MATRIX:iRet = Show_matrix(pstMatrixA, pstMatrixB);if (EX_FALSE = iRet)printf(err input matrix info!n);return iRet;else/* at first, we need input matrix data */g_cFlag = EX_MATRIX_INIT;break;case EX_ADD_MATRIX:/*Addition part.*/iRet = AddMatrix(EX_ADD_MATRIX, pstMatrixA, pstMatrixB, &stMatrixC);if (EX_TRUE != iRet)/*For checking.*/printf(err multiply matrix operation!n);if (EX_MALLOC = iRet);elsefree(stMatrixC.pfDataAdd);return iRet;printf(rnA + B =: rn);iRet = PrintMatrixData(&stMatrixC);if (iRet = EX_FALSE)printf(err print Matrix result!rn);free(stMatrixC.pfDataAdd);return iRet;free(stMatrixC.pfDataAdd);break;case EX_SUBTRACT_MATRIX:/*Subtract two matrices*/iRet = SubtractMatrix(EX_SUBTRACT_MATRIX, pstMatrixA, pstMatrixB, &stMatrixC);if (EX_TRUE != iRet)/*For checking.*/printf(err subtract matrix operation!rn);if (EX_MALLOC = iRet);elsefree(stMatrixC.pfDataAdd);return iRet;printf(rnA - B =: rn);iRet = PrintMatrixData(&stMatrixC);if (iRet = EX_FALSE)printf(err print Matrix result!rn);free(stMatrixC.pfDataAdd);return iRet;free(stMatrixC.pfDataAdd);break;case EX_MULTIPLY_MATRIX:/*multiplication part.*/iRet = MultiplyMatrix(EX_MULTIPLY_MATRIX, pstMatrixA, pstMatrixB, &stMatrixC);if (EX_TRUE != iRet)/*For checking.*/printf(rnerr multiply matrix operation!rn);if (EX_MALLOC = iRet);elsefree(stMatrixC.pfDataAdd);return iRet;printf(rnA * B =: rn);iRet = PrintMatrixData(&stMatrixC);if (EX_TRUE != iRet)printf(err print Matrix result!rn);free(stMatrixC.pfDataAdd);return iRet;free(stMatrixC.pfDataAdd);break;case EX_INVERSE_MATRIX:/*inverse.*/if (EX_MATRIX_UNINIT = g_cFlag)/*For checking the input.*/printf(please choose 1 operation at first.rn);return EX_FALSE;pfTmpBuf = (float *)malloc(pstMatrixA-ucRow * pstMatrixA-ucCol * sizeof(float);if (pfTmpBuf = NULL)/*For checking.*/printf(err malloc memory.rn);return EX_MALLOC;elsememset(pfTmpBuf, 0, (pstMatrixA-ucRow * pstMatrixA-ucCol * sizeof(float);memcpy(pfTmpBuf, pstMatrixA-pfDataAdd, (pstMatrixA-ucRow * pstMatrixA-ucCol * sizeof(float);stMatrixC.ucCol = pstMatrixA-ucCol;stMatrixC.ucRow = pstMatrixA-ucRow;stMatrixC.pfDataAdd = pfTmpBuf;iRet = InverseMatrix(stMatrixC.pfDataAdd, stMatrixC.ucRow);if (EX_TRUE != iRet)/*For checking.*/printf(rnerr inverse matrix operation!rn);if (EX_MALLOC = iRet);elsefree(stMatrixC.pfDataAdd);return iRet;printf(rnInverse of A =: rn);iRet = PrintInverseMatrixData(&stMatrixC);if (EX_TRUE != iRet)/*For checking.*/printf(err print Matrix result!rn);free(stMatrixC.pfDataAdd);return iRet;free(stMatrixC.pfDataAdd);break;case EX_QUIT_MATRIX:/*users chose to end this program.*/printf(will quit matrix menu!rn);break;default:/*For checking.*/printf(err operate code!rn);return EX_FALSE;return EX_TRUE;int CheckMatrix(int iOpCode, Matrix_s *pstMatrixA, Matrix_s *pstMatrixB)if (pstMatrixA = NULL) | (pstMatrixB = NULL)printf(matrix para is null.rn);return EX_FALSE;if (EX_MATRIX_UNINIT = g_cFlag)printf(please choose 1 operation at first.rn);return EX_FALSE;switch (iOpCode)case EX_ADD_MATRIX: case EX_SUBTRACT_MATRIX:if (pstMatrixA-ucCol = pstMatrixB-ucCol)& (pstMatrixA-ucRow = pstMatrixB-ucRow);else/* ADD / Subtract operation */printf(rnAdd/Subtract operation is invalid!rn);return EX_FALSE;break;case EX_INVERSE_MATRIX:if (2 = pstMatrixA-ucRow)& (2 = pstMatrixA-ucCol);else/* Inverse operation */printf(rnMultiply/Inverse operation is invalid!rn);return EX_FALSE;break;case EX_MULTIPLY_MATRIX:if (pstMatrixA-ucRow = pstMatrixB-ucCol)& (pstMatrixA-ucCol = pstMatrixB-ucRow);else/* Multiply operation */printf(rnMultiply operation is invalid!rn);return EX_FALSE;break;default:printf(err operate code!rn);return EX_FALSE;return EX_TRUE;int AddMatrix(int iOpCode, Matrix_s *pstMatrixA, Matrix_s *pstMatrixB, Matrix_s *pstMatrixC)int iRet = EX_FALSE;unsigned char ucRow;unsigned char ucCol;unsigned char i, j;float fTmpData = 0.0;if (pstMatrixA = NULL) | (pstMatrixB = NULL)printf(matrix para is null.rn);return EX_FALSE;iRet = CheckMatrix(iOpCode, pstMatrixA, pstMatrixB);if (EX_FALSE = iRet)return iRet;elseucRow = pstMatrixA-ucRow;ucCol = pstMatrixA-ucCol;/* create result matrix C */iRet = CreateResultMatrix(ucRow, ucCol, pstMatrixC);if (iRet != EX_TRUE)return iRet;for (i = 0; i ucRow; i+)for (j = 0; j pfDataAdd + i * ucCol + j) + *(pstMatrixB-pfDataAdd + i * ucCol + j);*(pstMatrixC-pfDataAdd + i * ucCol + j) = fTmpData;return EX_TRUE;int SubtractMatrix(int iOpCode, Matrix_s *pstMatrixA, Matrix_s *pstMatrixB, Matrix_s *pstMatrixC)int iRet = EX_FALSE;unsigned char ucRow;unsigned char ucCol;unsigned char i, j;float fTmpData = 0.0;if (pstMatrixA = NULL) | (pstMatrixB = NULL)printf(matrix para is null.rn);return EX_FALSE;iRet = CheckMatrix(iOpCode, pstMatrixA, pstMatrixB);if (EX_FALSE = iRet)return iRet;elseucRow = pstMatrixA-ucRow;ucCol = pstMatrixA-ucCol;/* create result matrix C */iRet = CreateResultMatrix(ucRow, ucCol, pstMatrixC);if (iRet != EX_TRUE)return iRet;for (i = 0; i ucRow; i+)for (j = 0; j pfDataAdd + i * ucCol + j) - *(pstMatrixB-pfDataAdd + i * ucCol + j);*(pstMatrixC-pfDataAdd + i * ucCol + j) = fTmpData;return EX_TRUE;int MultiplyMatrix(int iOpCode, Matrix_s *pstMatrixA, Matrix_s *pstMatrixB, Matrix_s *pstMatrixC)int iRet = EX_FALSE;unsigned char ucRow;unsigned char ucCol;unsigned char i, j, k;float fTmpData = 0.0;if (pstMatrixA = NULL) | (pstMatrixB = NULL)printf(matrix para is null.rn);return EX_FALSE;iRet = CheckMatrix(iOpCode, pstMatrixA, pstMatrixB);if (EX_FALSE = iRet)return iRet;elseucRow = pstMatrixA-ucRow;ucCol = pstMatrixB-ucCol;/* create result matrix C */iRet = CreateResultMatrix(ucRow, ucCol, pstMatrixC);if (iRet != EX_TRUE)return iRet;for (i = 0; i ucRow; i+)for (j = 0; j ucCol; j+)for (k = 0; k ucCol; k+)fTmpData += (float)(*(pstMatrixA-pfDataAdd + i * ucCol + k) * *(pstMatrixB-pfDataAdd + j + k * ucCol);*(pstMatrixC-pfDataAdd + i * ucCol + j) = fTmpData;fTmpData = 0;return EX_TRUE;int CreateResultMatrix(unsigned char ucRow, unsigned char ucCol, void *pvData)Matrix_s *pstTmpData = NULL;int iRet = EX_FALSE;if (pvData = NULL)printf(para is null.rn);return EX_FALSE;elsepstTmpData = (Matrix_s *)pvData;/* create result matrix C */memset(pstTmpData, 0, sizeof(Matrix_s);pstTmpData-ucRow = ucRow;pstTmpData-ucCol = ucCol;iRet = CreateMatrixMem(pstTmpData);if (iRet != EX_TRUE)printf(err create result Matrix C!rn);return i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工程管理领域专业技能考核与题型分析及模拟题
- 2025年初级摄影技巧进阶教程与实战模拟题集
- 2025年京东物流仓储经理招聘考试预测题
- 抢救课件标题
- 2025年子宫收缩药项目建议书
- 2025年碳酸乙烯酯项目发展计划
- 2025年巷道式智能化孵化器项目合作计划书
- 动物伦理学题库及答案
- 扫地车安全培训技术交底课件
- 2025年文化行业专业考试题及答案
- 中国美术史课件
- 2025年格力中央空调销售安装合同范本
- 学好普通话课件
- 养殖场防鸟培训课件内容
- 钢板桩支护工程监理细则
- 新雨香沁项目外墙清洗高处坠落应急预案
- 婚内财产分割协议书模板
- 食品行业采购管理流程及实施细则
- 中华民族共同体概论知到课后答案智慧树章节测试答案2025年春丽水学院
- 2025年新版小学语文新课标标准课件
- 胖东来超市收银培训
评论
0/150
提交评论