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

آموزش ساخت بازی با C# آموزش پروژه محور یونیتی Unity آموزش ساخت بازی حدس تصویر
آموزش مدل سازی در Maya آموزش یونیتی Unity- ساخت منو آموزش گنجینه برنامه نویسی اندروید
آموزش مدل سازی با 3Ds Max آموزش متحرک سازی با Unity آموزش گرافیک کامپیوتری با OpenGL
آموزش متحرک سازی در 3Ds Max مجموعه آموزش های ساخت بازی آموزش ساخت بازی در ویژوال بیسیک
● آموزش های رایگان ● تبلیغات دیجیتال هوشمند ● استخدام در فرادرس

امتیاز موضوع:
  • 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 1,236 27/4/1394، 10:51 عصر
آخرین ارسال: sajjad3011
  توضیح در مورد سی پلاس پلاس rafael957490 5 3,462 30/11/1391، 11:30 عصر
آخرین ارسال: devil_man
  سوال درباره ی Borland C++ Builder 6 axle 17 4,771 15/4/1391، 03:54 عصر
آخرین ارسال: axle



کاربرانِ درحال بازدید از این موضوع: 1 مهمان
آموزش ساخت بازی با C# آموزش پروژه محور یونیتی Unity آموزش ساخت بازی حدس تصویر
آموزش مدل سازی در Maya آموزش یونیتی Unity- ساخت منو آموزش گنجینه برنامه نویسی اندروید
آموزش مدل سازی با 3Ds Max آموزش متحرک سازی با Unity آموزش گرافیک کامپیوتری با OpenGL
آموزش متحرک سازی در 3Ds Max مجموعه آموزش های ساخت بازی آموزش ساخت بازی در ویژوال بیسیک
● آموزش های رایگان ● تبلیغات دیجیتال هوشمند ● استخدام در فرادرس