?? polynomial.cpp
字號:
#include <iostream>
#include "Polynomial.h"
using namespace std;
/* 本多項式加上項e
*/
void Polynomial::add(Term e) {
// 找出多項式中首個系數(shù)大于等于項e的項的前一項
SList<Term>::Itor itor = list_.head(); // 注意: 此處的itor始終指向想要訪問的
// 項的前一項
for ( ; ( itor != list_.tail() ) &&
( (itor->next->data).compareTo(e) < 0 );
itor=itor->next)
; // 空循環(huán)體
if ( itor == list_.tail() ||
(itor->next->data).compareTo(e) > 0 ) { // 指數(shù)相等的項本來不存在
list_.insertAfter(itor, e);
} else { // 找到指數(shù)相等的項
(itor->next->data).coef += e.coef;
if ( (itor->next->data).coef == 0 )
list_.removeNext(itor);
}
} // add(Term e)
/* 本多項式乘以項e
*/
void Polynomial::mul(Term e) {
SList<Term>::Itor itor = list_.head(); // 注意: 此處的itor始終指向想要訪問的
// 項的前一項
for ( ; itor != list_.tail(); itor=itor->next) {
(itor->next->data).coef *= e.coef; // 系數(shù)相乘
if ( (itor->next->data).coef == 0 )
list_.removeNext(itor);
(itor->next->data).expn += e.expn; // 指數(shù)相加
}
} // mul(Term e)
/* 本多項式加上多項式rhs
*/
void Polynomial::add(const Polynomial& rhs) {
SList<Term>::Itor ilhs = list_.head(),
irhs = rhs.list_.head(); // 注意: 此處的litor和ritor
// 始終指向想要訪問的項的前一項
while ( ilhs != list_.tail() &&
irhs != rhs.list_.tail() ) {
int cmp = (ilhs->next->data).compareTo(irhs->next->data); // 比較兩個項指數(shù)大小
if ( cmp > 0 ) { // ilhs所指項的后一項指數(shù)大
list_.insertAfter(ilhs, irhs->next->data);
ilhs=ilhs->next;
irhs=irhs->next;
} else
if ( cmp == 0 ) { // ilhs和irhs所指項的后一項指數(shù)相等
(ilhs->next->data).coef += (irhs->next->data).coef;
if (ilhs->next->data.coef == 0) {
list_.removeNext(ilhs);
} else {
ilhs=ilhs->next;
}
irhs=irhs->next;
} else { // ilhs所指項的后一項指數(shù)小
ilhs=ilhs->next; // 不是不加, 時候未到
}
}
while ( irhs != rhs.list_.tail() ) { // 加入剩余結(jié)點
list_.insertAfter(list_.tail(), irhs->next->data);
irhs=irhs->next;
}
} // add(const Polynomial&)
/* 本多項式減去多項式rhs
*/
void Polynomial::sub(const Polynomial& rhs) {
SList<Term>::Itor ilhs = list_.head(),
irhs = rhs.list_.head(); // 注意: 此處的litor和ritor
// 始終指向想要訪問的項的前一項
while ( ilhs != list_.tail() &&
irhs != rhs.list_.tail() ) {
int cmp = (ilhs->next->data).compareTo(irhs->next->data); // 比較兩個項指數(shù)大小
if ( cmp > 0 ) { // ilhs所指項的后一項指數(shù)大
Term e = irhs->next->data;
e.coef = -e.coef;
list_.insertAfter(ilhs, e);
ilhs=ilhs->next;
irhs=irhs->next;
} else
if ( cmp == 0 ) { // ilhs和irhs所指項的后一項指數(shù)相等
(ilhs->next->data).coef -= (irhs->next->data).coef;
if (ilhs->next->data.coef == 0) {
list_.removeNext(ilhs);
} else {
ilhs=ilhs->next;
}
irhs=irhs->next;
} else { // ilhs所指項的后一項指數(shù)小
ilhs=ilhs->next; // 不是不減, 時候未到
}
}
while ( irhs != rhs.list_.tail() ) { // 加入剩余結(jié)點
Term e = irhs->next->data;
e.coef = -e.coef;
list_.insertAfter(list_.tail(), e);
irhs=irhs->next;
}
} // sub(const Polynomial&)
/* 本多項式乘以多項式rhs
*/
void Polynomial::mul(const Polynomial& rhs) {
Polynomial result, temp;
SList<Term>::Itor itor = rhs.list_.begin(); // 注意: 此處的itor始終指向想要訪問的
// 項本身
for ( ; itor != rhs.list_.end(); itor=itor->next) {
temp = *this;
temp.mul(itor->data);
result.add(temp);
}
*this = result;
} // mul(const Polynomial&)
/* 在cout打印一元多項式
*/
void Polynomial::print() const {
SList<Term>::Itor itor = list_.begin();
cout << itor->data.coef;
if ( itor->data.expn != 0 )
cout << " * x^(" << itor->data.expn << ")";
itor = itor->next;
for ( ; itor != list_.end(); itor=itor->next) {
if ( itor->data.coef >= 0 )
cout << " + " << itor->data.coef;
else
cout << " - " << -(itor->data).coef;
if ( itor->data.expn != 0 )
cout << " * x^(" << itor->data.expn << ")";
}
cout << endl;
} // print() const
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -