# Модуль М2 import pickle import os import matplotlib.pyplot as plt from m1 import sred, colvo def ctenie(): """Чтение данных из бинарного файла""" filename = input("Введите имя бинарного файла: ") if not os.path.exists(filename): print(f"Файл {filename} не существует!") return None, None try: with open(filename, 'rb') as file: data = pickle.load(file) if len(data) >= 2: A = data[0] B = data[1] return A, B else: print("Файл должен содержать как минимум два списка/кортежа") return None, None except Exception as e: print(f"Ошибка при чтении файла: {e}") return None, None def process_data(): """Основная функция обработки данных""" # Чтение данных из файла A, B = ctenie() if A is None or B is None: return None print(f"\nСписок A: {A}") print(f"Список B: {B}") # Применение функции 1 results = sred(A, B) avg_A, avg_B, P = results print(f"\nСреднее значение A: {avg_A:.2f}") print(f"Среднее значение B: {avg_B:.2f}") print(f"Пороговое значение P: {P:.2f}") # Применение функции 2 к спискам A и B up_A, down_A = colvo(A, P) up_B, down_B = colvo(B, P) print(f"\nДля списка A:") print(f" Элементов выше P ({P:.2f}): {up_A}") print(f" Элементов не выше P: {down_A}") print(f"\nДля списка B:") print(f" Элементов выше P ({P:.2f}): {up_B}") print(f" Элементов не выше P: {down_B}") # Построение графика plot_data(A, B, avg_A, avg_B, P) return results def plot_data(A, B, avg_A, avg_B, P): """Построение графика для списков A и B""" plt.figure(figsize=(10, 6)) # Создание индексов для элементов indices_A = range(len(A)) indices_B = range(len(B)) # Построение точек для списка A plt.scatter(indices_A, A, color='blue', label='Список A', s=50, alpha=0.7) # Построение точек для списка B plt.scatter(indices_B, B, color='red', label='Список B', s=50, alpha=0.7) # Горизонтальные линии для средних значений и порога plt.axhline(y=avg_A, color='blue', linestyle='--', alpha=0.5, label=f'Среднее A: {avg_A:.2f}') plt.axhline(y=avg_B, color='red', linestyle='--', alpha=0.5, label=f'Среднее B: {avg_B:.2f}') plt.axhline(y=P, color='green', linestyle='-', alpha=0.7, label=f'Порог P: {P:.2f}') # Настройка графика plt.xlabel('Индекс элемента') plt.ylabel('Значение элемента') plt.title('Сравнение списков A и B') plt.legend() plt.grid(True, alpha=0.3) # Сохранение графика plt.savefig('comparison_plot.png', dpi=300, bbox_inches='tight') plt.show()