Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<math.h>
- #define MAX 20
- #define COMPARE(x,y) (((x)==(y))?0:((x)>(y))?1:-1)
- typedef struct
- {
- float coeff;
- int exp;
- }POLY;
- POLY terms[MAX];
- int startA=0, finishA, startB, finishB, startD, finishD, avail=0;
- void input_poly(int f, int *p)
- {
- int i;
- printf("Enter the number of terms for polynomial: ");
- scanf("%d",p);
- (*p)--;
- for(i=f;i<=(*p+f);i++)
- {
- printf("Enter Coefficient and Exponent: ");
- scanf("%f%d",&terms[i].coeff,&terms[i].exp);
- }
- printf("\n\n");
- //p=NULL;
- }
- void disp_poly(int f,int l)
- {
- int i;
- for(i=f;i<=l;i++)
- {
- if(terms[i].exp)
- printf("+%.0fX^%d",terms[i].coeff,terms[i].exp);
- else
- printf("+%.0f",terms[i].coeff);
- }
- printf("\n\n");
- }
- void attach(float c, int e)
- {
- terms[avail].coeff = c;
- terms[avail].exp = e;
- avail++;
- }
- void poly_add(int startA, int startB, int finishA, int finishB, int *startD, int *finishD)
- {
- float c;
- *startD = avail;
- while(startA <= finishA && startB <= finishB )
- {
- switch(COMPARE(terms[startA].exp,terms[startB].exp))
- {
- case -1: attach( terms[startB].coeff , terms[startB].exp );
- startB++;
- break;
- case 0: c=terms[startA].coeff+terms[startB].coeff;
- if(c!=0)
- attach( c , terms[startA].exp );
- startA++;
- startB++;
- break;
- case 1: attach( terms[startA].coeff , terms[startA].exp );
- startA++;
- break;
- }
- }
- *finishD = avail-1;
- }
- void poly_eval(float x,int n)
- {
- int i;
- float val=0;
- for(i=0;i<=n;i++)
- val += terms[i].coeff * pow(x , terms[i].exp);
- printf("Value= %.0f\n",val);
- }
- void main()
- {
- int c;
- float x;
- printf("Menu:\n\t1. Addition of two polynomials\n\t2. Evaluation of a polynomial\nEnter your choice: ");
- scanf("%d",&c);
- printf("\n\n");
- switch(c)
- {
- case 1 :
- input_poly(startA,&finishA);
- startB=finishA+1;
- input_poly(startB,&finishB);
- finishB+=startB;
- avail = finishB+1;
- poly_add(startA,startB,finishA,finishB,&startD,&finishD);
- printf("First polynomial is: "); disp_poly(startA,finishA);
- printf("Second polynomial is: "); disp_poly(startB,finishB);
- printf("Addition of two polynomials is:\n");
- disp_poly(startD,finishD);
- break;
- case 2 : input_poly(startA,&finishA);
- disp_poly(startA,finishA);
- printf("Enter the value of X: ");
- scanf("%f",&x);
- poly_eval(x,finishA);
- break;
- default : printf("Invalid case\n");
- }
- }
Add Comment
Please, Sign In to add comment