import os import struct import math import matplotlib.pyplot as plt import M1 def read_file(): "Чтение файла с выборкой" while True: filename = input("Введите имя файла: ").strip() if not filename.endswith('.txt'): filename += '.txt' if os.path.exists(filename): try: with open(filename, 'r', encoding='utf-8') as file: content = file.read() numbers = [] for part in content.split(): cleaned = part.strip(',;:') try: numbers.append(float(cleaned)) except ValueError: continue if numbers: print(f"Прочитано {len(numbers)} чисел из файла {filename}") return numbers else: print("Файл не содержит чисел") except Exception as e: print(f"Ошибка при чтении файла: {e}") else: print(f"Файл {filename} не найден") def create_histogram(data): "Создание и отображение гистограммы" if not data: return # Определяем количество интервалов num_bins = min(15, int(math.sqrt(len(data)))) plt.figure(figsize=(10, 6)) plt.hist(data, bins=num_bins, edgecolor='black', alpha=0.7) plt.title('Гистограмма выборки') plt.xlabel('Значения') plt.ylabel('Частота') plt.grid(True, alpha=0.3) plt.savefig('histogram.png') print("Гистограмма сохранена") plt.show() def save_to_binary(stats, asymmetry): "Сохранение результатов в бинарный файл" try: with open('Res3737.bin', 'wb') as file: # Записываем все 5 значений for value in [stats[0], stats[1], stats[2], stats[3], asymmetry]: file.write(struct.pack('d', value)) print("Результаты сохранены в файл 'Res3737.bin'") except Exception as e: print(f"Ошибка при сохранении в файл: {e}") def main(): "Основная функция модуля M2" sample = read_file() if not sample: print("Не удалось получить выборку. Программа завершена.") return print(f"\nХарактеристики выборки:") print(f"Размер выборки: {len(sample)}") print(f"Минимальное значение: {min(sample):.4f}") print(f"Максимальное значение: {max(sample):.4f}") # Расчет статистик mean, variance, std_dev, median = M1.f1(sample) asymmetry_coeff = M1.f2(sample) print(f"\nРезультаты расчетов:") print(f"Математическое ожидание: {mean:.4f}") print(f"Дисперсия: {variance:.4f}") print(f"Стандартное отклонение: {std_dev:.4f}") print(f"Медиана: {median:.4f}") print(f"Коэффициент асимметрии: {asymmetry_coeff:.4f}") create_histogram(sample) save_to_binary((mean, variance, std_dev, median), asymmetry_coeff) return sample, mean, variance, std_dev, median, asymmetry_coeff if __name__ == "__main__": main()