hi,
i wrote this program on polynomials and how to manipulate them. however, i am having a problem with my eval function. it is supposed to evaluate the polynomial at a particular number. however, whenever i call a.eval(2.0), i keep getting polynomial a.
please help me look into this.
#include<iostream>
using namespace std;
//A class to handle a list node
class Lnode{
public:
Lnode();
Lnode(int);
int data;
Lnode *next;//This is the pointer to the next node
};
Lnode::Lnode(){
data = 0;
next = NULL
}
Lnode::Lnode(int d){
data = d;
next = NULL;
}
class LList{
public:
LList();
LList(int);
int getSize void print();
void printP();
void add(LList);
void sub(LList);
double eval(double);
void set(int, int);
private:
void addToF(int);//adding a number to the front of the list.
Lnode *head, *tail;//a list has two pointers, head and tail.
int size;
};
//Constructor Definition
LList::LList(){
size = 0;
head = tail = NULL;//initially, there is nothing. none of them exist.
}
LList::LList(int n){
head=tail=NULL;
size = n;
for(int i=size; i>0; i--)
addToF(0);
}
int LList::getSize(){
return size;//to know the size of the list
}
void LList::addToF(int d){
Lnode *nnode = new Lnode(d);//pointer to the list node
nnode -> next=head
head = nnode;
if(tail==NULL)
tail=head;//head and tail are pointing to the same no.
}
void LList::print(){
Lnode *current = head;
while( current!= NULL)
{
cout<<current->data<<" ";
current = current->next;
}
}
void LList::printP(){
Lnode *current = head;
int degree = size-1;
while( current!= NULL)
{
cout<<current->data<<"x^"<<degree<<" "<<"+";
current = current->next;
degree--;
}
}
void LList::set(int c, int val)
{
int i = size-1;
Lnode *current=head;
while(current != NULL)
{
if(i==(c))
{
current->data = val;
break;
}
else
{
current = current->next;
i--;
}
}
}
void LList::add(LList L1){
Lnode *ptrL;
Lnode *ptrL1;
ptrL = head;
ptrL1 = L1.head;
while(ptrL != NULL && ptrL1 != NULL)
{
ptrL->data = ptrL->data + ptrL1->data;
ptrL = ptrL->next;
ptrL1 = ptrL1->next;
}
}
void LList::sub(LList L){
Lnode *ptrL;
Lnode *ptrL1;
ptrL = head;
ptrL1 = L.head;
while(ptrL != NULL && ptrL1 != NULL)
{
ptrL->data = ptrL->data-ptrL1->data;
ptrL = ptrL->next;
ptrL1 = ptrL1->next;
}
}
double LList::eval(double x){
double sum = 0;
Lnode *temp = head;
while(temp->next != NULL)
{
sum = sum*x + temp->data;
temp = temp->next;
//return sum;
}
return sum;
}
//Driver Main Program
void main(){
LList a(3);
a.set(2, 4);
a.set(1, 5);
a.set(0, 6);
cout<<"First Polynomial is:"<<" ";
a.printP();
cout<<endl;
a.eval(2.0);
a.printP();
LList b(3);
b.set(2, 7);
b.set(1, 8);
b.set(0, 9);
cout<<"Second Polynomial is:"<<" ";
b.printP();
cout<<endl;
cout<<"First + Second is:"<<" ";
b.sub(a);
b.add(a);
b.printP();
cout<<" "<<endl;
LList c(3);
c.set(2,1);
c.set(1,2);
c.set(0,3);
cout<<"Third Polynomial is:"<<" ";
c.printP();
cout<<endl;
cout<<"First - Third is:"<<" ";
a.sub(c);
a.printP();
cout<<endl;
}