一元多項式的計算實驗報告_第1頁
一元多項式的計算實驗報告_第2頁
一元多項式的計算實驗報告_第3頁
一元多項式的計算實驗報告_第4頁
一元多項式的計算實驗報告_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、計算機學院工程實踐一元多項式的計算 總 報 告小組序號:編 撰 人:年 級 班 級:指導教師:提交日期:1. 項目組成員分工表 1 項目組成員分工2. 程序功能(程序?qū)崿F(xiàn)的功能,功能結(jié)構(gòu)圖)實現(xiàn)功能:一元多項式的加、減、乘運算功能結(jié)構(gòu)圖:3. 程序設(shè)計簡介(包括:類及其屬性和方法、類之間關(guān)系、關(guān)鍵代碼等的說明)1.class Nodepublic:Node();Node(float c, int e, Node* next);Node();float coef; /系數(shù)int exp; /指數(shù)Node* Next; /指向下一項的指針friend class Polynominal;節(jié)點類,儲

2、存一元多項式每一項的信息。該內(nèi)含有兩個構(gòu)造函數(shù),一個析構(gòu)函數(shù)及存儲系數(shù)、指數(shù)和Next指針等成員變量。與Polynominal是友元關(guān)系,允許Polynominal的訪問。具體成員函數(shù)如下:1)Node:Node() 默認構(gòu)造函數(shù)。2)Node:Node(float c, int e, Node* next)coef = c;exp = e;Next = next;重載的自定義構(gòu)造函數(shù),用于給成員變量coef、exp和Next存入數(shù)據(jù),Next指向傳參來的next指針指向的地址,用于構(gòu)造鏈表。2.class Polynominalpublic:Polynominal();Polynominal

3、(Polynominal &a); /拷貝構(gòu)造函數(shù)void GetMSG(CString TempPloy); /獲取由對話框輸入的字符串并處理CString Output_Node(); /輸出最后結(jié)果void PolyAdd(Polynominal &a, Polynominal &b); /加法void PolySubtract(Polynominal &a, Polynominal &b); /減法void PolyMultiply(Polynominal &a, Polynominal &b); /乘法void PolySort

4、(); /排序函數(shù),用于乘法之后的按指數(shù)排序void OutFile(); /文本輸出函數(shù)void OutFile(Polynominal &a, Polynominal &b, string ch); /重載文本輸出函數(shù)void OpposeCoef(Polynominal &a, Node *temp); /系數(shù)取反,用于減法運算Node theList; /頭節(jié)點 ofstream FOut; /輸出流;此類用于構(gòu)造一元多項式。包括加、減、乘各各功能函數(shù),還有兩個幫助運算的輔助函數(shù),以及界面輸入輸出和文本輸出函數(shù)。成員變量有頭節(jié)點和輸出流。具體成員函數(shù)如下:1)P

5、olynominal:Polynominal()默認構(gòu)造函數(shù)2)Polynominal:Polynominal(Polynominal &a)Node* temp = a.theList.Next;Node* tempNode = &theList;for (; temp != NULL;)tempNode->Next = new Node(temp->coef, temp->exp, NULL);temp = temp->Next;tempNode = tempNode->Next;拷貝構(gòu)造函數(shù),用于計算時對象間的賦值,防止誤改數(shù)據(jù)。3)void

