Example #1
0
def polynom(string):
    tmp = string.replace(' ', '').replace('-', '|-').replace('+', '|+')
    tmp = tmp.split('|')
    result = [0, [common.rat_to_Q(0, 1)]]
    for p in tmp:
        if not p:
            continue
        if 'x' not in p:
            coef = rational(p)
            result[1][0] = ADD_QQ_Q(coef, result[1][0])
        else:
            coef, deg = p.split('x')
            if deg:
                deg = int(deg)
            else:
                deg = 1

            if coef:
                coef = rational(coef)
            else:
                coef = rational('1')

            while result[0] < deg:
                result[0] += 1
                result[1].append(common.rat_to_Q(0, 1))
            result[1][deg] = ADD_QQ_Q(coef, result[1][deg])

    return result
Example #2
0
def DIV_PP_P(polynom1, polynom2):
    """
    P-9
    Частное от деления многочлена на многочлен при делении с остатком
    Хафизов Ильназ, 7305
    """
    # Степень результата = разность степеней исходных многочленов
    result_deg = polynom1[0] - polynom2[0]
    if result_deg < 0:
        result = [0, [common.rat_to_Q(0, 1)]]
    else:
        result = [result_deg, []]
        tmp = common.copy_P(polynom1)

        for i in range(result_deg + 1):
            # Делим i-ый коэффициент остатка на старший коэффициент делителя
            # Получаем i-ый коэффициент частного
            if tmp[0] < polynom1[0] - i:
                result[1].insert(0, common.rat_to_Q(0, 1))
                continue

            coef = DIV_QQ_Q(tmp[1][polynom1[0] - i], polynom2[1][-1])
            result[1].insert(0, coef)

            # Домножаем делитель на 10^(разность степеней - i)
            sub = MUL_Pxk_P(polynom2, result_deg - i)
            # и вычитаем из остатка домножив на коэффициент
            tmp = SUB_PP_P(tmp, MUL_PQ_P(sub, coef))

    return result
Example #3
0
def rational(string):
    if '/' in string:
        return common.rat_to_Q(
            int(string.split('/')[0]),
            int(string.split('/')[1]),
        )
    if string == '-':
        return common.rat_to_Q(-1, 1)
    if string == '+':
        return common.rat_to_Q(1, 1)
    return common.rat_to_Q(int(string), 1)
Example #4
0
def SUB_PP_P(polynom1, polynom2):
    """
    P-2
    Вычитание многочленов
    Мартыненко Александр, 7305
    """
    # Копируем первый многочлен
    result = copy_P(polynom1)
    # Увеличиваем степень, если необходимо, добавляя
    # нулевые коэффициенты
    while result[0] < polynom2[0]:
        result[0] += 1
        result[1].append(rat_to_Q(0, 1))

    # Вычитаем коэффициенты
    i = 0
    while i < polynom2[0] + 1:
        result[1][i] = SUB_QQ_Q(result[1][i], polynom2[1][i])
        i += 1

    # Пока старший коэффициент равен нулю,
    # понижаем степень и удаляем коэффициент
    down_p(result)

    # Возвращаем полученный многочлен
    return result
Example #5
0
def GCF_PP_P(polynom1, polynom2):
    """
    P-11
    НОД многочленов
    Рэшин Даниил, 7305
    """
    one = polynom1
    two = polynom2

    # Алгоритм Евклида
    while DEG_P_N(two) > 0 or POZ_Z_D(two[1][0][0]) != 0:
        two, one = MOD_PP_P(one, two), two

    # Делим на старший коэффициент для получения единицы
    first = common.copy_Q(one[1][-1])
    first = DIV_QQ_Q(common.rat_to_Q(1, 1), first)
    return MUL_PQ_P(one, first)