一元多項式操作

nan1010894558發表於2017-10-25

主要程式碼:

//合併一元多項式中相同的冪的項
void  UnionList(LinkList &L)
{
	int ex1,ex2;
	float co0,co1,co2;
	LinkList p = L;
	for(int i = 1; i < ListLength(L); i++)
	{
		GetElem(L, i, co1, ex1);
		if(co1 == 0)
			ListDelete(L, i, co1, ex1);
		for (int j = i+1; j < ListLength(L)+1; j++)
		{
			GetElem(L, j, co2, ex2);
			if(co2 == 0)
				ListDelete(L, j, co2, ex2);
		    else if(ex2 == ex1)
			{
				co0 = co1 + co2;      //解決在同一一元多項式中有相同係數的情況
				ListDelete(L, j, co2, ex2);
				ListDelete(L, i, co1, ex1);
				ListInsert(L, i, co0, ex1);
			}				 
		}
	}
}

//取表L中的第i個元素,並用返回. 操作成功返回OK,失敗時返回ERROR 
Status GetElem(LinkList L, int i, float &co, int &ex)
{
    if(i > ListLength(L) || i <= 0)    return ERROR;
	int j = 0;
	LinkList p = L;
	while(p&&j < i)
	{
		p = p->next;
		j++;
	}
	if(p && j == i)
	{
		co = p->coef;
		ex = p->expn;
		return ex;
	}
	else
		return ERROR;

    //-------------------------------------
}

//建立一元多項式P,當輸入的指數和係數都為0時,輸入結束。
// 一元多項式就被建立 。   
void CreatPolyn(polynomial &P)
{
	
	InitList(P);
	printf(" \n輸入係數和指數:\n");
	read(P->coef,P->expn);     //輸入係數和指數
	//-------------------TODO------------------//
	while(P->coef!=0||P->expn!=0){
		ListInsert(P, 1, P->coef, P->expn);
		printf(" \n輸入係數和指數:\n");
        read(P->coef,P->expn); 
	}
	//------------初始化表示式,不斷輸入係數和指數,直到讀到0,0為止----------//

}

//完成多項式相加運算,即:Pa = Pa + Pb,並銷燬一元多項式Pb
void AddPolyn(polynomial &Pa,polynomial &Pb)
{
	UnionList(Pa);   //合併一元多項式中具有
	UnionList(Pb);   //相同指數的項

	for (int i=1; i<=ListLength(Pb); i++)
	{
		float co;
		int ex;
		GetElem(Pb, i, co, ex);
		if(LocateElem(Pa, ex) > 0)    //判斷Pa中是否具有Pb中相同指數的項,
		{                             //如果有,進行相加 
			int j = LocateElem(Pa, ex);   //記錄Pa中相同項的位置
			int k = 0;
			polynomial s = Pa;
			while(k < j)     //查詢這一位置
			{
		
				s=s->next;
				k++;

			}
			s->coef += co;    //係數項相加
		
		}
		else       //不存在相同的指數,將Pb中的該項插入Pa
			ListInsert(Pa, 1, co, ex);
	}
	DestroyList(Pb);	//銷燬Pb	
}

//完成多項式的求導函式,即:Pa = Pa' 
void Derivative(polynomial &P)
{
	polynomial s = P->next;
	while(s)
	{
		s->coef=s->coef*s->expn;
		s->expn=s->expn-1;
		s=s->next;
	}
}

//完成多項式的積分函式, Pa = ∫Pa' dx 
void Calculus (polynomial &P)
{    polynomial s = P->next;
	while(s)
	{
		s->expn=s->expn+1;
		s->coef=s->coef/s->expn;
		s=s->next;
	}

}

執行結果圖:


完整程式碼:

點選開啟連結

相關文章