форкнуто от main/python-labs
Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
107 строки
3.5 KiB
Python
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() |