diff --git a/TEMA9/Res22.txt b/TEMA9/Res22.txt new file mode 100644 index 0000000..d50eaec --- /dev/null +++ b/TEMA9/Res22.txt @@ -0,0 +1,90 @@ +20 1 +20 2 +20 2 +20 2 +21 2 +22 1 +23 1 +23 1 +23 2 +24 1 +24 1 +24 2 +24 2 +25 1 +26 1 +26 1 +26 2 +26 2 +26 2 +27 2 +27 2 +28 1 +28 1 +28 2 +29 2 +29 2 +30 1 +30 1 +30 1 +30 2 +30 2 +31 1 +31 1 +31 1 +31 1 +31 2 +31 2 +32 1 +32 1 +32 2 +32 2 +32 2 +32 2 +33 1 +33 1 +33 1 +33 1 +33 2 +33 2 +33 2 +33 2 +34 2 +34 2 +34 2 +35 2 +35 2 +36 1 +36 1 +36 1 +37 2 +37 2 +37 2 +38 1 +38 1 +38 1 +38 2 +38 2 +38 2 +39 1 +39 1 +39 2 +39 2 +40 1 +40 2 +41 1 +41 2 +41 2 +42 1 +42 1 +42 2 +42 2 +42 2 +43 1 +43 2 +44 1 +44 2 +44 2 +45 1 +45 1 +45 2 diff --git a/TEMA9/TEST.py b/TEMA9/TEST.py new file mode 100644 index 0000000..c498869 --- /dev/null +++ b/TEMA9/TEST.py @@ -0,0 +1,16 @@ +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() diff --git a/TEMA9/pic0.png b/TEMA9/pic0.png new file mode 100644 index 0000000..60f20fb Binary files /dev/null and b/TEMA9/pic0.png differ diff --git a/TEMA9/test.txt b/TEMA9/test.txt new file mode 100644 index 0000000..b727c2c --- /dev/null +++ b/TEMA9/test.txt @@ -0,0 +1,188 @@ +## Модуль 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) + + + + + +