## Модуль 3 Добровольска Елизавета, А-02-23 Вариант 10 ## Задание Разработайте функцию по заданию и на ее основе создайте модуль. Создайте второй модуль, в котором должны быть инструкции для ввода/создания исходных данных для проверки работы функции, вызов функции и отображение полученных результатов. Разработайте функцию с 5 аргументами, создающую отсчеты сигнала в виде последовательности импульсов с заданными параметрами: амплитуда, продолжительность импульса, период (импульс + пауза), число отсчетов (аргументы функции). Сигнал должен быть записан в виде столбца в текстовый файл с заданным именем (5-й аргумент функции), а также возвращен в вызывающую программу в виде списка. ## Решение Для создания бинарного файла был создан модуль TEST с таким кодом: ```py import random import pickle def create_binary_file(filename="input_data.bin", len1=40, len2=50, min_val=20, max_val=45): krt1 = tuple(random.randint(min_val, max_val) for _ in range(len1)) krt2 = tuple(random.randint(min_val, max_val) for _ in range(len2)) with open(filename, 'wb') as f: pickle.dump(krt1, f) pickle.dump(krt2, f) print(f"Бинарный файл '{filename}' создан с двумя кортежами.") print(f"KRT1: {krt1[:5]}... (длина {len(krt1)})") print(f"KRT2: {krt2[:5]}... (длина {len(krt2)})") if __name__ == "__main__": create_binary_file() ``` Далее приведен текст модуля 1: ```py import math def process_tuples(tuple1, tuple2): temp_list = [] for item in tuple1: temp_list.append((item, 1)) for item in tuple2: temp_list.append((item, 2)) temp_list.sort(key=lambda x: x[0]) sps1 = [item[0] for item in temp_list] sps2 = [item[1] for item in temp_list] return sps1, sps2 def calculate_stats(numeric_list): n = len(numeric_list) mean = sum(numeric_list) / n min_val = min(numeric_list) max_val = max(numeric_list) sorted_list = sorted(numeric_list) if n % 2 == 1: median = sorted_list[n // 2] else: median = (sorted_list[n // 2 - 1] + sorted_list[n // 2]) / 2 if n <= 1: std_dev = 0.0 else: variance = sum((x - mean) ** 2 for x in numeric_list) / (n - 1) std_dev = math.sqrt(variance) return { "Среднее": mean, "Наименьшее": min_val, "Наибольшее": max_val, "Медиана": median, "Стандартное отклонение": std_dev } ``` Далее приведен текст модуля 2: ```py import os import pickle from M1 import process_tuples, calculate_stats def process_data_and_save_results(): filename = "" while not os.path.exists(filename): filename = input("Введите имя бинарного файла с данными (например, input_data.bin): ") if not os.path.exists(filename): print(f"Файл '{filename}' не найден. Попробуйте еще раз.") with open(filename, 'rb') as f: krt1 = pickle.load(f) krt2 = pickle.load(f) print(f"\nДанные успешно считаны из файла '{filename}'.") print(f"KRT1 (первые 5 элементов): {krt1[:5]}") print(f"KRT2 (первые 5 элементов): {krt2[:5]}") sps1, sps2 = process_tuples(krt1, krt2) print("\n--- Результаты функции 1 ---") print(f"SPS1 (упорядоченный список элементов): {sps1[:10]}... (длина {len(sps1)})") print(f"SPS2 (список происхождения элементов): {sps2[:10]}... (длина {len(sps2)})") stats = calculate_stats(sps1) print("\n--- Результаты функции 2 (для SPS1) ---") for key, value in stats.items(): print(f"{key}: {value:.2f}") output_filename = "Res22.txt" with open(output_filename, 'w') as f: for val1, val2 in zip(sps1, sps2): f.write(f"{val1} {val2}\n") print(f"\nРезультаты функции 1 записаны в файл '{output_filename}'.") return sps1 ``` И текст основной прогрммы M0: ```py import matplotlib.pyplot as plt from M2 import process_data_and_save_results if __name__ == "__main__": print("--- Запуск главной программы M0 ---") sps1_for_plot = process_data_and_save_results() plt.figure(figsize=(10, 6)) plt.plot(sps1_for_plot, marker='.', linestyle='-', color='skyblue', label='SPS1 Values') plt.title("График упорядоченного списка SPS1") plt.xlabel("Индекс отсчета") plt.ylabel("Значение элемента") plt.grid(True) plt.legend() plt.show() print("\n Программа завершена") ``` Вывод программы: ```py ================ RESTART: C:\Users\u522-16\Desktop\tema9\TEST.py =============== Бинарный файл 'input_data.bin' создан с двумя кортежами. KRT1: (33, 24, 43, 33, 42)... (длина 40) KRT2: (34, 33, 32, 38, 27)... (длина 50) >>> ================= RESTART: C:\Users\u522-16\Desktop\tema9\M0.py ================ --- Запуск главной программы M0 --- Введите имя бинарного файла с данными (например, input_data.bin): input_data.bin Данные успешно считаны из файла 'input_data.bin'. KRT1 (первые 5 элементов): (33, 24, 43, 33, 42) KRT2 (первые 5 элементов): (34, 33, 32, 38, 27) --- Результаты функции 1 --- SPS1 (упорядоченный список элементов): [20, 20, 20, 20, 21, 22, 23, 23, 23, 24]... (длина 90) SPS2 (список происхождения элементов): [1, 2, 2, 2, 2, 1, 1, 1, 2, 1]... (длина 90) --- Результаты функции 2 (для SPS1) --- Среднее: 33.02 Наименьшее: 20.00 Наибольшее: 45.00 Медиана: 33.00 Стандартное отклонение: 6.87 Результаты функции 1 записаны в файл 'Res22.txt'. ``` ![](pic0.png)