Member 13455005 Ответов: 1

Добавление двух полиномов с помощью связанного списка


Я попытался разработать программу, которая берет два полинома от пользователя, а затем добавляет их, и остальные записи записываются точно так же, как у меня есть трудности с тем, как это сделать.
Например
если я дам ввод
2x^3+8x^4+5x^6
и
3x^4+4x^6
тогда выход должен быть
2x^3+11x^4+9x^6
но все что я получаю это ошибка

Что я уже пробовал:

#include<iostream>
using namespace std;
class node{
	private:
		int coeff;
		int exp;
		node *next;
		public:
			void set(int coeff,int exp)
			{
				this->coeff=coeff;
				this->exp=exp;
			}
			node *getnext()
			{
				return next;
			}
			void setnext(node *next)
			{
				this->next=next;
			}
			int coef()
			{
				return coeff;
			}
			int e()
			{
				return exp;
			}
};
class list{
	private:
		node *head;
		node *current;
		int size;
		public:
		list()
		{
			head=new node();
			head->setnext(NULL);
			current=NULL;
			size=0;
		}
		void create()
		{
			int co,ex;
			node *newnode=new node();
			cout<<"Enter coefficient :";
			cin>>co;
			cout<<"Enter exponent :";
			cin>>ex;
			newnode->set(co,ex);
			if(current!=NULL)
			{
				newnode->setnext(current->getnext());
				current->setnext(newnode);
				current=newnode;
			}
			else
			{
				newnode->setnext(NULL);
				head->setnext(newnode);
				current=newnode;
			}
			size++;
		}
		int coef()
		{
			return current->coef();
		}
		int e()
		{
			return current->e();
		}
		node *cur()
		{
			return current;
		}
		int length()
		{
			return size;
		}
		void start()
		{
			current=head->getnext();
		}
		void next()
		{
			current=current->getnext();
		}
		void display()
		{
			if(current!=NULL)
			{
			cout<<current->coef()<<"x^"<<current->e();
		    }
		}
		void add(int co,int e)
		{
			node *newnode=new node();
			newnode->set(co,e);
			if(current!=NULL)
			{
				newnode->setnext(current->getnext());
				current->setnext(newnode);
				current=newnode;
			}
			else
			{
				newnode->setnext(NULL);
				head->setnext(newnode);
				current=newnode;
			}
			size++;
		}
		void cc(node *current)
		{
			this->current=current;
		}
};
int main()
{
	list l1,l2,l3;
    int n1,n2;
    cout<<"Please enter elements in ordered form "<<endl;
    cout<<"Enter number of terms you want to enter in first polynomial :";
    cin>>n1;
    for(int i=1;i<=n1;i++)
    {
    	l1.create();
    }
    cout<<"Enter number of terms you want to enter in second polynomial :";
    cin>>n2;
    for(int j=1;j<=n2;j++)
    {
    	l2.create();
    }
    n1=l1.length();
    n2=l2.length();
    l1.start();
    l2.start();
    for(int i=1;i<=n1;i++)
    {
    	l1.display();
    	if(i<n1)
    	{
    		cout<<"+";
    	}
    	l1.next();
    }
    cout<<endl;
    for(int i=1;i<=n2;i++)
    {
    	l2.display();
    	if(i<n2)
    	{
    		cout<<"+";
    	}
    	l2.next();
    }
    int n,sum;
    if(n1>n2)
    {
    	n=n1;
    }
    else
    {
    	n=n2;
    }
    node *temp1;
    node *temp2;
    l1.start();
    l2.start();
    for(int i=1;i<=n;i++)
    {
    	temp1=l1.cur();
    	temp2=l2.cur();
    	for(int i=1;i<=n1;i++)
    	{
    		for(int i=1;i<=n2;i++)
    		{
    			if(l1.e()==l2.e())
    			{
    				sum=l1.coef()+l2.coef();
    				l3.add(sum,l1.e());
    			}
    			l2.next();
    		}
    		l1.next();
    	}
    	l1.cc(temp1);
    	l2.cc(temp2);
    	if(l1.e()>l2.e())
    	{
    		l3.add(l1.coef(),l1.e());
    	}
    	else
    	{
    		l3.add(l2.coef(),l2.e());
    	}
    }
    cout<<endl;
    int n3=l3.length();
    l3.start();
    for(int i=1;i<=n3;i++)
    {
    	l3.display();
    	if(i<n3)
    	{
    		cout<<"+";
    	}
    	l3.next();
    }
	return 0;
}

Richard MacCutchan

- но все, что я получаю, - это ошибка."
Какая ошибка и где она происходит?

1 Ответов

Рейтинг:
2

Patrice T

Цитата:
но все что я получаю это ошибка

Какое сообщение об ошибке? с каким входом?

Я вижу большой поток в вашем коде:
Ваш код не применяет порядок коэффициентов в списке хранения. Применяя порядок коэффициентов при вводе в список хранения, он упростит последующее использование.
Если вы знаете, что коэффициенты находятся в порядке, то сложить 2 полинома на самом деле не так уж сложно.
Возьмите лист бумаги и карандаш. обратите внимание на коэффициенты, хранящиеся в списках,и добавьте 2 списка в третий. Как вы поступили ?
Это ваш алгоритм; ваш код должен будет сделать то же самое.