コード例 #1
0
ファイル: DIV_ZZ_Z.cpp プロジェクト: fshpsmgc/dscrtk
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;
}
コード例 #2
0
ファイル: ADD_QQ_Q.cpp プロジェクト: NeeChoo/colloquium_cpp
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;
	}
}
コード例 #3
0
ファイル: FAC_P_PQ.c プロジェクト: greg-kargin/DM43
/*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;
}