6、 Polynominal:GetMSG(CString TempPoly)TempPoly.Remove(_T('');Node* TempNode = &theList;int i = 0;for (i;i<TempPoly.GetLength(); )CString temp1 ;CString temp2 ;int j = 1;if (TempPoly.GetAt(i) =_T('-')temp1 = temp1 + TempPoly.GetAt(i);i+;if (TempPoly.GetAt(i) = _T('+')i+;

7、if (TempPoly.GetAt(i) = _T('x') )temp1 = temp1 +_T('1');while(j=1)if (TempPoly.GetAt(i) != _T('x')temp1 = temp1 + TempPoly.GetAt(i);i+;else j=0;i+;if (i <(TempPoly.GetLength()-1) && TempPoly.GetAt(i) = _T('-')temp2 = temp2 + TempPoly.GetAt(i);i+;if (i = (Te

8、mpPoly.GetLength()-1) && TempPoly.GetAt(i) = _T('x')temp2 = temp2 + _T('1');elseif (i = TempPoly.GetLength() && TempPoly.GetAt(i-1) = _T('x')temp2 = temp2 + _T('1');elsewhile (i < TempPoly.GetLength() && TempPoly.GetAt(i) != _T('+')

9、&& TempPoly.GetAt(i) != _T('-')temp2 = temp2 + TempPoly.GetAt(i);i+;TempNode->Next = new Node(_ttof(temp1), _ttoi(temp2), NULL); /鏈表構(gòu)建TempNode = TempNode->Next;此函數(shù)用于把從對話框獲取的字符串進行處理,截取出多項式各項系數(shù)和指數(shù),并轉(zhuǎn)換為float型和int型,構(gòu)造一元多項式鏈表。4)CString Polynominal:Output_Node()int first = 0;CString

10、temp;CString temp_coef;CString temp_exp;Node* TempNode = theList.Next;for (; TempNode != NULL; TempNode = TempNode->Next)if (first = 1 && TempNode->coef > 0) temp = temp + _T("+") ;temp_coef.Format(_T("%g"), TempNode->coef);temp_exp.Format(_T("%d"),T

11、empNode->exp);switch (TempNode->exp)case 0:temp = temp + temp_coef; break; /指數(shù)為0則推出case 1:if (TempNode->coef=1)/指數(shù)為1則直接輸出Xtemp = temp + _T("x"); else temp = temp + temp_coef + _T("x"); break; default:if (TempNode->coef = 1) /其余指數(shù)輸出“X”形式 temp = temp + _T("x")

12、+temp_exp;else temp = temp + temp_coef + _T("x")+temp_exp; break; first = 1;return temp;輸出函數(shù),將計算所得結(jié)果輸出到對話框。5)void Polynominal:PolyAdd(Polynominal &a, Polynominal &b)Node *p, *q, *temp;temp = &theList;p = a.theList.Next;q = b.theList.Next;while (p != NULL && q != NULL)if

13、 (p->exp) > (q->exp)temp->Next = new Node(p->coef, p->exp, NULL);temp = temp->Next;p = p->Next;else if (p->exp) = (q->exp)temp->Next = new Node(p->coef + q->coef, p->exp, NULL);temp = temp->Next;p = p->Next;q = q->Next;else if (p->exp) < (q-&g

14、t;exp)temp->Next = new Node(q->coef, q->exp, NULL);temp = temp->Next;q = q->Next;if (q != NULL)while (q != NULL)temp->Next = new Node(q->coef, q->exp, NULL);temp = temp->Next;q = q->Next;if (p != NULL)while (p != NULL)temp->Next = new Node(p->coef, p->exp, NULL

15、);temp = temp->Next;p = p->Next;加法函數(shù),實現(xiàn)多項式的相加。在其中需要判斷各項指數(shù)的關(guān)系,已實現(xiàn)按指數(shù)大小關(guān)系構(gòu)建鏈表。6)void Polynominal:OpposeCoef(Polynominal &a, Node *temp)temp = a.theList.Next;while (temp != NULL)temp->coef = -(temp->coef);temp = temp->Next;在執(zhí)行減法操作時,用此函數(shù)將被減多項式各位系數(shù)取反,之后可直接調(diào)用加法函數(shù)進行運算;7)void Polynominal:

16、PolySubtract(Polynominal &a, Polynominal &b)Node* temp = NULL;Polynominal aa = b;OpposeCoef(aa, temp);PolyAdd(a, aa);減法函數(shù)。先調(diào)用系數(shù)取反函數(shù),再調(diào)用加法函數(shù),可直接實現(xiàn)減法功能。其中為了不改變被減多項式的各項值,在此調(diào)用拷貝構(gòu)造函數(shù)創(chuàng)建臨時對象用于計算。8)void Polynominal:PolyMultiply(Polynominal &a, Polynominal &b)Node *p, *q, *temp;temp = &th

17、eList;p = a.theList.Next;q = b.theList.Next;while (p != NULL)while (q != NULL)temp->Next = new Node(p->coef*q->coef), (p->exp + q->exp), NULL);q = q->Next;temp = temp->Next;p = p->Next;q = b.theList.Next;PolySort();乘法函數(shù)。按項相乘,運算完之后,再調(diào)用排序函數(shù),實現(xiàn)同指數(shù)項系數(shù)相加,并按照指數(shù)大小輸出。9)void Polynomin

18、al:PolySort()Polynominal temp;int i = 1;float temp_coef = 0;int temp_exp = 0;Node* tempNode = theList.Next;Node* tempNode2 = &theList;Node* tempNode3 = &temp.theList;while (i = 1)tempNode = theList.Next;tempNode2 = &theList;for (; tempNode != NULL;)if (tempNode->exp > temp_exp)temp

19、_exp = tempNode->exp;tempNode = tempNode->Next;tempNode = theList.Next;if (tempNode != NULL)for (; tempNode != NULL;)if (tempNode->exp = temp_exp)temp_coef = temp_coef + tempNode->coef;tempNode2->Next = tempNode->Next;tempNode = tempNode->Next;elsetempNode = tempNode->Next;te

20、mpNode2 = tempNode2->Next;tempNode3->Next = new Node(temp_coef, temp_exp, NULL);tempNode3 = tempNode3->Next;temp_coef = 0;temp_exp = 0;elsei = 0;Node* temp2 = &theList;Node* temp3 = temp.theList.Next;for (; temp3 != NULL;)temp2->Next = new Node(temp3->coef, temp3->exp, NULL);te

21、mp2 = temp2->Next;temp3 = temp3->Next;實現(xiàn)相乘之后的排序,是最后的鏈表按照指數(shù)大小排列,并且每個指數(shù)只有一項。10)void Polynominal:OutFile()FOut.open("PolynominalList.txt", ofstream:app);int first = 1;Node* temp = theList.Next;FOut << " ( "for (; temp != NULL; temp = temp->Next)if (!first&&tem

22、p->coef > 0)FOut << "+"FOut << temp->coef;switch (temp->exp)case 0:break; /指數(shù)為0則推出case 1:FOut << "x" break; /指數(shù)為1則直接輸出Xdefault:FOut << "x" << temp->exp; break; /其余指數(shù)輸出“X”形式first = 0;FOut << " ) "FOut.close();文

