DM_P SUB_PP_P(DM_P p1, DM_P p2) { DM_P res; // результ. многочлен unsigned int k = 0; // вспомогательная переменная res.c = NULL; // массив коэф. if (p1.m >= p2.m) // сравнение размеров двух многочленов (первый больше или равен второму) { res.c = new DM_Q[p1.m]; // выделяем память под результ. многочлен res.m = p1.m; // приравниваем степень результ. многочлена первому for (unsigned int i = 0;i < p2.m;i++) { res.c[i] = SUB_QQ_Q(p1.c[i], p2.c[i]); // вычитаем коэф. k = i; } for (unsigned int i = k;i < p1.m;i++) // заполняем массив оставшимися коэф. { res.c[i] = p1.c[i]; } } else // сравнение размеров двух многочленов (второй больше первого) { res.c = new DM_Q[p2.m]; // выделяем память под результ. многочлен res.m = p2.m; // приравниваем степень результ. многочлена второму for (unsigned int i = 0;i < p1.m;i++) { res.c[i] = SUB_QQ_Q(p2.c[i], p1.c[i]); // вычитаем коэф. k = i; } for (unsigned int i = k;i < p2.m;i++) // заполняем массив оставшимися коэф. { res.c[i] = p2.c[i]; } } return res; }
struct POLYNOMIAL MUL_Pxk_P(struct POLYNOMIAL polynom, int k) { struct POLYNOMIAL result; result.degree = polynom.degree + k; result.factors = (struct POLYNOMIAL*)malloc( (result.degree + 1) * sizeof(struct POLYNOMIAL) ); int i; for (i = result.degree; i >= k; --i) result.factors[i] = polynom.factors[i - k]; for (i = 0; i < k; ++i) { polynom.factors[i].denominator = SUB_QQ_Q (polynom.factors[i].denominator, polynom.factors[i].denominator); } return polynom; }