درود مهمان گرامی! ثبت نام

ساخت بازی

امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
سوال در رابطه با کد سی پلاس پلاس درباره ی چندجمله ای ها
#1
Question 
سلام

من این کد درباره ی چندجمله ای هارو نوشتم و همه چیز خوه تا وقتی که میخوام ضربشون کنم.
برای امتحان اپراتور ضربم یه کد برای چاپ نوشتم. مشکل باید یا از
َAddOneTerm - Print - Opertor*
باشه
کد رو برای جمع و تفریق امتحان کردم کاملا درسته

کد:
#include <iostream>
#include <fstream>
#include <string>
#include <list>
#include <vector>
using namespace std;


typedef struct Node
{
    double  cof;      // coefficient
    int     deg;      // degree
} Node;

class CPolynomial
{
public:
    CPolynomial();
    CPolynomial(const string& file);
    ~CPolynomial();
    CPolynomial operator*(const CPolynomial &right);
    CPolynomial& operator=(const CPolynomial &right);
    void Print() const;

private:
    void ReadFromFile(string file);
    void AddOneTerm(Node term);

private:
    list<Node> m_Polynomial;
};



int main()
{
    CPolynomial p1("P3.txt");
    CPolynomial p2("P4.txt");
    CPolynomial p3;
    p1.Print();
    p2.Print();

    p3 = p1*p2;
    p3.Print();

    system("pause");
    return 0;
}

CPolynomial::CPolynomial()
{
    Node term;
    term.cof = 0;
    term.deg = 0;
    AddOneTerm(term);
}

CPolynomial::~CPolynomial()
{
    m_Polynomial.clear();
}

CPolynomial::CPolynomial(const string& file)
{
    ReadFromFile(file);
}

CPolynomial CPolynomial:: operator*(const CPolynomial &right)
{
    CPolynomial result;

    result.m_Polynomial = m_Polynomial;

    Node term;
    Node termR;
    Node temp;
    for (list<Node>::const_iterator it = m_Polynomial.begin(); it != m_Polynomial.end(); ++it)
    {
        for (list<Node>::const_iterator itR = right.m_Polynomial.begin(); itR != right.m_Polynomial.end(); ++itR)
        {
            term = *it;
            termR = *itR;

            temp.cof = termR.cof* term.cof;
            temp.deg = termR.deg + term.deg;

            cout << temp.cof << "x^" << temp.deg << endl;

            result.AddOneTerm(temp);
        }
    }
    return result;
}

CPolynomial& CPolynomial:: operator=(const CPolynomial &right)
{

    this->m_Polynomial = right.m_Polynomial;
    return *this;
}

void CPolynomial::Print() const
{
    list<Node>::const_iterator it;

    for (it = m_Polynomial.begin(); it != m_Polynomial.end(); it++)
    {

        if (it->cof == 0)
        {
            ;
        }
        else
        {
            if (it->cof > 0)
                cout << "+";
            cout << it->cof;
            if (it->deg != 0)
                cout << "x^" << it->deg;
        }
    }
    cout << endl;
}

void CPolynomial::ReadFromFile(string file)
{
    Node term;
    fstream MyFile;
    string p;
    int num;

    MyFile.open(file);

    if (!MyFile.is_open())
    {
        cerr << "Unable to open input file" << endl;
        exit(EXIT_FAILURE);
    }
    else
    {
        MyFile >> p >> num;

        std::list<Node>::iterator it = m_Polynomial.begin();

        for (int i = 0; i < num; i++)
        {
            MyFile >> term.deg >> term.cof;

            m_Polynomial.push_back(term);
        }
        MyFile.close();
    }

}

void CPolynomial::AddOneTerm(Node term)
{
    std::list<Node>::iterator it;
    for (it = m_Polynomial.begin(); it != m_Polynomial.end();)
    {
        if (term.deg < it->deg)
        {
            ++it;
            continue;
        }
        else if (term.deg == it->deg) // if degree is same, coefficient is added directly
        {
            it->cof += term.cof;
            return;
        }
        else // if the added degree is big than current term of m_polynomial,
            // justify the relationship of degree with the next term
            // if smaller than next, then 'insert'
            // if equal to the next term, then add the cof to next term
        {
            std::list<Node>::iterator next_it;
            next_it = ++it;
            if (next_it != m_Polynomial.end())
            {
                if (term.deg < it->deg)
                {
                    m_Polynomial.insert(next_it, term);
                    return;
                }
                else
                {
                    it->cof += term.cof;
                    return;
                }
            }
            else
            {
                m_Polynomial.push_back(term);
            }
            return;
        }
    }

}


خروجی

2x^1-3x^4 (P1)
4x^1-3x^4 (P2)
8x^2
-6x^5
-12x^5
9x^8
2x^1-1x^2-3x^4 (P1*P2)
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  سوال درباره ویژوال C++ mzr 5 850 27/4/1394، 10:51 عصر
آخرین ارسال: sajjad3011
  توضیح در مورد سی پلاس پلاس rafael957490 5 2,615 30/11/1391، 11:30 عصر
آخرین ارسال: devil_man
  سوال درباره ی Borland C++ Builder 6 axle 17 3,828 15/4/1391، 03:54 عصر
آخرین ارسال: axle



کاربرانِ درحال بازدید از این موضوع: 1 مهمان