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
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
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
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
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)
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)
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)
def test_zeros(self): number = [1, [0]] expect = number result = natural.ADD_NN_N(number, number) self.assertEqual(result, expect)