一元多项式

来源:互联网 发布:php swoole 编辑:程序博客网 时间:2024/04/29 16:03
头文件:多项式.h#include"iostream"#include"string"using namespace std;class Polynomial{public:Polynomial();void Create();void Insert(double Xishu,double Zhishu);void show();void ADD(Polynomial &p, Polynomial &p2);bool Delete(double xishu,double zhishu);void FindOut();void Take(Polynomial &p, Polynomial &p2);void Minus(Polynomial &p, Polynomial &p2);private:class Poly{public:Poly() { Xishu = 0; Zhishu = 0; }void shows(){if (Zhishu == 0)cout << Xishu;else if (Xishu == 0){}else if (Xishu == 1){cout <<"X" << '(' << Zhishu << ')';}elsecout << Xishu << "X" << '(' << Zhishu << ')' ;}double Xishu;double Zhishu;Poly*Next;};Poly*Head;Poly*Tail;};多项式.cpp#include"多项式.h"Polynomial::Polynomial(){Head = new Poly;Tail = Head;}void Polynomial::ADD(Polynomial &p, Polynomial &p2){Poly *L = p2.Head->Next;while (L != NULL){p.Insert(L->Xishu, L->Zhishu);L = L->Next;}p.FindOut();}void Polynomial::Take(Polynomial &p, Polynomial &p2){Polynomial New;for (Poly*h = p.Head->Next; h != NULL; h = h->Next)for (Poly*k = p2.Head->Next; k != NULL; k = k->Next)New.Insert(h->Xishu*k->Xishu, h->Zhishu+k->Zhishu);New.FindOut();New.show();}void Polynomial::Minus(Polynomial &p, Polynomial &p2){Poly*k = p2.Head->Next;for (; k != NULL; k = k->Next){k->Xishu -= 2 * k->Xishu;}Poly *L = p2.Head->Next;while (L != NULL){p.Insert(L->Xishu, L->Zhishu);L = L->Next;}p.FindOut();}void Polynomial::FindOut(){Poly *p,*q;p = Head->Next;for (p = Head->Next; p != NULL; p = p->Next)for (q = p->Next; q != NULL;q=q->Next)if (p->Zhishu == q->Zhishu){p->Xishu += q->Xishu;q->Xishu = 0;}}void Polynomial::show(){Poly*p;p = Head->Next;while (p != NULL){p->shows();p = p->Next;if (p!=NULL&&p->Xishu > 0)cout << '+';}} void Polynomial::Insert(double xishu,double zhishu){Poly*NEW;NEW = new Poly;NEW->Xishu = xishu;NEW->Zhishu = zhishu;Tail->Next= NEW ;Tail = Tail->Next;Tail->Next = NULL;}bool Polynomial::Delete(double xishu, double zhishu){Poly*p = Head;Poly*q;for (; p!= NULL;p=p->Next)if (p->Next->Xishu == xishu&&p->Next->Zhishu == zhishu){q = p->Next;p->Next = q->Next;delete q;return true;}return false;}void Polynomial::Create(){/*cout << "输入项数:" << endl;int n;cin >> n;for (int i = 0; i < n; i++){double B, D;cout << "第" << i + 1 << "项系数和指数" << endl;cin >> B >> D;Insert(B, D);}*/string X;char*p;// cout<< "请输入一个多项式:" << endl;cin >> X;char*T;T = &X[0];while (*T != NULL){while (*T != 'x'&&*T != 'X'&&*T != '('&&*T != ')'&&*T != '-'&&*T != '+'&&*T!='0'&&*T!='1'&&*T!='2'&&*T != '3'&&*T != '4'&&*T != '5'&&*T != '6'&&*T != '7'&&*T != '8'&&*T != '9'){cout << "请不要乱输入!再输入一次吧:" << endl;cin >> X;T = &X[0];}T++;}string Str[10];p = &X[0];int i = 0;while (*p != NULL){while ((*p != '+'&& *p != '-'&&*p != NULL) || p == &X[0]){char*f;f = p;f--;if (*f == '-'){Str[i] += '-';}Str[i] += *p;p++;}i++;if (*p == NULL)break;else{p++;}}for (int n = 0; n < i; n++){//cout << Str[n] << endl;double B;double D;char*q[10];q[n] = &Str[n][0];string Str1[10];string Str2[10];while (*q[n] != NULL){if (*q[n] != 'X'&&*q[n] != 'x'&&*q[n] != '('){while (*q[n] != 'X'&&*q[n] != 'x'&&*q[n] != '('&&*q[n]!=NULL){Str1[n] += *q[n];q[n]++;}if (Str1[n] == "-")Str1[n] += '1';B = atof(Str1[n].c_str());if (*q[n] == NULL) { D = 0; }else if (*++q[n] == '('){q[n]++;while (*q[n] != ')'){Str2[n] += *q[n];q[n]++;}D = atof(Str2[n].c_str());}else { D = 0; }Insert(B, D); break;}else if (*q[n] == 'X' || *q[n] == 'x'){B = 1;q[n]++;if (*q[n] == '('){q[n]++;while (*q[n] != ')'){Str2[n] += *q[n];q[n]++;}D = atof(Str2[n].c_str());}Insert(B, D); break;}else{B = D = 0; break;}/*if (48 <= *q[n] <= 57|| q[n] == &Str[n][0]){while (*q[n] != 'x'&&*q[n]!=NULL){Str1[n] += *q[n];q[n]++;B = atof(Str1[n].c_str());}}else if (*q[n] == 'x' || *q[n] == 'X'){B = 1;}else{B = 0;}if (*q[n] == '('){q[n]++;while (*q[n] != ')'){Str2[n] += *q[n];q[n]++;}D = atof(Str2[n].c_str());}else{D = 0;}if (*q[n] == NULL)break;q[n]++;//cout << "insert" << endl;cout << B << "  " << D << endl;}Insert(B, D);*/}}}mian.cpp/*乘法:请输入第1个一元多项式:7+x(2)+3x(5)-100x(100)请输入运算符:*请输入第2个一元多项式:x(2)-3x(5)运算结果为:7x(2)+x(4)-21x(5)-9x(10)-100x(102)+300x(105)加法:请输入第1个一元多项式:7+x(2)+3x(5)-100x(100)请输入运算符:+请输入第2个一元多项式:x(2)-3x(5)运算结果为:7+2x(2)-100x(100)减法:请输入第1个一元多项式:7+x(2)+3x(5)-100x(100)请输入运算符:-请输入第2个一元多项式:x(2)-3x(5)运算结果为:7+6x(5)-100x(100)*/#include"多项式.h"int main(){Polynomial P;Polynomial P2;cout << "乘法:" << endl;cout << "请输入第一个一元多项式:" << endl;P.Create();  cout << endl;cout << "请输入运算符(*,+,-):" << endl;string t;cin >> t;while(t != "*"&&t!= "+" &&t!= "-"){cout << "您输入的运算符有误,请重新输入:" << endl;cin >> t;}char *x;x = &t[0];cout << "请输入第二个一元多项式:" << endl;switch (*x){case '*':P2.Create();cout << "运算结果是:"; P.Take(P, P2); cout << endl; break;case'+':P2.Create();cout << "运算结果是:"; P.ADD(P, P2); P.show(); cout << endl; break;case'-':P2.Create(); cout << "运算结果是:"; P.Minus(P, P2); P.show(); cout << endl; break;default:break;}cout << "加法:" << endl;Polynomial P3;Polynomial P4;cout << "请输入第一个一元多项式:" << endl;P3.Create(); cout << endl;cout << "请输入运算符:" << endl;cin >> t;while (t != "*"&&t != "+" &&t != "-"){cout << "您输入的运算符有误,请重新输入:" << endl;cin >> t;}x = &t[0];cout << "请输入第二个一元多项式:" << endl;switch (*x){case '*':P4.Create(); cout << "运算结果是:"; P.Take(P3, P4); cout << endl; break;case'+':P4.Create(); cout << "运算结果是:"; P.ADD(P3, P4); P3.show(); cout << endl; break;case'-':P4.Create(); cout << "运算结果是:"; P.Minus(P3, P4); P3.show(); cout << endl; break;default:break;}cout << "减法:" << endl;Polynomial P5;Polynomial P6;cout << "请输入第一个一元多项式:" << endl;P5.Create(); cout << endl;cout << "请输入运算符:" << endl;cin >> t;while (t != "*"&&t != "+" &&t != "-"){cout << "您输入的运算符有误,请重新输入:" << endl;cin >> t;}x = &t[0];cout << "请输入第二个一元多项式:" << endl;switch (*x){case '*':P6.Create(); cout << "运算结果是:"; P5.Take(P5, P6); cout << endl; break;case'+':P6.Create(); cout << "运算结果是:"; P5.ADD(P5, P6); P5.show(); cout << endl; break;case'-':P6.Create(); cout << "运算结果是:"; P5.Minus(P5, P6); P5.show(); cout << endl; break;default:break;}}

0 0
原创粉丝点击