Реализовать калькулятор для выражений с обыкновенными дробями. Число может быть записано как правильная, неправильная или смешанная дробь (вид записи выражений приведен в примерах). Должны поддерживаться операции: +. Выражение включает только одну операцию. Результат представить как неправильную дробь.
Пример 1: 1 3/5 + 2/3 -> 2 4/15
Пример 2: 2/9 * 6/5 -> 4/15
Питон
1. Сначала нужно разбить введенное выражение на операнды и операцию.
Для этого мы можем использовать метод split(), который разбивает строку на подстроки по заданному разделителю. В данном случае разделителем будет пробел.
2. Затем нужно привести операнды к неправильной дроби.
Для этого нам понадобится функция для преобразования правильной, неправильной и смешанной дробей в неправильную дробь. Мы можем использовать следующий алгоритм:
- Если дробь представлена в виде смешанной: преобразуем смешанную дробь в неправильную, складывая произведение целой части и знаменателя с числителем.
- Если дробь представлена в виде правильной: просто вернем ее в виде неправильной дроби.
- Если дробь представлена в виде обычной дроби: преобразуем ее в неправильную, умножая числитель на знаменатель.
3. Выполнить операцию над операндами.
В данной задаче мы должны поддерживать только операцию сложения. Мы можем использовать следующий алгоритм:
- Общий знаменатель определяется как произведение знаменателей операндов.
- Числитель результата определяется как сумма произведений числителя операндов на знаменатель другого операнда.
- Если числитель результата больше знаменателя, преобразуем его в смешанную дробь, разделив числитель на знаменатель и получив целую часть и остаток. Остаток станет новым числителем, а знаменатель останется прежним.
4. Привести результат к неправильной дроби.
Если числитель результата больше или равен знаменателю, мы можем использовать такой же алгоритм, который использовали в пункте 2.
5. Вывести результат.
Для вывода результата мы можем использовать функцию print().
Теперь давайте реализуем этот алгоритм на языке Python:
```python
def convert_to_improper(fraction):
if ' ' in fraction:
whole_part, fraction = fraction.split(' ')
numerator, denominator = map(int, fraction.split('/'))
numerator += int(whole_part) * denominator
elif '/' in fraction:
numerator, denominator = map(int, fraction.split('/'))
else:
return int(fraction), 1
return numerator, denominator
def calculate_expression(expression):
operands = expression.split(' ')
operand1, operand2 = map(convert_to_improper, operands[:2])
operator = operands[1]
if operator == '+':
numerator = operand1[0] * operand2[1] + operand2[0] * operand1[1]
denominator = operand1[1] * operand2[1]
else:
print("Unsupported operation")
return
if numerator >= denominator:
whole_part = numerator // denominator
numerator %= denominator
result = f"{whole_part} {numerator}/{denominator}"
else:
result = f"{numerator}/{denominator}"
print(result)
calculate_expression("1 3/5 + 2/3")
```
Ожидаемый вывод: "2 4/15"