Welcome to Dream.In.Code
Become a C++ Expert!

Join 136,914 C++ Programmers for FREE! Get instant access to thousands of C++ experts, tutorials, code snippets, and more! There are 1,743 people online right now. Registration is fast and FREE... Join Now!




C program for multiplication of two polynomials required..

 
Reply to this topicStart new topic

C program for multiplication of two polynomials required.., Please anyone help me to get a proper C program in UNIX of multiplicat

Rating  5
Neerndg123
18 Mar, 2008 - 03:53 AM
Post #1

New D.I.C Head
*

Joined: 18 Mar, 2008
Posts: 1

#include<stdio.h>
#include<malloc.h>
struct polynode
{
float coeff;
int exp;
struct polynode *link;
};

void poly_append(struct polynode **,float,int);
void display_poly(struct polynode *);
void poly_multiply(struct polynode *, struct polynode *, struct polynode **);
void padd(float, int, struct polynode **);

main()
{
struct polynode *first, *second, *mult;
int i,coeff,exp,high;

first = second = mult = NULL;

printf("Enter the highest power of polynomial 1: \n");
scanf("%d",&high);

for(i=high;i>0;i--)
{
printf("Enter value for coeff for X^%d : ",i);
scanf("%d",&coeff);

poly_append(&first, coeff,i);
}

printf("\nEnter the highest power of polynomial 2: \n");
scanf("%d",&high);

for(i=high;i>0;i--)
{
printf("Enter value for coeff for X^%d : ",i);
scanf("%d",&coeff);



poly_append(&second, coeff,i);
}

printf("\n\n");
display_poly(&first);
printf("\n");
display_poly(second);

printf("\n");
for(i=1;i<=79;i++)
printf("-");

poly_multiply(first, second, &mult);

printf("\n");
display_poly(mult);

}

/* adds a term to a polynomial */
poly_append(struct polynode **q, float x, int y)
{
struct polynode *temp;
temp = *q;

/* create a new node if the list is empty */
if(*q == NULL)
{
*q = malloc(sizeof(struct polynode));
temp = *q;
}
else
{
/* traverse the entire linked list */
while(temp -> link != NULL)
temp = temp -> link;

/* create new nodes at intermediate stages */

temp -> link = malloc ( sizeof ( struct polynode ) ) ;
temp = temp -> link;
}


/* assign coefficient and exponent */
temp -> coeff = x;
temp -> exp = y;
temp -> link = NULL;
}

/* displays the contents of linked list representing a polynomial */
display_poly(struct polynode *q)
{
/* traverse till the end of the linked list */
while(q != NULL)
{
printf("%.1f x^%d : ", q -> coeff, q -> exp);
q = q -> link;
}


printf("\b\b\b"); /* erases the last colon(smile.gif */
}

/* multiplies the two polynomials */
poly_multiply(struct polynode *x, struct polynode *y, struct polynode **m)

{
struct polynode *y1;
float coeff1, exp1;

y1 = y; /* point to the starting of the second linked list */

if(x == NULL && y == NULL)
return;

/* if one of the list is empty */
if(x == NULL)
*m = y;
else
{
if(y == NULL)
*m = x;
else /* if both linked lists exist */
{
/* for each term of the first list */
while(x != NULL)
{

/* multiply each term of the second linked list with a
term of the first linked list */
while(y != NULL)
{
coeff1 = x -> coeff * y -> coeff;
exp1 = x -> exp + y -> exp;
y = y -> link;

/* add the new term to the resultant polynomial */
padd(coeff1, exp1, m);
}


y = y1; /* reposition the pointer to the starting of
the second linked list */

x = x -> link; /* go to the next node */
}
}
}
}

/* adds a term to the polynomial in the descending order of the exponent */
padd(float c, int e, struct polynode **s)
{
struct polynode *r, *temp = *s;

/* if list is empty or if the node is to be inserted before the first node */
if(*s == NULL || e > ( *s ) -> exp)
{
*s = r = malloc(sizeof(struct polynode));
( *s ) -> coeff = c;

( *s ) -> exp = e;
( *s ) -> link = temp;
}
else
{
/* traverse the entire linked list to search the position to insert a new node */
while(temp != NULL)
{
if ( temp -> exp == e )
{
temp -> coeff += c;

return;
}

if ( temp -> exp > e && ( temp -> link -> exp < e || temp -> link == NULL ) )
{
r = malloc ( sizeof ( struct polynode ) );
r -> coeff = c;
r -> exp = e;
r -> link = temp -> link;
temp -> link = r;
return;
}

temp = temp -> link; /* go to next node */
}

r -> link = NULL;
temp -> link = r;
}
}



User is offlineProfile CardPM
+Quote Post

red_4900
RE: C Program For Multiplication Of Two Polynomials Required..
18 Mar, 2008 - 04:14 AM
Post #2

Code T(h)inkers
****

Joined: 22 Feb, 2008
Posts: 827



Thanked: 11 times
My Contributions
welcome to dreamincode.

please code.gif .its stated in the background when you type your post. and also please state clearly what problem u have with ur code. help others to help u. smile.gif

This post has been edited by red_4900: 18 Mar, 2008 - 04:31 AM
User is offlineProfile CardPM
+Quote Post

Amadeus
RE: C Program For Multiplication Of Two Polynomials Required..
18 Mar, 2008 - 04:15 AM
Post #3

g++ -o drink whiskey.cpp
Group Icon

Joined: 12 Jul, 2002
Posts: 12,228



Thanked: 40 times
Dream Kudos: 25
My Contributions
Can you describe the problem you are encountering?
User is offlineProfile CardPM
+Quote Post

Reply to this topicStart new topic
Time is now: 12/3/08 10:04PM

Live C++ Help!

C++ Tutorials

Reference Sheets

C++ Snippets

DIC Chatroom

Bye Bye Ads

Monthly Drawing

Thumb Drive

Top Contributors

Top 10 Kudos This Month