C program for multiplication of two polynomials required..

Please anyone help me to get a proper C program in UNIX of multiplicat

Page 1 of 1

2 Replies - 22686 Views - Last Post: 18 March 2008 - 05:15 AM Rate Topic: ***** 1 Votes

#4 Neerndg123  Icon User is offline

  • New D.I.C Head

Reputation: 2
  • View blog
  • Posts: 1
  • Joined: 18-March 08

Re: C program for multiplication of two polynomials required..

Posted 18 March 2008 - 04:53 AM

#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(:) */
}

/* 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;
}
}
Was This Post Helpful? 1

#5 red_4900  Icon User is offline

  • Code T(h)inkers
  • member icon

Reputation: 21
  • View blog
  • Posts: 1,120
  • Joined: 22-February 08

Re: C program for multiplication of two polynomials required..

Posted 18 March 2008 - 05:14 AM

welcome to dreamincode.

please :code: .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. :)

This post has been edited by red_4900: 18 March 2008 - 05:31 AM

Was This Post Helpful? 0
  • +
  • -

#6 Amadeus  Icon User is offline

  • g+ + -o drink whiskey.cpp
  • member icon

Reputation: 248
  • View blog
  • Posts: 13,506
  • Joined: 12-July 02

Re: C program for multiplication of two polynomials required..

Posted 18 March 2008 - 05:15 AM

Can you describe the problem you are encountering?
Was This Post Helpful? 0
  • +
  • -

Page 1 of 1