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


# =====================================================
#   РЕШЕНИЕ ЗАДАЧ ПО ТЕОРИИ ВЕРОЯТНОСТЕЙ
#   Красивое оформление + подробные комментарии
# =====================================================

import random
from colorama import init, Fore, Style

init(autoreset=True)  # для красивого цвета в консоли

def print_header(text):
    print(Fore.CYAN + "="*60)
    print(Fore.YELLOW + f"   {text.center(56)}")
    print(Fore.CYAN + "="*60)

def print_result(task_num, description, result, fraction=None):
    print(Fore.WHITE + f"Задача {task_num}.")
    print(Fore.LIGHTGREEN_EX + description)
    if fraction:
        print(Fore.MAGENTA + f"Ответ: {result}  ({fraction})")
    else:
        print(Fore.MAGENTA + f"Ответ: {result}")
    print("-" * 55)


# =====================================================
# Задача 47
# =====================================================
print_header("ЗАДАЧА 47")

p_positive = 0.5
p_all_positive = p_positive ** 3

print_result(
    47,
    "Вероятность, что при трёх независимых измерениях все ошибки будут положительными:",
    f"{p_all_positive:.5f}",
    "1/8"
)


# =====================================================
# Задача 42
# =====================================================
print_header("ЗАДАЧА 42")

p_12 = 0.49
p_14 = 0.37
p_16_18 = 0.14

p_12_or_14 = p_12 + p_14

print_result(
    42,
    "Вероятность, что случайно выбранный початок кукурузы имеет 12 или 14 рядов:",
    f"{p_12_or_14:.2f}",
    "0,86"
)


# =====================================================
# Задача 49
# =====================================================
print_header("ЗАДАЧА 49")

questions = 5
p_correct_one = 1/2
p_all_correct = p_correct_one ** questions

print_result(
    49,
    "Ученик отвечает на 5 вопросов «да» или «нет» наугад.\n"
    "Вероятность, что все ответы окажутся правильными:",
    f"{p_all_correct:.6f}",
    "1/32"
)


# =====================================================
# Задача 48 — Шахматы
# =====================================================
print_header("ЗАДАЧА 48")

total_pieces = 16          # стандартный набор белых фигур
bishops = 2                # два слона

p_first = bishops / total_pieces
p_second = (bishops - 1) / (total_pieces - 1)
p_both = p_first * p_second

print_result(
    48,
    "Из набора шахматных фигур (одного цвета) наугад берут две фигуры.\n"
    "Какова вероятность, что обе окажутся слонами?",
    f"{p_both:.5f}",
    f"{bishops*(bishops-1)}/{total_pieces*(total_pieces-1)} = 1/120"
)


# =====================================================
# Монте-Карло симуляции (для проверки)
# =====================================================
print_header("ПРОВЕРКА ЧЕРЕЗ СИМУЛЯЦИИ (Монте-Карло)")

def simulate_all_positive_errors(trials=100_000):
    success = sum(1 for _ in range(trials) if all(random.choice([True, False]) for _ in range(3)))
    return success / trials

def simulate_all_correct_answers(trials=100_000):
    success = sum(1 for _ in range(trials) if all(random.random() < 0.5 for _ in range(5)))
    return success / trials

def simulate_two_bishops(trials=100_000):
    pieces = ['bishop']*2 + ['other']*14
    success = 0
    for _ in range(trials):
        chosen = random.sample(pieces, 2)
        if chosen.count('bishop') == 2:
            success += 1
    return success / trials


print(Fore.LIGHTCYAN_EX + "Симуляция Задачи 47:", f"{simulate_all_positive_errors():.5f}  (теория: 0.125)")
print(Fore.LIGHTCYAN_EX + "Симуляция Задачи 49:", f"{simulate_all_correct_answers():.5f}  (теория: 0.03125)")
print(Fore.LIGHTCYAN_EX + "Симуляция Задачи 48:", f"{simulate_two_bishops():.5f}  (теория: 0.00833)")
print("\n" + Fore.GREEN + "Все симуляции близки к теоретическим значениям ✓")


# =====================================================
# Дополнительно: красивый вывод всех ответов в таблице
# =====================================================
print_header("ИТОГОВАЯ ТАБЛИЦА ОТВЕТОВ")

print(f"{Fore.WHITE}{'Задача':<8} {'Описание':<50} {'Вероятность':<15} {'Дробь'}")
print("-" * 85)
print(f"{Fore.LIGHTWHITE_EX}47       {'Все ошибки положительные':<50} {0.125:<15} 1/8")
print(f"{Fore.LIGHTWHITE_EX}42       {'12 или 14 рядов у кукурузы':<50} {0.86:<15} 0.86")
print(f"{Fore.LIGHTWHITE_EX}48       {'Обе фигуры — слоны':<50} {0.00833:<15} 1/120")
print(f"{Fore.LIGHTWHITE_EX}49       {'Все 5 ответов правильные':<50} {0.03125:<15} 1/32")