def SUB_ZZ_Z(list1, list2):
    # Семёнов Михаил
    # Вычитание целых чисел
    if POZ_Z_D(list1) == '+' and POZ_Z_D(list2) == '-':
        return f1.ADD_NN_N(list1, ABS_Z_N(list2))
    elif POZ_Z_D(list1) == '-' and POZ_Z_D(list2) != '-':
        if POZ_Z_D(list2) == '+':
            return ['-'] + f1.ADD_NN_N(ABS_Z_N(list1), ABS_Z_N(list2))
        else:
            return list1

    elif f1.COM_NN_D(ABS_Z_N(list1), ABS_Z_N(list2)) == 2:
        if list2 != 0:
            return f1.SUB_NN_N(ABS_Z_N(list1), ABS_Z_N(list2))
        else:
            return list1
    elif POZ_Z_D(list1) == 0:
        if POZ_Z_D(list2) == '-':
            return list2[1:]
        elif list2 == [0]:
            return list2
        else:
            return ['-'] + list2

    else:
        if POZ_Z_D(list1) == '+':
            return ['-'] + f1.SUB_NN_N(ABS_Z_N(list2), ABS_Z_N(list1))
        else:
            return f1.SUB_NN_N(ABS_Z_N(list2), ABS_Z_N(list1))
def MUL_Pxk_P(power, k):
    # Дашкин Дамир
    # Умножение многочлена на x^k
    for i in range(len(power)):
        power[i] = nat.ADD_NN_N(
            power[i], k)  # Степень каждого члена увеличиваем на k единиц
    return power
Example #3
0
def ADD_ZZ_Z(list1, list2):
    # Дашкин Дамир
    # Сложение целых чисел
    if POZ_Z_D(list1) == '+' and POZ_Z_D(list2) == '+':
        return nat.ADD_NN_N(list1, list2)
    elif POZ_Z_D(list1) == '-' and POZ_Z_D(list2) == '-':
        return ['-'] + nat.ADD_NN_N(ABS_Z_N(list1), ABS_Z_N(list2))
    elif nat.COM_NN_D(ABS_Z_N(list1), ABS_Z_N(list2)) == 2:
        if POZ_Z_D(list1) == '-':
            return ['-'] + nat.SUB_NN_N(ABS_Z_N(list1), ABS_Z_N(list2))
        else:
            return nat.SUB_NN_N(ABS_Z_N(list1), ABS_Z_N(list2))
    elif nat.COM_NN_D(ABS_Z_N(list1), ABS_Z_N(list2)) == 1:
        if POZ_Z_D(list2) == '-':
            return ['-'] + nat.SUB_NN_N(ABS_Z_N(list2), ABS_Z_N(list1))
        else:
            return nat.SUB_NN_N(ABS_Z_N(list2), ABS_Z_N(list1))
    elif nat.COM_NN_D(ABS_Z_N(list1), ABS_Z_N(list2)) == 0:
        return [0]
def MUL_PP_P(koefs_1, powers_1, koefs_2, powers_2):
    # Артамонов Артур, гр.0306
    # Умножение многочленов

    new_koefs = []
    new_powers = []

    for i in range(len(koefs_1)):
        for j in range(len(koefs_2)):
            k = rat.MUL_QQ_Q(koefs_1[i], koefs_2[j])  # Умножаем фонтанчиком
            n = nat.ADD_NN_N(powers_1[i],
                             powers_2[j])  # коэффициенты и степени

            new_koefs.append(k)
            new_powers.append(n)

    super_new_powers = []
    super_new_koefs = []

    deleted = set()
    t = [[0], [1]]
    # Складываем одночлены с одинаковыми степенями
    for i in range(len(new_powers)):
        x = new_powers[i]
        if new_powers.count(x) > 1:
            q = i
            for j in range(q + 1, len(new_powers)):
                if new_powers[j] == x:
                    k = rat.ADD_QQ_Q(new_koefs[q], new_koefs[j])
                    t = rat.ADD_QQ_Q(t, k)

            if new_powers[i][0] not in deleted:
                super_new_koefs.append(t)
                super_new_powers.append(new_powers[i])
                deleted.add(new_powers[i][0])

        else:
            super_new_koefs.append(new_koefs[i])
            super_new_powers.append(new_powers[i])

    n = len(super_new_powers)
    # Сортировка пузырьком
    n = len(super_new_powers)
    for j in range(n - 1):
        for i in range(n - j - 1):
            a = int(''.join(map(str, super_new_powers[i])))
            b = int(''.join(map(str, super_new_powers[i + 1])))
            if a < b:
                super_new_powers[i], super_new_powers[
                    i + 1] = super_new_powers[i + 1], super_new_powers[i]
                super_new_koefs[i], super_new_koefs[i + 1] = super_new_koefs[
                    i + 1], super_new_koefs[i]

    return super_new_koefs, super_new_powers
