免费预览已结束,剩余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 三年级数学上册倍的认识思维发展课件
- 消防安全主题课件下载
- 2026届河北省衡水中学化学高二上期末调研试题含答案
- 遇到中介没签购房合同
- 果园工人劳务合同
- 绍兴市第一学期四年级数学期中评估卷
- 2025年攀枝花市米易县事业单位秋季引才考核工作笔试考试参考试题附答案解析
- 甘肃开放大学2025年《地域文化(本)》形成性考核1-3终考答案
- 畜牧兽医专业职业规划
- 2026年河南女子职业学院单招职业技能考试必刷测试卷带答案
- 团干部培训分享
- 2026届湖南省华大新高考联盟高三上学期9月教学质量测评(一模)物理试题(解析版)
- 微量泵的使用方法及注意事项
- 游泳池安全保障制度和措施
- 2025年枣庄市工会社会工作者公开招聘(34人)笔试考试参考试题附答案解析
- 印花税法专项培训
- TCQFX001-2024四川省机动车维修工时定额标准
评论
0/150
提交评论