23、本輸出函數(shù),用于兩個多項式的文本輸出。11)void Polynominal:OutFile(Polynominal &a, Polynominal &b, string ch)FOut.open("PolynominalList.txt", ofstream:app);int first = 1;Node* temp = theList.Next;a.OutFile();FOut << ch;b.OutFile();FOut << " = ( "for (; temp != NULL; temp = temp-&

24、gt;Next)if (!first&&temp->coef > 0)FOut << "+"FOut << temp->coef;switch (temp->exp)case 0:break; /指數(shù)為0則推出case 1:FOut << "x" break; /指數(shù)為1則直接輸出Xdefault:FOut << "x" << temp->exp; break; /其余指數(shù)輸出“X”形式first = 0;FOut <<

25、; " ) "FOut << "nn"FOut.close();重載文本輸出函數(shù),用于最后結(jié)果的一次性文本輸出。3.1. 類設(shè)計表 2 類表序號類名屬性方法1Nodefloat coef; int exp; Node* Next; Node();Node(float c, int e, Node* next);2PolynominalNode theList; ofstream FOut; Polynominal();Polynominal(Polynominal &a); void GetMSG(CString TempPloy);

26、 CString Output_Node(); void PolyAdd(Polynominal &a, Polynominal &b); void PolySubtract(Polynominal &a, Polynominal &b); void PolyMultiply(Polynominal &a, Polynominal &b); void PolySort(); void OutFile(); void OutFile(Polynominal &a, Polynominal &b, string ch); void O

