test math

This commit is contained in:
2025-11-10 12:18:40 +05:00
parent 760fb43e62
commit 0c623d4bc5
7 changed files with 1307 additions and 3 deletions

137
UPGRADE_GUIDE.md Normal file
View File

@@ -0,0 +1,137 @@
# Руководство по обновлению калькуляторов
## Статус обновлений
### ✅ Завершено:
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. Протестируйте все калькуляторы
Все изменения следуют единому паттерну, использованному в уже обновленных калькуляторах.