DM_Z DIV_ZZ_Z (DM_Z X1, DM_Z X2) { DM_N t; //Объявляем переменную счётчик DM_N natX1 = TRANS_Z_N (X1); //Объявляем натуральные аналоги целым числам DM_N natX2 = TRANS_Z_N (X2); if (!NZER_N_B(natX2)) //Если делитель равен нулю. выдаем ошибку printf("Делитель равен нулю."); else if (COM_NN_D(natX1, natX2)==2) //Если Первое число больше второго: { do { natX1=SUB_NN_N(natX1, natX2); //Вычитаем из большего числа меньшее t=ADD_1N_N(t); //Наращиваем t } while (COM_NN_D(natX1, natX2)==2); //Цикл пока делимое больше делителя t = TRANS_N_Z(t); //Переводим результат в целое if (POZ_Z_D(X1)==1 && POZ_Z_D(X2)==2 || POZ_Z_D(X1)==2 && POZ_Z_D(X2)==1) t= MUL_Z-_Z(t); //Если исходные числа имеют разные знаки, //Поменять знак у результата return t; } else if (COM_NN_D(natX1, natX2)==1) //Если второе число больше первого: { //Выполняем аналогичные действия. do { natX1=SUB_NN_N(natX1,natX1); t=ADD_1N_N(t); } while (COM_NN_D(natX1, natX1)==2); t = TRANS_N_Z(t); if (POZ_Z_D(X1)==1 && POZ_Z_D(X2)==2 || POZ_Z_D(X1)==2 && POZ_Z_D(X2)==1) t= MUL_Z-_Z(t); return t; } else if (COM_N_D(natX1, natX2)==0) // Если числа равны: { t = TRANS_N_Z(t); // Переводим t в целое t.a[0]=1; //Присваиваем результату значение 1 t.n=1; if ((POZ_Z_D(X2)==2 && POZ_Z_D(X1)==1) || (POZ_Z_D(X2)==1 && POZ_Z_D(X1)==2)) t.b=!t.b; //Если исходные числа имели разные знаки, меняем знак результата. } return t; }
fraction ADD_QQ_Q(fraction a, fraction b) { fraction sum = 0; if (b.denominator == a.denominator)//сравнение знаменателей слагаемых { sum.denominator = b.denominator;//если равны, присвоить сумме знаменатель слагаемых sum.numerator = ADD_ZZ_Z(a.numerator,b.numerator);// return sum; } else{ sum.denominator = LCM_NN_N(a, b); sum.numerator = ADD_ZZ_Z((MUL_ZZ_Z(a.numerator, TRANS_N_Z(sum.denominator / a.denominator))), MUL_ZZ_Z(b.numerator, TRANS_N_Z(sum.denominator / b.denominator))); return sum; } }
/*FAC_P_PQ Описание: Вынесение из многочлена НОК знаменателей коэффициентов и НОД числителей Подключаемые модули: TRANS_N_Z LCM_NN_N GCF_NN_N DIV_ZZ_Z Описание переменных: polinom - исходный многочлен newpolinom - новый многочлен Авторы: Вовк Кирилл Эмомов Голибджон Группа: 4305 */ POLYNOMIAL FAC_P_PQ(POLYNOMIAL polinom) { POLYNOMIAL newpolinom = polinom; NATURAL nok = polinom.factors[0].denominator; NATURAL nod = polinom.factors[0].numerator; for(int i = 1;i < polinom.degree;i++) { nok = LCM_NN_N(nok,polinom.factors[i].denominator); // НОК знаменателей nod = GCF_NN_N(nod,polinom.factors[i].numerator); // НОД числетелей } for(int i = 0;i < polinom.degree;i++) { newpolinom.factors[i].denominator = 1; newpolinom.factors[i].numerator = DIV_ZZ_Z(TRANS_N_Z(nok),polinom.factors[i].denominator) * DIV_ZZ_Z(TRANS_N_Z(polinom.factors[i].numerator,nod); // подсчет коэффициентов нового многочлена } return newpolinom; }