Advertisement
Monika__

Polynomial

Nov 18th, 2019
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.90 KB | None | 0 0
  1. # pragma once
  2. #include <iostream>
  3. #include <map>
  4.  
  5. using namespace std;
  6.  
  7. class Poly{
  8.   public:
  9.     Poly(); //konstruktor
  10.     Poly(double); // konstruktor z zadeklarowanym pierwszym elementem
  11.     map <int, double> coefMap; // mapa
  12.     void eraseZeros(); // usuwamy wartosci zero
  13.     double &operator[] (unsigned int); // zwraca element na miejscu w nawiasach
  14.     Poly operator- () const; //neguje wartosci
  15.     double operator() (double) const; //liczy wartosc poly dla podanej liczby
  16.     ~Poly();
  17.  
  18. };
  19.  
  20. ostream & operator<< (ostream&, const Poly&); // printuje
  21. Poly operator+ (const Poly&, const Poly&);
  22. Poly operator- (const Poly&, const Poly&);
  23. Poly operator* (const Poly&, const Poly&);
  24.  
  25. #include "Poly.h"
  26. #include <math.h>
  27.  
  28.  
  29. Poly::Poly() {}
  30.  
  31. Poly::Poly(double value)
  32. {
  33.     coefMap.insert(pair<int, double>(0, value));
  34. }
  35.  
  36. Poly::~Poly()
  37. {
  38.     this->coefMap.clear();
  39. }
  40.  
  41.  
  42. double &Poly:: operator[] (unsigned int key)
  43. {
  44.   return coefMap[key];
  45. }
  46.  
  47. ostream & operator << (ostream& out, const Poly& polynomial)
  48. {
  49.     bool firstElement = true;
  50.     map<int, double>::const_reverse_iterator iterator = polynomial.coefMap.rbegin();
  51.     for(; iterator != polynomial.coefMap.rend(); iterator++)
  52.     {
  53.         if(iterator->second == 0)
  54.         {
  55.             continue;
  56.         }
  57.         if(iterator->second > 0)
  58.         {
  59.             if(!firstElement) out << " + ";
  60.         }
  61.         else
  62.         {
  63.             out << " - ";
  64.         }
  65.         firstElement = false;
  66.         if(abs(iterator->second) != 1)
  67.         {
  68.             out << abs(iterator->second);
  69.         }
  70.         if(iterator->first == 0) continue;
  71.         {
  72.         out << "x";
  73.         }
  74.         if(iterator->first != 1)
  75.         {
  76.             out << "^" << iterator->first;
  77.            
  78.         }
  79.     }
  80.     return out;
  81. }
  82.  
  83. Poly operator+ (const Poly& p1, const Poly& p2)
  84. {
  85.   Poly result;
  86.   for(map<int,double>::const_iterator  iterator = p1.coefMap.begin(); iterator != p1.coefMap.end(); iterator++)
  87.   {
  88.     result.coefMap[iterator->first] = iterator->second;
  89.   }
  90.   for(map<int,double>::const_iterator  iterator = p2.coefMap.begin(); iterator != p2.coefMap.end(); iterator++)
  91.   {
  92.     result.coefMap[iterator->first] += iterator->second;
  93.   }
  94.   result.eraseZeros();
  95.   return result;
  96. }
  97.  
  98.  
  99. Poly operator- (const Poly& p1, const Poly& p2)
  100. {
  101.   Poly result;
  102.   for(map<int,double>::const_iterator  iterator = p1.coefMap.begin(); iterator != p1.coefMap.end(); iterator++)
  103.   {
  104.     result.coefMap[iterator->first] = iterator->second;
  105.   }
  106.   for(map<int,double>::const_iterator  iterator = p2.coefMap.begin(); iterator != p2.coefMap.end(); iterator++)
  107.   {
  108.     result.coefMap[iterator->first] -= iterator->second;
  109.   }
  110.   result.eraseZeros();
  111.   if(result.coefMap.empty())
  112.   {
  113.     result.coefMap[0] = 0;
  114.   }
  115.   return result;
  116. }
  117.  
  118. Poly operator* (const Poly& p1, const Poly& p2)
  119. {
  120.   Poly result;
  121.   for(map<int,double>::const_iterator  iterator1 = p1.coefMap.begin(); iterator1 != p1.coefMap.end(); iterator1++)
  122.   {
  123.     for(map<int,double>::const_iterator  iterator2 = p2.coefMap.begin(); iterator2 != p2.coefMap.end(); iterator2++)
  124.     {
  125.       result.coefMap[iterator1->first + iterator2->first] += iterator1->second * iterator2->second;
  126.     }
  127.   }
  128.   result.eraseZeros();
  129.   return result;
  130. }
  131.  
  132. Poly Poly::operator- () const
  133. {
  134.     Poly result;
  135.     map<int,double>::const_iterator  iterator = coefMap.begin();
  136.     while(iterator != coefMap.end())
  137.     {
  138.         result.coefMap[iterator->first] = -(iterator->second);
  139.         iterator++;
  140.     }
  141.     return result;
  142. }
  143.  
  144. double Poly::operator() (double argument) const
  145. {
  146.   double result = 0;
  147.   for(map<int,double>::const_iterator  iterator = coefMap.begin(); iterator != coefMap.end(); iterator++)
  148.   {
  149.     result += pow(argument, iterator->first)*iterator->second;
  150.   }
  151.   return result;
  152. }
  153.  
  154. void Poly::eraseZeros() {
  155.     map<int, double >::iterator iterator = coefMap.begin();
  156.     while(iterator != coefMap.end())
  157.     {
  158.         if(iterator->second == 0){
  159.             iterator = coefMap.erase(iterator);
  160.         }
  161.         else {
  162.             iterator++;
  163.         }
  164.     }
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement