Загрузка данных
import tkinter as tk
from tkinter import ttk
class Task5App:
def __init__(self, root):
self.root = root
self.root.title("Задача 5 - Радиолокационное устройство")
self.root.geometry("700x550")
# Данные задачи
self.p_signal = 0.8 # P(есть полезный сигнал)
self.p_noise_only = 0.2 # P(только помеха)
self.p_reg_given_signal = 0.7 # P(регистрация | есть сигнал)
self.p_reg_given_noise = 0.3 # P(регистрация | только помеха)
# Вычисление по формуле Байеса
self.p_reg = (self.p_signal * self.p_reg_given_signal +
self.p_noise_only * self.p_reg_given_noise)
self.p_signal_given_reg = (self.p_signal * self.p_reg_given_signal) / self.p_reg
# Интерфейс
ttk.Label(root, text="Задача 5", font=("Arial", 14, "bold")).pack(pady=5)
condition = """На вход радиолокационного устройства:
• С вероятностью 0,8 поступает сигнал + помеха
• С вероятностью 0,2 — только помеха
Прибор регистрирует сигнал:
• Если есть сигнал: с вероятностью 0,7
• Если только помеха: с вероятностью 0,3
Найти P(есть сигнал | прибор зарегистрировал)"""
ttk.Label(root, text=condition, wraplength=650, justify="left").pack(pady=5)
# Результат
result_frame = ttk.LabelFrame(root, text="Ответ", padding=10)
result_frame.pack(fill="x", padx=10, pady=5)
ttk.Label(result_frame,
text=f"P(сигнал | регистрация) = {self.p_signal_given_reg:.4f} = {self.p_signal_given_reg*100:.1f}%",
font=("Arial", 12, "bold")).pack()
# Дерево вероятностей
tree_frame = ttk.LabelFrame(root, text="Дерево вероятностей", padding=5)
tree_frame.pack(fill="both", expand=True, padx=10, pady=5)
self.canvas = tk.Canvas(tree_frame, bg="white", height=320)
self.canvas.pack(fill="both", expand=True)
self.draw_tree()
# Решение
sol_frame = ttk.LabelFrame(root, text="Решение (формула Байеса)", padding=5)
sol_frame.pack(fill="x", padx=10, pady=5)
solution = f"""P(регистрация) = 0.8×0.7 + 0.2×0.3 = 0.56 + 0.06 = {self.p_reg:.4f}
P(сигнал|регистрация) = (0.8×0.7) / {self.p_reg:.4f} = 0.56 / {self.p_reg:.4f} = {self.p_signal_given_reg:.4f}"""
ttk.Label(sol_frame, text=solution, justify="left").pack()
def draw_tree(self):
self.canvas.delete("all")
# Корень
cx, cy = 350, 30
self.canvas.create_oval(cx-3, cy-3, cx+3, cy+3, fill="black")
self.canvas.create_text(cx, cy-12, text="Вход", font=("Arial", 9))
# Левая ветка (есть сигнал)
x1, y1 = cx-120, cy+80
self.canvas.create_line(cx, cy, x1, y1, width=2)
self.canvas.create_text(cx-60, cy+40, text="0.8", font=("Arial", 8))
self.canvas.create_oval(x1-3, y1-3, x1+3, y1+3, fill="green")
self.canvas.create_text(x1, y1-12, text="Сигнал + помеха", font=("Arial", 8))
# Регистрация от сигнала
x2, y2 = x1-70, y1+70
self.canvas.create_line(x1, y1, x2, y2, width=2)
self.canvas.create_text(x1-35, y1+35, text="0.7", font=("Arial", 8))
self.canvas.create_oval(x2-2, y2-2, x2+2, y2+2, fill="blue")
self.canvas.create_text(x2, y2-8, text="Регистрация", font=("Arial", 7))
self.canvas.create_text(x2+30, y2, text="0.56", font=("Arial", 7, "bold"))
# Нет регистрации от сигнала
x3, y3 = x1+70, y1+70
self.canvas.create_line(x1, y1, x3, y3, width=2)
self.canvas.create_text(x1+35, y1+35, text="0.3", font=("Arial", 8))
self.canvas.create_oval(x3-2, y3-2, x3+2, y3+2, fill="gray")
self.canvas.create_text(x3, y3-8, text="Нет регистрации", font=("Arial", 7))
self.canvas.create_text(x3+35, y3, text="0.24", font=("Arial", 7))
# Правая ветка (только помеха)
x4, y4 = cx+120, cy+80
self.canvas.create_line(cx, cy, x4, y4, width=2)
self.canvas.create_text(cx+60, cy+40, text="0.2", font=("Arial", 8))
self.canvas.create_oval(x4-3, y4-3, x4+3, y4+3, fill="red")
self.canvas.create_text(x4, y4-12, text="Только помеха", font=("Arial", 8))
# Регистрация от помехи
x5, y5 = x4-70, y4+70
self.canvas.create_line(x4, y4, x5, y5, width=2)
self.canvas.create_text(x4-35, y4+35, text="0.3", font=("Arial", 8))
self.canvas.create_oval(x5-2, y5-2, x5+2, y5+2, fill="blue")
self.canvas.create_text(x5, y5-8, text="Регистрация", font=("Arial", 7))
self.canvas.create_text(x5+30, y5, text="0.06", font=("Arial", 7, "bold"))
# Нет регистрации от помехи
x6, y6 = x4+70, y4+70
self.canvas.create_line(x4, y4, x6, y6, width=2)
self.canvas.create_text(x4+35, y4+35, text="0.7", font=("Arial", 8))
self.canvas.create_oval(x6-2, y6-2, x6+2, y6+2, fill="gray")
self.canvas.create_text(x6, y6-8, text="Нет регистрации", font=("Arial", 7))
self.canvas.create_text(x6+35, y6, text="0.14", font=("Arial", 7))
# Итог
self.canvas.create_text(cx, 300,
text=f"P(регистрация) = 0.56 + 0.06 = {self.p_reg:.4f}",
font=("Arial", 9, "bold"), fill="blue")
self.canvas.create_text(cx, 320,
text=f"P(сигнал|регистрация) = 0.56 / {self.p_reg:.4f} = {self.p_signal_given_reg:.4f}",
font=("Arial", 9, "bold"), fill="red")
if __name__ == "__main__":
root = tk.Tk()
app = Task5App(root)
root.mainloop()