void RED_Q_Q(fraction &RED) { integer NOD; NOD = GCF_NN_N(ABS_Z_N(RED.numenator), RED.denominator); //Ищем НОД числителя и знаменатель RED.numenator = DIV_ZZ_Z(ABS_Z_N(RED.numenator), NOD); //Делим числитель на НОД RED.denominator = DIV_ZZ_Z(RED.denominator, NOD);//Делим знаменатель на НОД }
struct INTEGER SUB_ZZ_Z(struct INTEGER summand1, struct INTEGER summand2) // result = summand1 + summand2 { struct INTEGER result; /* Проверить числа на равенство */ if (COM_NN_D(ABS_Z_N(summand1), ABS_Z_N(summand2)) == 0) { /* Числа равны по модулю */ if (POZ_Z_D(summand1) == POZ_Z_D(summand2)) /* знаки одинаковы */ { result.natural_part = ADD_NN_N(ABS_Z_N(summand1), ABS_Z_N(summand2)); result.sign = summand1.sign; } else { /* знаки разные */ result.natural_part.index = 0; result.natural_part.number = (int*)malloc( sizeof(int) ); result.natural_part.number[0] = 0; result.sign = 0; } } else { /* Числа не равны */ if (POZ_Z_D(summand1) == POZ_Z_D(summand2)) { /* Знаки совпадают */ result.natural_part = ADD_NN_N(ABS_Z_N(summand1), ABS_Z_N(summand2)); result.sign = POZ_Z_D(summand1); } else { /* Знаки разные */ result.natural_part = SUB_NN_N(ABS_Z_N(summand1), ABS_Z_N(summand2)); result.sign = POZ_Z_D(summand1); } } return result; }