27、pposeCoef(Polynominal &a, Node *temp); 3.2. 類關(guān)系圖3.3. 數(shù)據(jù)結(jié)構(gòu)設(shè)計數(shù)據(jù)成員:1.Class Node:float coef; /系數(shù)int exp; /指數(shù)Node* Next; /指向下一項的指針2.class PolynominalNode theList; /頭節(jié)點 ofstream FOut; /輸出流此類中theList是頭節(jié)點,其成員變量Next指向新建節(jié)點,構(gòu)造成鏈表。3.4. 關(guān)鍵代碼與運行界面關(guān)鍵代碼:#ifndef POLYNOMINA_H#define POLYNOMINA_H#include "Nod

28、e.h"#include <string>#include <afxstr.h>#include <fstream>#include <iostream>using namespace std;class Polynominalpublic:Polynominal();Polynominal(Polynominal &a); /拷貝構(gòu)造函數(shù)void GetMSG(CString TempPloy); /獲取由對話框輸入的字符串并處理CString Output_Node(); /輸出最后結(jié)果void PolyAdd(Polyno

29、minal &a, Polynominal &b); /加法void PolySubtract(Polynominal &a, Polynominal &b); /減法void PolyMultiply(Polynominal &a, Polynominal &b); /乘法void PolySort(); /排序函數(shù),用于乘法之后的按指數(shù)排序void OutFile(); /文本輸出函數(shù)void OutFile(Polynominal &a, Polynominal &b, string ch); /重載文本輸出函數(shù)void O

30、pposeCoef(Polynominal &a, Node *temp); /系數(shù)取反,用于減法運算Node theList; /頭節(jié)點 ofstream FOut; /輸出流;#endif函數(shù)實現(xiàn):#include "stdafx.h"#include "Polynominal.h"#include "conio.h"Polynominal:Polynominal()Polynominal:Polynominal(Polynominal &a)Node* temp = a.theList.Next;Node* te

