Загрузка данных


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()