




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、/#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
2、(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
3、 (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, M
4、atrix_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 *pst
5、MatrixA, 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 <stdio.h>#include <stdlib.h>#include <memory.h>#include <math.h
6、>#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);me
7、mset(&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.pfD
8、ataAdd)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 - M
9、ultiply 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(&stMa
10、trixC, 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
11、 = 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 (iR
12、et = 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.*/p
13、rintf("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(s
14、tMatrixC.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);
15、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 checki
16、ng 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, (pstM
17、atrixA->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.
18、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 chec
19、king.*/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");retu
20、rn 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
21、_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_INVER
22、SE_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 = pstM
23、atrixB->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 iR
24、et = 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 = pstMatr
25、ixA->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 < ucCol; j+)fTmpData = (*(pstMatrixA->pfDataAdd + i * ucCol + j) + *(pstMatrixB->pfDataAdd +
26、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 = N
27、ULL) | (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, p
28、stMatrixC);if (iRet != EX_TRUE)return iRet;for (i = 0; i < ucRow; i+)for (j = 0; j < ucCol; j+)fTmpData = (*(pstMatrixA->pfDataAdd + i * ucCol + j) - *(pstMatrixB->pfDataAdd + i * ucCol + j);*(pstMatrixC->pfDataAdd + i * ucCol + j) = fTmpData;return EX_TRUE;int MultiplyMatrix(int iOpC
29、ode, 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(iOpCo
30、de, 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 =
31、 0; k < pstMatrixA->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 *
32、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 iRet;return EX_TRUE;int InverseMatrix(float a, int n) int *is,*js;int i,j,k,l,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- LY/T 3385-2024植物新品種特異性、一致性、穩(wěn)定性測(cè)試指南落羽杉屬
- 化學(xué)●廣東卷丨2021年廣東省普通高中學(xué)業(yè)水平選擇性考試化學(xué)試卷及答案
- 筆線勾勒的技法變化豐富美學(xué)韻味中國(guó)文化精粹06課件
- 24h回顧法孫芝楊07課件
- 《三級(jí)醫(yī)院評(píng)審標(biāo)準(zhǔn)(2025年版)》
- 風(fēng)景園林基礎(chǔ)考研資料試題及參考答案詳解一套
- 《風(fēng)景園林招投標(biāo)與概預(yù)算》試題A附參考答案詳解(能力提升)
- 2023年上海市上海市松江區(qū)永豐街道招聘社區(qū)工作者真題附詳細(xì)解析
- 2024年山東華興機(jī)械集團(tuán)有限責(zé)任公司人員招聘筆試備考題庫(kù)及答案詳解(有一套)
- 無錫市2024-2025學(xué)年三年級(jí)下學(xué)期數(shù)學(xué)期末試題一(有答案)
- 2025年湖北省新華書店(集團(tuán))有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025年宣城郎溪開創(chuàng)控股集團(tuán)有限公司下屬子公司招聘12人筆試參考題庫(kù)附帶答案詳解
- 統(tǒng)編版四年級(jí)下冊(cè)語文第八單元達(dá)標(biāo)練習(xí)(含答案)
- 美國(guó)船級(jí)社(ABS)材料與焊接規(guī)范
- 酒類考試題及答案大全
- 職高歷史考試題及答案
- 訂制衣柜付款合同協(xié)議
- 風(fēng)冷模塊培訓(xùn)課件
- 2025年中國(guó)振弦式應(yīng)變計(jì)市場(chǎng)調(diào)查研究報(bào)告
- 上海市閔行區(qū)六校聯(lián)考2023-2024學(xué)年高一下學(xué)期期末考試數(shù)學(xué)試題(解析版)
- GB/T 6516-2025電解鎳
評(píng)論
0/150
提交評(píng)論