Advertisement
sacr1ficerq

Вторая задача с правильными комментариями

May 4th, 2022
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.56 KB | None | 0 0
  1. from math import sqrt # Импортируем из дополнительного модуля квадратный корень (понадобится потом)
  2.  
  3. def solver(*args): # Создаем функцию solver, которая принимает на вход аргументы в качестве массива(набора чисел)
  4.     if len(args) == 1:# len - от английского length (длина) возвращает размер массива (количество аргументов)
  5.         # c = 0
  6.         c = args[0]
  7.         if c == 0: # Уравнение вида 0 = 0 (верно для любого x)
  8.             return ['?'] # Бесконечность решений
  9.         else: # Уравнение вида число=0 (не имеет решений ни при каких x)
  10.             raise Exception # Нет решений
  11.  
  12.     elif len(args) == 2:
  13.         # bx + c = 0
  14.         b = args[0]
  15.         c = args[1]
  16.  
  17.         if b == 0:  # Имеем уравнение как в len(args) == 1: Смотри там
  18.             if c == 0: # При любых x: 0*x+0 = 0
  19.                 return ['?'] # Бесконечность решений
  20.             else: # Ни при каких x: 0x + с = 0
  21.                 raise Exception # Нет решений
  22.         else: # b != 0
  23.             x = -c / b
  24.             return [x, x]
  25.  
  26.     elif len(args) == 3: # Самая сложная часть
  27.         #ax^2 + bx +c
  28.         a = args[0]
  29.         b = args[1] / a # Делим на а, чтобы работать с приведенным квадратным уравнением (x^2 + bx + c)
  30.         c = args[2] / a
  31.  
  32.         if b == 0: # Уравнение вида ax^2 = -c
  33.             if c == 0:
  34.                 return [0, 0]
  35.             elif c < 0:
  36.                 return [sqrt(-c), -sqrt(-c)] # Деля на a и извлекая корень, получаем, что |x| = корень из (-с/a)
  37.         elif c == 0: # x(x+b) = 0
  38.             return [0, -b]
  39.         else: #Общий случай
  40.             d = b ** 2 - 4 * c # Дискриминант
  41.             if d == 0:
  42.                 return [-b / 2, -b / 2]
  43.             elif d > 0: # Положительный дискриминант
  44.                 x1 = round((-b + sqrt(d)) / 2, 6)
  45.                 x2 = round((-b - sqrt(d)) / 2, 6)
  46.                 return [x1, x2]
  47.  
  48.     else: # Вызов без аргументов
  49.         raise Exception # Нет решений
  50.  
  51.  
  52. a, b, c = map(int, input().split()) #Тест
  53. print(*solver(a, b, c))
  54.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement