#include
struct node
{
int power;
float coeff;
struct node *next;
}*head,*p,*q;
struct node *create();
void display(struct node *head);
struct node *add(struct node *head1,struct node *head2);
struct node *mult(struct node *head1,struct node *head2);
void main()
{
struct node *head1, *head2, *head3;
int ch;
clrscr();
do
{
printf("\n\n\nWhat u have to do?\n1.Create & Display only");
printf("\n2.Add\n3.Multiply\n4.Exit\nEnter:");
scanf("%d", &ch);
switch(ch)
{
case 1:
create();
display(head);
break;
case 2:
printf("\n\n1st:");
head1 = create();
display(head1);
printf("\n\n2nd");
head2 = create();
display(head2);
printf("\n\nAddition:");
head3 = add(head1, head2);
display(head3);
break;
case 3:
printf("\n\n1st:");
head1 = create();
display(head1);
printf("\n\n2nd");
head2 = create();
display(head2);
printf("\n\nMultiplication:");
head3 = mult(head1, head2);
display(head3);
break;
case 4:
exit();
break;
}
}while(ch != 4);
getch();
}
struct node *insert(struct node *head,int power, float coeff)
{
p = (struct node *)malloc(sizeof(struct node));
p->power = power;
p->coeff = coeff;
p->next = NULL;
if(head == NULL)
return(p);
else
{
if(power
{
p->next = head;
return(p);
}
else
{
q = head;
while(q->next != NULL && power>=q->next->power)
q = q->next;
p->next = q->next;
q->next = p;
if(q->power == p->power)
{
q->coeff = q->coeff + p->coeff;
q->next = p->next;
free(p);
}
return(head);
}
}
}
struct node *create()
{
int n, power, i;
float coeff;
head = NULL;
printf("\nEnter no. of terms:");
scanf("%d",&n);
printf("\nEnter polynomial:");
printf("\nEnter terms as tuple of (power, coefficient):\n");
for(i=0;i
printf("\nTerm:%d\n", i+1);
scanf("%d%f",&power, &coeff);
head = insert(head, power, coeff);
}
return(head);
}
void display(struct node *head)
{
if(head == NULL)
printf("\nError!!!!");
while(head!=NULL)
{
printf("%6.2fX^%d",head->coeff,head->power);
if(head->next!=NULL)
printf(" +");
else
printf(" = 0");
head = head->next;
}
}
struct node *add(struct node *head1,struct node *head2)
{
int power;
float coeff;
head = NULL;
while(head1 != NULL && head2 != NULL)
{
if(head1->power <>power)
{
head = insert(head, head1->power, head1->coeff);
head1 = head1->next;
continue;
}
else if(head2->power <>power)
{
head = insert(head, head2->power, head2->coeff);
head2 = head2->next;
continue;
}
head = insert(head, head1->power, head1->coeff+head2->coeff);
head1 = head1->next;
head2 = head2->next;
}
while(head1!=NULL)
{
head = insert(head, head1->power, head1->coeff);
head1 = head1->next;
}
while(head2!=NULL)
{
head = insert(head, head2->power, head2->coeff);
head2 = head2->next;
}
return(head);
}
struct node *mult(struct node *head1,struct node *head2)
{
head = NULL;
while(head2 != NULL)
{
for(p=head1; p!=NULL; p=p->next)
head = insert(head, p->power+head2->power, p->coeff+head2->coeff);
head2 = head2->next;
}
return(head);
}
No comments:
Post a Comment