Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

107 строки
3.5 KiB
Python

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