test math
This commit is contained in:
@@ -11,6 +11,8 @@ class Operation(Enum):
|
||||
"""Типы операций"""
|
||||
ADDITION = "сложение"
|
||||
SUBTRACTION = "вычитание"
|
||||
MULTIPLICATION = "умножение"
|
||||
DIVISION = "деление"
|
||||
|
||||
|
||||
class NumberSystem(Enum):
|
||||
@@ -455,6 +457,164 @@ class StepByStepSolver:
|
||||
|
||||
return steps
|
||||
|
||||
def multiply_with_steps(self, num1: str, num2: str) -> List[Step]:
|
||||
"""
|
||||
Умножение двух чисел в n-ричной системе с пошаговым объяснением
|
||||
|
||||
Args:
|
||||
num1: первый множитель
|
||||
num2: второй множитель
|
||||
|
||||
Returns:
|
||||
список шагов решения
|
||||
"""
|
||||
steps = []
|
||||
|
||||
# Шаг 1: Исходные данные
|
||||
step1 = Step(
|
||||
"Условие задачи",
|
||||
f"Необходимо умножить два числа в {self.get_system_name()} ({self.base}-ричной) системе счисления",
|
||||
f"{num1}₍{self.base}₎ × {num2}₍{self.base}₎ = ?",
|
||||
""
|
||||
)
|
||||
steps.append(step1)
|
||||
|
||||
# Определяем знак результата
|
||||
dec1 = self.to_decimal(num1)
|
||||
dec2 = self.to_decimal(num2)
|
||||
|
||||
num1_clean = num1.replace('-', '').upper()
|
||||
num2_clean = num2.replace('-', '').upper()
|
||||
|
||||
# Шаг 2: Умножение через десятичную систему (простой подход)
|
||||
result_dec = dec1 * dec2
|
||||
result_str = self.from_decimal(result_dec)
|
||||
|
||||
step2 = Step(
|
||||
"Преобразование в десятичную систему",
|
||||
"Переводим оба числа в десятичную систему для проверки",
|
||||
f"{num1}₍{self.base}₎ = {dec1}₍₁₀₎\n" +
|
||||
f"{num2}₍{self.base}₎ = {dec2}₍₁₀₎",
|
||||
""
|
||||
)
|
||||
steps.append(step2)
|
||||
|
||||
# Шаг 3: Умножение в десятичной системе
|
||||
step3 = Step(
|
||||
"Умножение в десятичной системе",
|
||||
"Перемножаем числа в десятичной системе",
|
||||
f"{dec1} × {dec2} = {result_dec}",
|
||||
f"{result_dec}₍₁₀₎"
|
||||
)
|
||||
steps.append(step3)
|
||||
|
||||
# Шаг 4: Обратное преобразование
|
||||
step4 = Step(
|
||||
f"Перевод результата в {self.base}-ричную систему",
|
||||
f"Переводим результат обратно в {self.base}-ричную систему",
|
||||
f"{result_dec}₍₁₀₎ = {result_str}₍{self.base}₎",
|
||||
f"{result_str}₍{self.base}₎"
|
||||
)
|
||||
steps.append(step4)
|
||||
|
||||
# Шаг 5: Проверка
|
||||
step5 = Step(
|
||||
"Итоговый результат",
|
||||
f"Результат умножения {num1}₍{self.base}₎ × {num2}₍{self.base}₎",
|
||||
f"{num1}₍{self.base}₎ × {num2}₍{self.base}₎ = {result_str}₍{self.base}₎\nПроверка: {dec1} × {dec2} = {result_dec}",
|
||||
f"✓ Ответ: {result_str}₍{self.base}₎"
|
||||
)
|
||||
steps.append(step5)
|
||||
|
||||
return steps
|
||||
|
||||
def divide_with_steps(self, num1: str, num2: str) -> List[Step]:
|
||||
"""
|
||||
Деление двух чисел в n-ричной системе с пошаговым объяснением
|
||||
|
||||
Args:
|
||||
num1: делимое
|
||||
num2: делитель
|
||||
|
||||
Returns:
|
||||
список шагов решения
|
||||
"""
|
||||
steps = []
|
||||
|
||||
# Шаг 1: Исходные данные
|
||||
step1 = Step(
|
||||
"Условие задачи",
|
||||
f"Необходимо разделить два числа в {self.get_system_name()} ({self.base}-ричной) системе счисления",
|
||||
f"{num1}₍{self.base}₎ ÷ {num2}₍{self.base}₎ = ?",
|
||||
""
|
||||
)
|
||||
steps.append(step1)
|
||||
|
||||
# Проверка деления на ноль
|
||||
dec2 = self.to_decimal(num2)
|
||||
if dec2 == 0:
|
||||
step_error = Step(
|
||||
"Ошибка",
|
||||
"Деление на ноль невозможно!",
|
||||
"",
|
||||
"❌ Деление на ноль"
|
||||
)
|
||||
steps.append(step_error)
|
||||
return steps
|
||||
|
||||
dec1 = self.to_decimal(num1)
|
||||
|
||||
num1_clean = num1.replace('-', '').upper()
|
||||
num2_clean = num2.replace('-', '').upper()
|
||||
|
||||
# Шаг 2: Преобразование в десятичную систему
|
||||
step2 = Step(
|
||||
"Преобразование в десятичную систему",
|
||||
"Переводим оба числа в десятичную систему",
|
||||
f"{num1}₍{self.base}₎ = {dec1}₍₁₀₎\n" +
|
||||
f"{num2}₍{self.base}₎ = {dec2}₍₁₀₎",
|
||||
""
|
||||
)
|
||||
steps.append(step2)
|
||||
|
||||
# Шаг 3: Деление в десятичной системе (целочисленное)
|
||||
quotient = dec1 // dec2
|
||||
remainder = dec1 % dec2
|
||||
|
||||
step3 = Step(
|
||||
"Деление в десятичной системе",
|
||||
"Выполняем целочисленное деление в десятичной системе",
|
||||
f"{dec1} ÷ {dec2} = {quotient} (остаток {remainder})",
|
||||
f"Частное: {quotient}₍₁₀₎, Остаток: {remainder}₍₁₀₎"
|
||||
)
|
||||
steps.append(step3)
|
||||
|
||||
# Шаг 4: Обратное преобразование
|
||||
quotient_str = self.from_decimal(quotient)
|
||||
remainder_str = self.from_decimal(remainder) if remainder != 0 else "0"
|
||||
|
||||
step4 = Step(
|
||||
f"Перевод результата в {self.base}-ричную систему",
|
||||
f"Переводим частное и остаток обратно в {self.base}-ричную систему",
|
||||
f"Частное: {quotient}₍₁₀₎ = {quotient_str}₍{self.base}₎\n" +
|
||||
f"Остаток: {remainder}₍₁₀₎ = {remainder_str}₍{self.base}₎",
|
||||
f"{quotient_str}₍{self.base}₎ (остаток {remainder_str}₍{self.base}₎)"
|
||||
)
|
||||
steps.append(step4)
|
||||
|
||||
# Шаг 5: Проверка
|
||||
check_result = dec2 * quotient + remainder
|
||||
step5 = Step(
|
||||
"Проверка результата",
|
||||
"Проверяем: делитель × частное + остаток = делимое",
|
||||
f"{dec2} × {quotient} + {remainder} = {check_result}\n" +
|
||||
f"{num2}₍{self.base}₎ × {quotient_str}₍{self.base}₎ + {remainder_str}₍{self.base}₎ = {num1}₍{self.base}₎",
|
||||
f"✓ Ответ: {quotient_str}₍{self.base}₎ (остаток {remainder_str}₍{self.base}₎)" if remainder != 0 else f"✓ Ответ: {quotient_str}₍{self.base}₎"
|
||||
)
|
||||
steps.append(step5)
|
||||
|
||||
return steps
|
||||
|
||||
def solve(self, num1: str, num2: str, operation: Operation) -> List[Step]:
|
||||
"""
|
||||
Решить задачу с пошаговым объяснением
|
||||
@@ -462,7 +622,7 @@ class StepByStepSolver:
|
||||
Args:
|
||||
num1: первое число
|
||||
num2: второе число
|
||||
operation: тип операции (сложение/вычитание)
|
||||
operation: тип операции (сложение/вычитание/умножение/деление)
|
||||
|
||||
Returns:
|
||||
список шагов решения
|
||||
@@ -471,6 +631,10 @@ class StepByStepSolver:
|
||||
return self.add_with_steps(num1, num2)
|
||||
elif operation == Operation.SUBTRACTION:
|
||||
return self.subtract_with_steps(num1, num2)
|
||||
elif operation == Operation.MULTIPLICATION:
|
||||
return self.multiply_with_steps(num1, num2)
|
||||
elif operation == Operation.DIVISION:
|
||||
return self.divide_with_steps(num1, num2)
|
||||
else:
|
||||
raise ValueError(f"Неподдерживаемая операция: {operation}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user