# Индивидуальное контрольное задание по модулю 3 Капитонов Михаил, А-02-23 ## 1) Создайте модуль М1, содержащий две функции: - функция 1: аргумент - список или кортеж SPS с элементами случайной выборки; функция должна создать новый список с рассчитанным по выборке вариационным рядом и рассчитать по нему еще один список со средним значением, медианой и оценкой стандартного отклонения; оба списка возвращаются в вызывающую программу; - функция 2: аргумент - список или кортеж SPS с элементами случайной выборки и целочисленный параметр NINT; функция должна рассчитать по выборке гистограмму с NINT интервалами разбиения диапазона изменения случайной величины; гистограмма должна быть представлена графически на экране, а также возвращена в виде списка в вызывающую программу. ## 2) Создайте еще один модуль М2, в котором должны выполняться следующие операции: - запрашивается имя текстового файла с выборкой, проверяется его наличие и при отсутствии - повторение запроса; - выборка вводится из файла и записывается в объект-список; - вызывается функция 1; - у пользователя запрашивается число NINT интервалов в гистограмме; при нарушении неравенств 1 1: std_val = statistics.stdev(variation_series) else: std_val = 0 params = [mean_val, median_val, std_val] return variation_series, params def func2(sps, nint): data = list(sps) min_val = min(data) max_val = max(data) interval_width = (max_val - min_val) / nint bins = [min_val + i * interval_width for i in range(nint + 1)] hist = [] bin_edges = [] for i in range(nint): bin_start = bins[i] bin_end = bins[i + 1] if i == nint - 1: count = sum(1 for x in data if bin_start <= x <= bin_end) else: count = sum(1 for x in data if bin_start <= x < bin_end) hist.append(count) bin_edges.append((bin_start, bin_end)) plt.figure(figsize=(10, 6)) plt.hist(data, bins=nint, edgecolor='black', alpha=0.7) plt.title(f'Гистограмма выборки ({nint} интервалов)') plt.xlabel('Значения') plt.ylabel('Частота') plt.grid(True, alpha=0.3) plt.text(0.02, 0.98, f'Интервалов: {nint}', transform=plt.gca().transAxes, verticalalignment='top', bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.5)) plt.show() histogram_result = [bin_edges, hist] return histogram_result #Модуль М2 import os import pickle from M1 import func1, func2 def process_data(): while True: filename = input("Введите имя файла с выборкой: ") if os.path.exists(filename): try: with open(filename, 'r') as file: data_str = file.read() data_list = [] for item in data_str.replace(',', ' ').split(): try: data_list.append(float(item)) if len(data_list) == 0: print("Файл не содержит числовых данных. Попробуйте другой файл.") continue break else: print() variation_series, params = func1(data_list) while True: try: nint_input = input("\nВведите число интервалов для гистограммы (1 < NINT < 12): ") nint = int(nint_input) if 1 < nint < 12: break else: print("Число интервалов должно быть больше 1 и меньше 12!") print("\nСтроится гистограмма...") histogram_result = func2(data_list, nint) while True: output_filename = input("\nВведите имя бинарного файла для сохранения результатов: ") if not output_filename: print("Имя файла не может быть пустым!") continue if not output_filename.endswith('.dat'): output_filename += '.dat' if os.path.exists(output_filename): overwrite = input(f"Файл '{output_filename}' уже существует. Перезаписать? (да/нет): ") if overwrite.lower() not in ['да', 'yes', 'y', 'д']: continue try: results = { 'variation_series': variation_series, 'statistical_params': params, 'histogram': histogram_result, 'original_data': data_list, 'nint': nint } with open(output_filename, 'wb') as f: pickle.dump(results, f) break return variation_series, params, histogram_result, data_list, nint, filename ```