Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- struct Polynomial
- {
- int deg;
- double *coeff;
- };
- struct Polynomial* addPolynomials(struct Polynomial* a, struct Polynomial* b) {
- int newDeg = a->deg > b->deg ? a->deg : b->deg;
- struct Polynomial* new = malloc(sizeof(*new));
- new->coeff = malloc((newDeg+1)*sizeof(*new->coeff));
- for (int i = newDeg - abs(a->deg - b->deg); i >= 0; i--) {
- new->coeff[i] = a->coeff[i] + b->coeff[i];
- }
- if (a->deg > b->deg) {
- for (int i = a->deg; i > a->deg - abs(a->deg - b->deg); i--) {
- new->coeff[i] = a->coeff[i];
- }
- } else {
- for (int i = b->deg; i > b->deg - abs(a->deg - b->deg); i--) {
- new->coeff[i] = b->coeff[i];
- }
- }
- //szukanie nowego stopnia wielomianu wyjœciowego
- for (int i = newDeg; i >= 0; i--) {
- if (new->coeff[i] != 0) {
- new->deg = i;
- return new;
- }
- }
- new->deg = 0;
- return new;
- }
- int main()
- {
- struct Polynomial *a=malloc(sizeof(*a));
- struct Polynomial *b=malloc(sizeof(*b));
- struct Polynomial *c=malloc(sizeof(*c));
- int i;
- printf("Podaj stopien wielomianu a \n");
- scanf("%d",&a->deg);
- a->coeff = malloc((a->deg+1)*sizeof(*a->coeff));
- printf("Podaj stopien wielomianu b \n");
- scanf("%d",&b->deg);
- b->coeff = malloc((b->deg+1)*sizeof(*b->coeff));
- //a->coeff = {-1,1,3,0,1};
- for(i=a->deg;i>=0;i--)
- {
- printf("a[%d] = ",i);
- scanf("%lf",&a->coeff[i]);
- }
- //b->coeff = {1,-2,1};
- for(i=b->deg;i>=0;i--)
- {
- printf("b[%d] = ",i);
- scanf("%lf",&b->coeff[i]);
- }
- c = addPolynomials(a,b);
- for(i = c->deg;i >=0;i--)
- if(c->coeff[i] < 0.0)
- printf("-%lf x^%d",-c->coeff[i],i);
- else
- printf("+%lf x^%d",c->coeff[i],i);
- printf("%\n");
- system("PAUSE");
- }
Advertisement
Add Comment
Please, Sign In to add comment