1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespacestd;7
8
9 structPolynomial{10 intCoef;11 intExponent;12 Polynomial*Next;13 };14
15 Polynomial* ReadDataFromFile(Polynomial* Poly, string s); //Read polynomial data from a file
16 void PrintPolynomial(Polynomial* Poly); //Output polynomial to the screen
17 void WriteToFile(Polynomial* Poly, string s); //Write polynomial data to a file
18 int research(Polynomial* Poly, intEpt);19 Polynomial* MultPolynomial(Polynomial* Poly1, Polynomial* Poly2, Polynomial* PolyMult); //Multiply two polynomials
20 Polynomial* AddPolynomial( Polynomial* Poly1,Polynomial* Poly2); //Adding two polynomials
21
22
23
24 Polynomial*Poly1;25 Polynomial*Poly2;26 Polynomial* PolySum; //The result of adding two polynomials
27 Polynomial* PolyMult; //The result of multiplying two polynomials
28
29 intmain() {30 string s1 = "data1.txt";31 string s2 = "data2.txt";32 Poly1 =ReadDataFromFile(Poly1, s1);33 Poly2 =ReadDataFromFile(Poly2, s2);34 cout << "P1(X)=";35 PrintPolynomial(Poly1);36 cout << "P2(X)=";37 PrintPolynomial(Poly2);38
39 s1 = "dataSum.txt";40 s2 = "dataMult.txt";41 PolyMult =MultPolynomial(Poly1, Poly2, PolyMult);42 cout << "P2(X)=P1(X)*P2(X)=";43 PrintPolynomial(PolyMult);44
45 PolySum =AddPolynomial(Poly1, Poly2);46 cout << "F1(X)=P1(X)+P2(X)=";47 PrintPolynomial(PolySum);48
49 WriteToFile(PolySum, s1);50 WriteToFile(PolyMult, s2);51
52 system("pause");53 }54
55 Polynomial* ReadDataFromFile(Polynomial* Poly, strings) {56 Poly = newPolynomial;57 Poly->Coef = 0;58 Poly->Exponent = 0;59 Poly->Next =NULL;60
61 ifstream infile(s.c_str());62 intCoef, Ept;63
64 if(infile.fail()) {65 cerr << "error" <> Coef >>Ept;71 q = newPolynomial;72 q->Coef =Coef;73 q->Exponent =Ept;74 q->Next =NULL;75
76 p->Next =q;77 p =q;78 }79 infile.close();80 returnPoly;81 }82 void PrintPolynomial(Polynomial*Poly) {83 if (Poly->Next ==NULL) {84 cerr << "List is empty";85 abort();86 }87 Polynomial *p;88 p = Poly->Next;89 intCoef, Ept;90 string s = "";91 stringtmp;92 while(p) {93 Coef = p->Coef;94 Ept = p->Exponent;95
96 if (Coef > 0) {97 if (Ept == 0) {98 stringstream ss;99 ss << Coef<>tmp;101 s +=tmp;102 }103 else{104 stringstream ss;105 ss << Coef << "X^" << Ept << '+';106 ss >>tmp;107 s +=tmp;108 }109 }110 else if (Coef < 0) {111 if (Ept == 0) {112 stringstream ss;113 ss << Coef<>tmp;115 int len =s.length();116 s = s.substr(0, len - 1);117 s +=tmp;118 }119 else{120 stringstream ss;121 ss << Coef << "X^" << Ept << '+';122 ss >>tmp;123 int len =s.length();124 s = s.substr(0, len - 1);125 s +=tmp;126 }127 }128
129 p = p->Next;130 }131 int len =s.length();132 if (s[len - 1] == '+') {133 cout << s.substr(0, len - 1) <
138 void WriteToFile(Polynomial* Poly, strings) {139 Polynomial*p;140 ofstream outfile(s.c_str());141 if(outfile.fail()) {142 abort();143 }144 p = Poly->Next;145 intCoef, Ept;146 while(p) {147 Coef = p->Coef;148 Ept = p->Exponent;149 outfile << Coef << " " << Ept << " ";150 p = p->Next;151 }152 outfile.close();153 }154
155 Polynomial* MultPolynomial(Polynomial* Poly1, Polynomial* Poly2, Polynomial*PolyMult) {156 Polynomial *p1, *p2, *front;157
158 p1 = Poly1->Next;159 p2 = Poly2->Next;160 PolyMult = newPolynomial;161
162 PolyMult->Next =NULL;163 intCoef1, Ept1;164 intCoef2, Ept2;165 while(p1) {166 Coef1 = p1->Coef;167 Ept1 = p1->Exponent;168
169 p2 = Poly2->Next;170 while(p2) {171 Coef2 = p2->Coef;172 Ept2 = p2->Exponent;173
174 intCoef, Ept;175
176 Coef = Coef1*Coef2;177 Ept = Ept1 +Ept2;178
179 Polynomial* rsh=PolyMult;180 front = PolyMult->Next;181 if (rsh&&rsh->Exponent !=Ept) {182 while (rsh->Next&&rsh->Next->Exponent !=Ept) {183 rsh = rsh->Next;184 }185 }186
187 if (rsh->Next) {188 //cout << "rsh->Coef " << rsh->Coef << "rsh->Exponent " << rsh->Exponent << endl;189 //cout << "Coef " << Coef << endl;190 //cout << rsh->Next->Coef << " " << Coef << endl;191 //cout << Coef1 << " " << Coef2 << endl;
192 rsh->Next->Coef +=Coef;193 //cout << "rsh->Coef " << rsh->Next->Coef << "rsh->Exponent " << rsh->Next->Exponent << endl;
194 }195 else{196 Polynomial *q = newPolynomial;197 q->Coef =Coef;198 q->Exponent =Ept;199 q->Next =NULL;200 rsh->Next =q;201
202 //cout << "q->Coef " << q->Coef << "q->Exponent " << q->Exponent << endl;
203
204 }205
206 p2 = p2->Next;207 }208
209 p1 = p1->Next;210 }211 //system("pause");
212 returnPolyMult;213 }214
215
216 Polynomial* AddPolynomial(Polynomial* Poly1, Polynomial*Poly2) {217 Polynomial *PolySum = newPolynomial;218 PolySum->Next =NULL;219
220 Polynomial *p1, *p2,*q, *front;221
222 p1 = Poly1->Next;223 Polynomial* p=PolySum;224 while(p1) {225 q = newPolynomial;226 q->Coef = p1->Coef;227 q->Exponent = p1->Exponent;228 q->Next =NULL;229
230 p->Next =q;231 p =q;232 p1 = p1->Next;233 }234
235
236 intCoef2, Ept2;237
238 p2 = Poly2->Next;239 while(p2) {240 Coef2 = p2->Coef;241 Ept2 = p2->Exponent;242
243 p1 = PolySum->Next;244 front = PolySum->Next;245 while (p1&&p1->Exponent!=Ept2) {246 front =p1;247 p1 = p1->Next;248 }249 if(p1) {250 p1->Coef +=Coef2;251 }252 else{253 q = newPolynomial;254 q->Coef =Coef2;255 q->Exponent =Ept2;256 q->Next =NULL;257
258 front->Next =q;259 //cout << "Coef2 " << Coef2 << " " << "Ept2 " << Ept2 << endl;
260 }261 p2 = p2->Next;262 }263
264 returnPolySum;265 }