#include <iostream> #include <string> using namespace std; class polynome { public: polynome(){ n=2; ind=new int[n]; pt=0; } polynome(int *, int); ~polynome(); static int quantity() { return q; } void print(); void printGorts(); polynome operator+(polynome pol); polynome& operator=(polynome s){ n=s.n; pt=s.pt; for(int i=0;i<n;i++){ ind[i]=s.ind[i]; } return (*this); } void read () { string s; cout << "Intup a polynome: "; cin >> s; ssize=s.size(); int nshan = 1; int pos = 0; while (pos < s.size()) { string tmp; while (pos < s.size() && s[pos] != '-' && s[pos] != '+') { tmp.push_back(s[pos]); pos++; } string tmp1, tmp2; int posInTmp = 0; while (tmp[posInTmp] >= '0' && tmp[posInTmp] <= '9' && posInTmp < (int)tmp.size()) { tmp1.push_back(tmp[posInTmp]); posInTmp++; } if (posInTmp == tmp.size()) { int gortsakic = strToInt(tmp1); ind[0] += nshan*gortsakic; if (pos < s.size()) { if (s[pos] == '+') nshan = 1; else nshan = -1; pos++; } continue; } if (posInTmp == tmp.size()-1) { int gortsakic = strToInt(tmp1); ind[1] += nshan*gortsakic; if (pos < s.size()) { if (s[pos] == '+') nshan = 1; else nshan = -1; pos++; } continue; } posInTmp += 2; // trnum em x^ - i vrov while (posInTmp < (int)tmp.size()) { tmp2.push_back(tmp[posInTmp]); posInTmp++; } int gortsakic = nshan*strToInt(tmp1), cucich = strToInt(tmp2); if (!tmp2.empty()) ind[cucich] += gortsakic; else ind[0] += gortsakic; if (pos != (int)s.size()) { if (s[pos] == '-') nshan = -1; else nshan = 1; pos++; } } int d=0;; for (int i = pt; i >= 0; i--){ if(ind[i]==0){ continue; } d=i; break; } pt=d-1; n=d; } private: int *ind; int pt,ssize,n; static int q; int power(int x, int n) { int k=1; for (int i = 1; i < n; i++) k *= x; return k; } int strToInt (string s) { if (s.empty()) return 1; int tmp = 0; for (int i = 0; i < (int)s.size(); ++i) { tmp = tmp*10 + (s[i]-'0'); } return tmp; } }; polynome polynome::operator+(polynome pol){ int size = max(pol.n,n); cout<<size<<endl; polynome polyn; polyn.ind= new int[size]; polyn.n = size; for(int i=0;i<=size;i++){ polyn.ind[i]=ind[i]+pol.ind[i]; } return polyn; } int polynome::q = 0; polynome::polynome(int *ind, int pt) { this->ind = new int[pt+1]; for (int i = 0; i < pt+1; i++) this->ind[i] = ind[i]; this->pt = pt; ++q; } polynome::~polynome() { delete[] ind; //--q; /////////////////// es pahin ushadir } void polynome::print() { // es funkcian asum a sirun tpenq, es el ushadir bool flag = false; for (int i = ssize; i > 1; --i) { if (ind[i] != 0) { if (ind[i] == 1) { if (flag) { cout << "+x^" << i; } else cout << "x^" << i; flag = true; continue; } if (ind[i] == -1) { cout << "-x^" << i; flag = true; continue; } if (ind[i] > 0 && flag) cout << '+'; cout << ind[i] << "x^" << i; flag = true; } } if (ind[1] != 0) { if (ind[1] > 0 && flag) cout << '+'; if (ind[1] != 1 && ind[1] != -1) cout << ind[1]; else if (ind[1] == -1) cout << '-'; cout << 'x'; flag = true; } if (ind[0] != 0) { if (ind[0] > 0 && flag) cout << '+'; cout << ind[0]; } cout << endl; } void polynome::printGorts() { // esi vat a, erevi arji dzes for(int i=0;i<=n;i++){ if(ind[i]==0) continue; cout<<ind[i]<<endl; } } int main() { int *a = new int[101]; for (int i = 0; i < 101; ++i) a[i] = 0; polynome p(a, 100),c(a,100),*sum; p.read(); c.read(); sum=new polynome(); (*sum)=p+c; sum->printGorts(); return 0; }
4x^4+4x-7 2x^2+5
Intup a polynome: Intup a polynome: 4 -2 4 2
*** Error in `./prog': double free or corruption (!prev): 0x0000000000734f60 *** ======= Backtrace: ========= /lib/x86_64-linux-gnu/libc.so.6(+0x70bcb)[0x2b1001927bcb] /lib/x86_64-linux-gnu/libc.so.6(+0x76f96)[0x2b100192df96] /lib/x86_64-linux-gnu/libc.so.6(+0x7778e)[0x2b100192e78e] ./prog[0x401603] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf1)[0x2b10018d72b1] ./prog[0x400dfa] ======= Memory map: ======== 00400000-00403000 r-xp 00000000 fd:00 16392159 /home/zUPL5z/prog 00602000-00603000 r--p 00002000 fd:00 16392159 /home/zUPL5z/prog 00603000-00604000 rw-p 00003000 fd:00 16392159 /home/zUPL5z/prog 00723000-00755000 rw-p 00000000 00:00 0 [heap] 2b1000bd7000-2b1000bfa000 r-xp 00000000 fd:00 7484103 /lib/x86_64-linux-gnu/ld-2.24.so 2b1000bfa000-2b1000bfe000 rw-p 00000000 00:00 0 2b1000c07000-2b1000c0c000 rw-p 00000000 00:00 0 2b1000dfa000-2b1000dfb000 r--p 00023000 fd:00 7484103 /lib/x86_64-linux-gnu/ld-2.24.so 2b1000dfb000-2b1000dfc000 rw-p 00024000 fd:00 7484103 /lib/x86_64-linux-gnu/ld-2.24.so 2b1000dfc000-2b1000dfd000 rw-p 00000000 00:00 0 2b1000dfd000-2b1000f00000 r-xp 00000000 fd:00 7484132 /lib/x86_64-linux-gnu/libm-2.24.so 2b1000f00000-2b10010ff000 ---p 00103000 fd:00 7484132 /lib/x86_64-linux-gnu/libm-2.24.so 2b10010ff000-2b1001100000 r--p 00102000 fd:00 7484132 /lib/x86_64-linux-gnu/libm-2.24.so 2b1001100000-2b1001101000 rw-p 00103000 fd:00 7484132 /lib/x86_64-linux-gnu/libm-2.24.so 2b1001101000-2b1001273000 r-xp 00000000 fd:00 7487266 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22 2b1001273000-2b1001473000 ---p 00172000 fd:00 7487266 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22 2b1001473000-2b100147d000 r--p 00172000 fd:00 7487266 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22 2b100147d000-2b100147f000 rw-p 0017c000 fd:00 7487266 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22 2b100147f000-2b1001483000 rw-p 00000000 00:00 0 2b1001483000-2b1001499000 r-xp 00000000 fd:00 7484067 /lib/x86_64-linux-gnu/libgcc_s.so.1 2b1001499000-2b1001698000 ---p 00016000 fd:00 7484067 /lib/x86_64-linux-gnu/libgcc_s.so.1 2b1001698000-2b1001699000 r--p 00015000 fd:00 7484067 /lib/x86_64-linux-gnu/libgcc_s.so.1 2b1001699000-2b100169a000 rw-p 00016000 fd:00 7484067 /lib/x86_64-linux-gnu/libgcc_s.so.1 2b100169a000-2b10016b2000 r-xp 00000000 fd:00 7484088 /lib/x86_64-linux-gnu/libpthread-2.24.so 2b10016b2000-2b10018b1000 ---p 00018000 fd:00 7484088 /lib/x86_64-linux-gnu/libpthread-2.24.so 2b10018b1000-2b10018b2000 r--p 00017000 fd:00 7484088 /lib/x86_64-linux-gnu/libpthread-2.24.so 2b10018b2000-2b10018b3000 rw-p 00018000 fd:00 7484088 /lib/x86_64-linux-gnu/libpthread-2.24.so 2b10018b3000-2b10018b7000 rw-p 00000000 00:00 0 2b10018b7000-2b1001a4c000 r-xp 00000000 fd:00 7484231 /lib/x86_64-linux-gnu/libc-2.24.so 2b1001a4c000-2b1001c4b000 ---p 00195000 fd:00 7484231 /lib/x86_64-linux-gnu/libc-2.24.so 2b1001c4b000-2b1001c4f000 r--p 00194000 fd:00 7484231 /lib/x86_64-linux-gnu/libc-2.24.so 2b1001c4f000-2b1001c51000 rw-p 00198000 fd:00 7484231 /lib/x86_64-linux-gnu/libc-2.24.so 2b1001c51000-2b1001c55000 rw-p 00000000 00:00 0 2b1004000000-2b1004021000 rw-p 00000000 00:00 0 2b1004021000-2b1008000000 ---p 00000000 00:00 0 7ffcb91ed000-7ffcb920e000 rw-p 00000000 00:00 0 [stack] 7ffcb93ba000-7ffcb93bc000 r-xp 00000000 00:00 0 [vdso] 7ffcb93bc000-7ffcb93be000 r--p 00000000 00:00 0 [vvar] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]