import math
import cmath
def add(x, y): return x + y
def subtract(x, y): return x - y
def multiply(x, y): return x * y
def divide(x, y):
if y == 0:
return "Ошибка: Деление на ноль!"
return x / y
def power(x, y): return x ** y
def square_root(x):
if x < 0:
return "Ошибка: Негативный корень!"
return math.sqrt(x)
def sin_function(angle):
"""Вычисляет синус угла в градусах."""
radians = math.radians(angle)
return math.sin(radians)
def cos_function(angle):
"""Вычисляет косинус угла в градусах."""
radians = math.radians(angle)
return math.cos(radians)
def complex_operations():
real = float(input("Введите действительную часть комплексного числа: "))
imag = float(input("Введите мнимую часть комплексного числа: "))
z = complex(real, imag)
print(f"Комплексное число: {z}")
print(f"Модуль: {abs(z)}")
print(f"Аргумент: {cmath.phase(z)}")
def trigonometric_functions():
angle = float(input("Введите угол в градусах: "))
print(f"Синус: {sin_function(angle)}")
print(f"Косинус: {cos_function(angle)}")
print(f"Тангенс: {math.tan(math.radians(angle))}")
def get_number(prompt):
while True:
try:
return float(input(prompt))
except ValueError:
print("Ошибка: Пожалуйста, введите корректное число.")
def get_numbers():
num1 = get_number("Введите первое число: ")
num2 = get_number("Введите второе число: ")
return num1, num2
def format_result(result):
"""Форматирует результат для вывода без .0 у целых чисел и с периодической дробью для деления."""
if isinstance(result, str): # Если результат - строка (например, ошибка)
return result
elif result.is_integer(): # Если число целое
return int(result)
# Проверяем на периодическую дробь (например, 0.3333...)
str_result = str(result)
if str_result.startswith('0.') and '3' in str_result[2:]:
count_threes = str_result[2:].count('3')
if count_threes > 5: # Если больше 5 троек подряд
return f"{str_result[0]}.(3)"
return str_result
def main():
operations = {
'1': (add, "+"),
'2': (subtract, "-"),
'3': (multiply, "*"),
'4': (divide, "/"),
'5': (power, "^"),
'6': (square_root, "√"),
'7': (complex_operations, "Комплексные числа"),
'8': (trigonometric_functions, "Тригонометрические функции"),
'9': (sin_function, "Синус"),
'10': (cos_function, "Косинус"),
'11': (None, "Выход")
}
print("Добро пожаловать в калькулятор!")
while True:
print("\nВыберите операцию:")
for key in operations.keys():
operation_symbol = operations[key][1] if operations[key][1] else key
print(f"{key}. {operation_symbol}")
choice = input("Введите номер операции (1-11): ")
if choice in operations:
if choice in ['1', '2', '3', '4', '5', '6']:
num1, num2 = get_numbers()
result = operations[choice][0](num1, num2) if choice != '6' else operations[choice][0](num1)
formatted_result = format_result(result)
print(f"Результат: {formatted_result}")
elif choice in ['9', '10']: # Синус и косинус требуют только один аргумент
angle = get_number("Введите угол в градусах: ")
result = operations[choice][0](angle)
formatted_result = format_result(result)