31、mpNode = &theList;for (; temp != NULL;)tempNode->Next = new Node(temp->coef, temp->exp, NULL);temp = temp->Next;tempNode = tempNode->Next;void Polynominal:GetMSG(CString TempPoly)TempPoly.Remove(_T('');Node* TempNode = &theList;int i = 0;for (i;i<TempPoly.GetLength(

32、); )CString temp1 ;CString temp2 ;int j = 1;if (TempPoly.GetAt(i) =_T('-')temp1 = temp1 + TempPoly.GetAt(i);i+;if (TempPoly.GetAt(i) = _T('+')i+;if (TempPoly.GetAt(i) = _T('x') )temp1 = temp1 +_T('1');while(j=1)if (TempPoly.GetAt(i) != _T('x')temp1 = temp1 + T

33、empPoly.GetAt(i);i+;else j=0;i+;if (i <(TempPoly.GetLength()-1) && TempPoly.GetAt(i) = _T('-')temp2 = temp2 + TempPoly.GetAt(i);i+;if (i = (TempPoly.GetLength()-1) && TempPoly.GetAt(i) = _T('x')temp2 = temp2 + _T('1');elseif (i = TempPoly.GetLength() &&

34、amp; TempPoly.GetAt(i-1) = _T('x')temp2 = temp2 + _T('1');elsewhile (i < TempPoly.GetLength() && TempPoly.GetAt(i) != _T('+') && TempPoly.GetAt(i) != _T('-')temp2 = temp2 + TempPoly.GetAt(i);i+;TempNode->Next = new Node(_ttof(temp1), _ttoi(temp2)

35、, NULL);TempNode = TempNode->Next;CString Polynominal:Output_Node()int first = 0;CString temp;CString temp_coef;CString temp_exp;Node* TempNode = theList.Next;for (; TempNode != NULL; TempNode = TempNode->Next)if (first = 1 && TempNode->coef > 0) temp = temp + _T("+") ;

36、temp_coef.Format(_T("%g"), TempNode->coef);temp_exp.Format(_T("%d"),TempNode->exp);switch (TempNode->exp)case 0:temp = temp + temp_coef; break; /指數(shù)為0則推出case 1:if (TempNode->coef=1)/指數(shù)為1則直接輸出Xtemp = temp + _T("x"); else temp = temp + temp_coef + _T("x&qu

37、ot;); break; default:if (TempNode->coef = 1) /其余指數(shù)輸出“X”形式 temp = temp + _T("x")+temp_exp;else temp = temp + temp_coef + _T("x")+temp_exp; break; first = 1;return temp;void Polynominal:PolyAdd(Polynominal &a, Polynominal &b)Node *p, *q, *temp;temp = &theList;p = a.t

38、heList.Next;q = b.theList.Next;while (p != NULL && q != NULL)if (p->exp) > (q->exp)temp->Next = new Node(p->coef, p->exp, NULL);temp = temp->Next;p = p->Next;else if (p->exp) = (q->exp)temp->Next = new Node(p->coef + q->coef, p->exp, NULL);temp = tem

39、p->Next;p = p->Next;q = q->Next;else if (p->exp) < (q->exp)temp->Next = new Node(q->coef, q->exp, NULL);temp = temp->Next;q = q->Next;if (q != NULL)while (q != NULL)temp->Next = new Node(q->coef, q->exp, NULL);temp = temp->Next;q = q->Next;if (p != NUL

40、L)while (p != NULL)temp->Next = new Node(p->coef, p->exp, NULL);temp = temp->Next;p = p->Next;void Polynominal:OpposeCoef(Polynominal &a, Node *temp)temp = a.theList.Next;while (temp != NULL)temp->coef = -(temp->coef);temp = temp->Next;void Polynominal:PolySubtract(Polyno

41、minal &a, Polynominal &b)Node* temp = NULL;Polynominal aa = b;OpposeCoef(aa, temp);PolyAdd(a, aa);void Polynominal:PolyMultiply(Polynominal &a, Polynominal &b)Node *p, *q, *temp;temp = &theList;p = a.theList.Next;q = b.theList.Next;while (p != NULL)while (q != NULL)temp->Next

42、= new Node(p->coef*q->coef), (p->exp + q->exp), NULL);q = q->Next;temp = temp->Next;p = p->Next;q = b.theList.Next;PolySort();void Polynominal:PolySort()Polynominal temp;int i = 1;float temp_coef = 0;int temp_exp = 0;Node* tempNode = theList.Next;Node* tempNode2 = &theList;N

43、ode* tempNode3 = &temp.theList;while (i = 1)tempNode = theList.Next;tempNode2 = &theList;for (; tempNode != NULL;)if (tempNode->exp > temp_exp)temp_exp = tempNode->exp;tempNode = tempNode->Next;tempNode = theList.Next;if (tempNode != NULL)for (; tempNode != NULL;)if (tempNode->

44、;exp = temp_exp)temp_coef = temp_coef + tempNode->coef;tempNode2->Next = tempNode->Next;tempNode = tempNode->Next;elsetempNode = tempNode->Next;tempNode2 = tempNode2->Next;tempNode3->Next = new Node(temp_coef, temp_exp, NULL);tempNode3 = tempNode3->Next;temp_coef = 0;temp_exp = 0;elsei = 0;Node* temp2 = &theList;Node* temp3 = temp.theList.Next;for (; temp3 != NULL;)temp2->Next = new Node(t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論