Guest User

addPolynomials

a guest
Jan 11th, 2021
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.99 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. struct Polynomial
  5. {
  6.    int deg;
  7.    double *coeff;    
  8. };
  9.  
  10. struct Polynomial* addPolynomials(struct Polynomial* a, struct Polynomial* b) {
  11.     int newDeg = a->deg > b->deg ? a->deg : b->deg;
  12.     struct Polynomial* new = malloc(sizeof(*new));
  13.     new->coeff = malloc((newDeg+1)*sizeof(*new->coeff));
  14.    
  15.     for (int i = newDeg - abs(a->deg - b->deg); i >= 0; i--) {
  16.          new->coeff[i] = a->coeff[i] + b->coeff[i];
  17.     }
  18.  
  19.     if (a->deg > b->deg) {
  20.         for (int i = a->deg; i > a->deg - abs(a->deg - b->deg); i--) {
  21.             new->coeff[i] = a->coeff[i];
  22.         }
  23.     } else {
  24.         for (int i = b->deg; i > b->deg - abs(a->deg - b->deg); i--) {
  25.             new->coeff[i] = b->coeff[i];
  26.         }
  27.     }
  28.  
  29.     //szukanie nowego stopnia wielomianu wyjĹ“ciowego
  30.     for (int i = newDeg; i >= 0; i--) {
  31.         if (new->coeff[i] != 0) {
  32.               new->deg = i;
  33.               return new;
  34.         }
  35. }
  36.     new->deg = 0;
  37.     return new;
  38. }
  39.  
  40. int main()
  41. {
  42.     struct Polynomial *a=malloc(sizeof(*a));
  43.     struct Polynomial *b=malloc(sizeof(*b));
  44.     struct Polynomial *c=malloc(sizeof(*c));
  45.     int i;
  46.     printf("Podaj stopien wielomianu a \n");
  47.     scanf("%d",&a->deg);
  48.     a->coeff = malloc((a->deg+1)*sizeof(*a->coeff));
  49.     printf("Podaj stopien wielomianu b \n");
  50.     scanf("%d",&b->deg);
  51.     b->coeff = malloc((b->deg+1)*sizeof(*b->coeff));
  52.     //a->coeff = {-1,1,3,0,1};
  53.     for(i=a->deg;i>=0;i--)
  54.     {
  55.         printf("a[%d] = ",i);
  56.         scanf("%lf",&a->coeff[i]);                  
  57.     }                      
  58.     //b->coeff = {1,-2,1};
  59.     for(i=b->deg;i>=0;i--)
  60.     {
  61.         printf("b[%d] = ",i);
  62.         scanf("%lf",&b->coeff[i]);                  
  63.     }
  64.     c = addPolynomials(a,b);
  65.     for(i = c->deg;i >=0;i--)
  66.         if(c->coeff[i] < 0.0)  
  67.            printf("-%lf x^%d",-c->coeff[i],i);
  68.         else  
  69.            printf("+%lf x^%d",c->coeff[i],i);
  70.     printf("%\n");
  71.     system("PAUSE");
  72. }
  73.  
Advertisement
Add Comment
Please, Sign In to add comment