Проект. Квадратне рівняння

Задача
Знайти корені квадратного рівняння і вивести їх на екран, якщо вони є. Якщо коренів немає, то вивести повідомлення про це. Конкретне квадратне рівняння визначається коефіцієнтами a, b, c, які вводить користувач.

Квадратне рівняння має вигляд ax^2 + bx + c = 0. Коефіцієнти a, b і c - це конкретні числа, а x треба знайти, розв'язавши рівняння.

Алгоритм 
1. Обчислити дискримінант за формулою d = b^2 - 4ac.
2. Якщо дискримінант більше нуля, то обчислити два кореня рівняння:
x1 = (-b + √d) / 2a
x2 = (-b-√d) / 2a
3. Якщо дискримінант дорівнює нулю, то обчислити тільки один корінь (другий буде дорівнює йому).

4. Якщо дискримінант від'ємний, то вивести повідомлення, що коріння немає.

# Розв'язання квадратного рівняння a*x^2+b*x+c=0
from tkinter import *
from math import sqrt

def solver(a,b,c):
    D = b*b - 4*a*c           # обчислення дискримінанта      
    if D >= 0:
        x1 = (-b + sqrt(D)) / (2*a);
        x2 = (-b - sqrt(D)) / (2*a)
        text = "Дискримінант: %s \n x1 = %s \n x2 = %s \n" % (D, x1, x2)        
    else:
        text = "Дискримінант: %s \n Рівняння розв'язків немає" % D 
    return text

def inserter(value):
    """ Очистка та вставка значень  """
    output.delete("0.0","end")
    output.insert("0.0",value)    

def clear(event):
    """ Очистка текстових полів об'єкта Entry  """
    caller = event.widget
    caller.delete("0", "end")

def handler():                       # функція обробки
# Отримати значення коефіцієнтів з перевіркою на коректність 
    try:
        a_val = float(a.get())
        b_val = float(b.get())
        c_val = float(c.get())
        inserter(solver(a_val, b_val, c_val))
    except ValueError:
        inserter("Вставити числові коефіцієнти квадратного рівняння")

root = Tk()
root.title("Розв'язок квадратного рівняння")
root.geometry("330x230+300+100")
root.resizable(width=False, height=False)
#
frame = Frame(root)         #
frame.pack()

a = Entry(frame, width=3)   #
a.grid(row=1,column=1,padx=(10,0))
a.bind("<FocusIn>", clear)
al = Label(frame, text="x**2+").grid(row=1,column=2)

b = Entry(frame, width=3)   # 
b.bind("<FocusIn>", clear)
b.grid(row=1,column=3)
bl = Label(frame, text="x+").grid(row=1, column=4)

c = Entry(frame, width=3)   #
c.bind("<FocusIn>", clear)
c.grid(row=1, column=5)
cl = Label(frame, text="= 0").grid(row=1, column=6)

but = Button(frame, text="Розв'язати", command=handler).grid(row=1,
            column=7, padx=(10,0))  #

output = Text(frame, bg="lightblue", font="Arial 12", width=35, height=10)
output.grid(row=2, columnspan=8)

root.mainloop()

Завдання
1. Доповнити код програми коментарями
2. Виконати код програми і навести приклади квадратних рівнянь, коли рівняння має два корені, коли один, а коли коренів немає.

Запитання
1. Яке призначення конструкції
try:
      <вказівки>
except ValueError:
       <вказівки>
2. Яке призначення в програмі має клас Frame ?
3. Навіщо потрібно імпортувати модуль math ?
4. Яке призначення класу Entry(...) ?
5. Яке призначення класу Button(...) ?
6. Яке призначення класу Text(...) ?
7. Які параметри має метод grid(...) ?
8. Яке призначення методу resizable ?

Комментариев нет:

Отправить комментарий