# Руководство по обновлению калькуляторов ## Статус обновлений ### ✅ Завершено: 1. **step_by_step_solver.py** - добавлены операции `MULTIPLICATION` и `DIVISION` 2. **calculater2.py** (Десятичный) - добавлены 4 колонки (+, -, ×, ÷) 3. **binary_calculeator4.py** (Двоичный) - добавлены 4 колонки (+, -, ×, ÷) 4. **octogon_calculeator6.py** (Восьмеричный) - добавлены 4 колонки (+, -, ×, ÷) ### ⏳ Требуется завершить: 5. **sedecim_calculeator8.py** (Шестнадцатеричный) 6. **pentecostal_calculeator10.py** (50-ричный) ## Инструкция для завершения оставшихся калькуляторов ### Для sedecim_calculeator8.py и pentecostal_calculeator10.py: #### 1. Обновить __init__ метод класса: Добавить: ```python # Результаты для умножения и деления self.result_mult = ft.Text(value="0", size=30, width=300) self.result_div = ft.Text(value="0", size=30, width=300) self.decimal_mult = ft.Text(value="(0₁₀)", size=14, color="#B0B0B0", width=300) self.decimal_div = ft.Text(value="(0₁₀)", size=14, color="#B0B0B0", width=300) # Поля ввода для умножения self.input_mult_1 = None self.input_mult_2 = None # Поля ввода для деления self.input_div_1 = None self.input_div_2 = None # Контейнеры для пошагового решения self.steps_mult = ft.Column(scroll=ft.ScrollMode.AUTO, spacing=5) self.steps_div = ft.Column(scroll=ft.ScrollMode.AUTO, spacing=5) ``` #### 2. Добавить методы calculate_multiplication и calculate_division: ```python def calculate_multiplication(self, e): # Логика умножения - преобразовать в десятичную, умножить, вернуть обратно # Вызвать self.show_steps_mult(val1, val2, Operation.MULTIPLICATION) def calculate_division(self, e): # Логика деления - преобразовать в десятичную, разделить, вернуть обратно # Проверка деления на ноль # Вызвать self.show_steps_div(val1, val2, Operation.DIVISION) ``` #### 3. Добавить методы show_steps_mult и show_steps_div: ```python def show_steps_mult(self, num1: str, num2: str, operation: Operation): # Аналогично show_steps_left/right # Обновить self.steps_mult def show_steps_div(self, num1: str, num2: str, operation: Operation): # Аналогично show_steps_left/right # Обновить self.steps_div ``` #### 4. Обновить test_data метод: Добавить поля ввода для умножения и деления: ```python self.input_mult_1 = ft.TextField(...) self.input_mult_2 = ft.TextField(...) self.input_div_1 = ft.TextField(...) self.input_div_2 = ft.TextField(...) ``` Добавить две новые колонки в ft.Row (controls): ```python ft.Column( # Умножение controls=[ self.input_mult_1, ft.Text("× Умножение", ...), self.input_mult_2, ft.Container(content=...), # result_mult ft.CupertinoButton("=", on_click=self.calculate_multiplication), ft.Container(content=self.steps_mult, ...) ] ), ft.Column( # Деление controls=[ self.input_div_1, ft.Text("÷ Деление", ...), self.input_div_2, ft.Container(content=...), # result_div ft.CupertinoButton("=", on_click=self.calculate_division), ft.Container(content=self.steps_div, ...) ] ) ``` ## Примечания: - Для **sedecim_calculeator8.py**: Используйте существующие методы `hex_to_decimal` и `decimal_to_hex` - Для **pentecostal_calculeator10.py**: Используйте существующие методы `from_base50` и `to_base50` - Во всех случаях импортируйте `Operation` из step_by_step_solver - Проверьте деление на ноль в методе calculate_division ## Шаблон для calculate_multiplication (шестнадцатеричный): ```python def calculate_multiplication(self, e): try: num1 = self.hex_to_decimal(self.input_mult_1.value.upper()) num2 = self.hex_to_decimal(self.input_mult_2.value.upper()) result_decimal = num1 * num2 result_hex = self.decimal_to_hex(result_decimal) self.result_mult.value = f"HEX: {result_hex}" self.decimal_mult.value = f"DEC: {result_decimal}" if '.' not in self.input_mult_1.value and '.' not in self.input_mult_2.value: hex_val1 = self.input_mult_1.value.upper().lstrip('-+') if self.input_mult_1.value else "0" hex_val2 = self.input_mult_2.value.upper().lstrip('-+') if self.input_mult_2.value else "0" self.show_steps_mult(hex_val1, hex_val2, Operation.MULTIPLICATION) else: self.steps_mult.controls.clear() self.steps_mult.controls.append( ft.Text("Пошаговое решение доступно только для целых чисел", color="#FFD700", size=12) ) self.steps_mult.update() except Exception as ex: self.result_mult.value = f"Ошибка: {str(ex)}" self.decimal_mult.value = "DEC: ошибка" self.page.update() ``` ## Следующие шаги: 1. Откройте sedecim_calculeator8.py 2. Примените изменения согласно шаблону выше 3. Повторите для pentecostal_calculeator10.py 4. Протестируйте все калькуляторы Все изменения следуют единому паттерну, использованному в уже обновленных калькуляторах.