Example #5
0
 def on_btn_n_addn_released(self):
     try:
         n1 = self.get_n_n(1)
         n2 = self.get_n_n(2)
         result = natural.ADD_NN_N(n1, n2)
         self.add_history_record('%d + %d = %d' % (
             common.N_to_num(n1),
             common.N_to_num(n2),
             common.N_to_num(result),
             ))
     except Exception as e:
         self.on_exception(e)
def ADD_ZZ_Z(b1, n1, list1, b2, n2, list2):
    #Дашкин Дамир
    #Сложение целых чисел
    str1 = ""
    str2 = ""
    for i in range(len(list1)):
        str1 = str1 + str(list1[i])
    for j in range(len(list2)):
        str2 = str2 + str(list2[j])
    if b1 == 1:
        str1 = "-" + str1
    num1 = int(str1)
    if b2 == 1:
        str2 = "-" + str2
    num2 = int(str2)
    if f1.POZ_Z_D(num1) == 2 and f1.POZ_Z_D(num2) == 2:
        res = f1.ADD_NN_N(num1, num2)
    if f1.POZ_Z_D(num1) == 1 and f1.POZ_Z_D(num2) == 1:
        mod1 = f1.ABS_Z_N(num1)
        mod2 = f1.ABS_Z_N(num2)
        res = f1.ADD_NN_N(mod1, mod2)
        res = f1.MUL_ZM_Z(res)
    else:
        mod1 = f1.ABS_Z_N(num1)
        mod2 = f1.ABS_Z_N(num2)
        if f1.COM_NN_D(mod1, mod2) == 2:
            if f1.POZ_Z_D(num1) == 1:
                res = f1.SUB_NN_N(mod1, mod2)
                res = f1.MUL_ZM_Z(res)
            else:
                res = f1.SUB_NN_N(mod1, mod2)
        if f1.COM_NN_D(mod1, mod2) == 1:
            if f1.POZ_Z_D(num2) == 1:
                res = f1.SUB_NN_N(mod2, mod1)
                res = MUL_ZM_Z(res)
            else:
                res = f1.SUB_NN_N(mod2, mod1)
        else:
            res = 0
    return res
Example #7
0
def open_window_nat_sum():
    layout = [
        [sg.Text('Enter two naturals')],
        [sg.Input(key='dig1')],
        [sg.Button('+', key='start')],
        [sg.Input(key='dig2')],
        [sg.Text(size=(400, 10), key='out')]
    ]
    window = sg.Window('The sum of natural numbers', layout, size=(460, 260), resizable=True)
    while True:
        event, values = window.read()
        if event == "start":
            window['out'].update(nat.ADD_NN_N(values['dig1'], values['dig2']))
        if event == sg.WINDOW_CLOSED:
            break
Example #8
0
 def test_complex(self):
     number1 = [3, [6, 7, 5]]
     number2 = [3, [8, 7, 9]]
     expect = [4, [4, 5, 5, 1]]
     result = natural.ADD_NN_N(number1, number2)
     self.assertEqual(result, expect)
Example #9
0
 def test_simple(self):
     number1 = [4, [1, 2, 3, 4]]
     number2 = [3, [4, 3, 2]]
     expect = [4, [5, 5, 5, 4]]
     result = natural.ADD_NN_N(number1, number2)
     self.assertEqual(result, expect)
Example #10
0
 def test_zero(self):
     number = [4, [3, 5, 3, 2]]
     zero = [1, [0]]
     expect = number
     result = natural.ADD_NN_N(number, zero)
     self.assertEqual(result, expect)
Example #11
0
 def test_zeros(self):
     number = [1, [0]]
     expect = number
     result = natural.ADD_NN_N(number, number)
     self.assertEqual(result, expect)