예제 #1
0
def DIV_ZZ_Z(number1, number2):
    """
    Z-9
    Частное от деления большего целого числа на меньшее
    или равное натуральное с остатком (делитель отличен от нуля)
    Власенко Владислав, 7305
    """
    # Определяем модули чисел
    m1 = ABS_Z_N(number1)
    m2 = ABS_Z_N(number2)
    # Частное от деления модулей
    m = DIV_NN_N(m1, m2)
    # Остаток от деления
    mod = MOD_NN_N(m1, m2)

    # Знаки исходных чисел
    p1 = POZ_Z_D(number1)
    p2 = POZ_Z_D(number2)

    # Если знаки одинаковые или одно из чисел ноль - результат положительный
    if p1 == p2 or p1 == 0 or p2 == 0:
        p = 0
    else:
        p = 1

    # Если делимое отрицательное и есть ненулевой остаток -
    # прибавляем к частному единицу
    if NZER_N_B(mod) and p1 == 1:
        m = ADD_1N_N(m)

    return [p, m[0], m[1]]
예제 #2
0
def SUB_ZZ_Z(number1, number2):
    """
    Z-7
    Вычитание целых чисел
    Колосюк Владислав, 7305
    """
    # Модули чисел
    m1 = ABS_Z_N(number1)
    m2 = ABS_Z_N(number2)

    # Знаки чисел
    p1 = POZ_Z_D(number1)
    p2 = POZ_Z_D(number2)

    # Если вычитаемое ноль, возвращаем копию уменьшаемое
    if p2 == 0:
        result = common.copy_Z(number1)
    # Если уменьщаемое ноль, результат - вычитаемое, умноженное на -1
    elif p1 == 0:
        result = MUL_ZM_Z(number2)
    # Случай разных знаков
    elif p1 == 2 and p2 == 1 or p1 == 1 and p2 == 2:
        # Модулем числа будет являться сумма модулей, а знаком - знак первого
        # числа
        m = ADD_NN_N(m1, m2)
        p = number1[0]
        result = [p, m[0], m[1]]
    # Одинаковые знаки
    else:
        # Вычитаем из большего модуля меньший. Если первое число имеет больший
        # модуль, то результат будет иметь тот же знак, что и оно.
        if COM_NN_D(m1, m2) == 2:
            m = SUB_NN_N(m1, m2)
            p = number1[0]
        # Иначе - знак меняется
        else:
            m = SUB_NN_N(m2, m1)
            p = 0 if number1[0] == 1 else 1
        result = [p, m[0], m[1]]

    return result
예제 #3
0
파일: INT_Q_B.py 프로젝트: mshutenkov/dmath
def INT_Q_B(number):
    """
    Q-2
    Проверка на целое, если число является целым, то True, иначе False
    Власенко Владислав, 7305
    """
    # НОД числителя и знаменателя
    gcf = GCF_NN_N(number[1], ABS_Z_N(number[0]))
    # Если НОД равен знаменателю - число целое
    result = COM_NN_D(gcf, number[1]) == 0

    return result
예제 #4
0
def MUL_ZZ_Z(number1, number2):
    """
    Z-8
    Умножение целых чисел
    Царёв Александр, 7305
    """
    # Умножаем модули
    m1 = ABS_Z_N(number1)
    m2 = ABS_Z_N(number2)
    m = MUL_NN_N(m1, m2)

    # Если знаки одинаковые или одно из чисел ноль, то результат
    # неотрицательный
    p1 = POZ_Z_D(number1)
    p2 = POZ_Z_D(number2)
    if p1 == p2 or p1 == 0 or p2 == 0:
        p = 0
    else:
        p = 1

    return [p, m[0], m[1]]
예제 #5
0
파일: FAC_P_Q.py 프로젝트: mshutenkov/dmath
def FAC_P_Q(polynom):
    """
    P-7
    Вынесение из многочлена НОК знаменателей коэффициентов
    и НОД числителей
    Ким Артём, 7305
    """

    # Берем модуль числителя и знаменатель старшего коэффициента
    n = ABS_Z_N(polynom[1][-1][0])
    m = polynom[1][-1][1]

    # Для всех остальных ненулевых коэффициентов считаем НОД и НОК
    # с n и m соответственно и сохраняем их обратно в n и m
    for i in range(polynom[0]):
        if NZER_N_B(ABS_Z_N(polynom[1][i][0])):
            n = GCF_NN_N(ABS_Z_N(polynom[1][i][0]), n)
            m = LCM_NN_N(polynom[1][i][1], m)

    # Переводим НОД числителей из натурального в целое
    result = [TRANS_N_Z(n), m]

    return result
예제 #6
0
def ADD_ZZ_Z(number1, number2):
    """
    Z-6
    Сложение целых чисел
    Царёв Александр, 7305
    """
    # Модули чисел
    m1 = ABS_Z_N(number1)
    m2 = ABS_Z_N(number2)

    # Знаки чисел
    p1 = POZ_Z_D(number1)
    p2 = POZ_Z_D(number2)

    # Если одно из слогаемых равно нулю, то результат - второе слогаемое
    if p1 == 0:
        result = common.copy_Z(number2)
    elif p2 == 0:
        result = common.copy_Z(number1)
    # Если знаки одинаковые, складываем модули, сохраняем знак
    elif p1 == 2 and p2 == 2 or p1 == 1 and p2 == 1:
        m = ADD_NN_N(m1, m2)
        p = 0 if p1 == 2 else 1
        result = [p, m[0], m[1]]
    # Разные знаки - из большего модуля вычитаем меньший и оставляем
    # знак числа с наибольшим модулем
    else:
        if COM_NN_D(m1, m2) == 2:
            m = SUB_NN_N(m1, m2)
            p = number1[0]
        else:
            m = SUB_NN_N(m2, m1)
            p = number2[0]
        result = [p, m[0], m[1]]

    return result
예제 #7
0
def DIV_QQ_Q(number1, number2):
    """
    Q-8
    Деление дробей
    Фёдорова Алиса, 7305
    """
    # Числитель - произведение числителя первой дроби и знаменателя второй
    n = MUL_ZZ_Z(number1[0], TRANS_N_Z(number2[1]))
    # Знаменатель - произведение числителя второй дроби и знаменателя первой
    m = MUL_ZZ_Z(TRANS_N_Z(number1[1]), number2[0])

    if POZ_Z_D(m) == 0:
        raise Exception('Попытка деления на 0')

    # Если знаменатель отрицательный - домножаем числитель на -1
    if POZ_Z_D(m) == 1:
        n = MUL_ZM_Z(n)
    # В знаменатель - модуль
    result = [n, ABS_Z_N(m)]

    return RED_Q_Q(result)
예제 #8
0
def RED_Q_Q(number):
    """
    Q-1
    Сокращение дроби
    Королев Андрей, 7305
    """
    result = []
    
    # Определяется модуль числителя
    n = ABS_Z_N(number[0])
    # Находится НОД
    a = GCF_NN_N(n, number[1])

    # Числитель и знаменятель делятся на найденый ранее НОД
    # Перед делением НОД и знаменатель преобразуется из натурального в целое
    gcf = TRANS_N_Z(a)
    N = DIV_ZZ_Z(number[0], gcf)
    M = DIV_ZZ_Z(TRANS_N_Z(number[1]), gcf)

    # В результате новый знаменатель преобразуется из целого в натураьное
    result = [N, TRANS_Z_N(M)]
    return result