# Тест по Модулю 3 Таболин Иван, А-01-23 Вариант 10 ## Задание 1) Создайте модуль М1, содержащий две функции: - функция 1: аргументы - два кортежа с целочисленными элементами, не обязательно одинаковой длины; в функции должен быть составлены два списка: SPS1 с элементами из двух входных кортежей, причем элементы SPS1 должны быть упорядочены по возрастанию величины, а также список SPS2 с элементами, равными 1 или 2, причем значение 1 берется в том случае, если соответствующий элемент в SPS1 взят из первого кортежа, а значение 2 - если из второго; - функция 2: аргумент - числовой список; по этому списку в функции должны быть вычислены среднее, наименьшее и наибольшее значения, медиана и оценка стандартного отклонения, 2) Создайте еще один модуль М2, в котором должны выполняться операции: - запрашивается и вводится имя бинарного файла с данными; проверяется наличие файла и при отсутствии - повторение запроса; - из указанного файла считываются два кортежа: KRT1 и KRT2. - применяется функция 1 к этим двум кортежам и отображаются полученные списки; - применяется функция 2 к списку SPS1 и отображаются результаты расчета; - в текстовый файл с именем Res22.txt записываются результаты расчета по функции 1 так, чтобы в каждой строке был один элемент из SPS1 и один элемент из SPS2, разделенные пробелом. 3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает в виде графика полученный из функции 1 список SPS1. 4) Подготовьте бинарный файл с двумя кортежами, содержащими, соответственно, 40 и 50 случайных целочисленных элементов из диапазона значений от 20 до 45. Проверьте работу программы с этими данными. ## Решение Модуль 1 ```py # Модуль 1 import math def func1(t1, t2): """Объединяет два кортежа и сортирует""" sps1 = [] sps2 = [] for x in t1: sps1.append(x) sps2.append(1) for x in t2: sps1.append(x) sps2.append(2) spis3 = list(zip(sps1, sps2)) spis3.sort(key=lambda x: x[0]) sps1_sorted = [x[0] for x in spis3] sps2_sorted = [x[1] for x in spis3] return sps1_sorted, sps2_sorted def func2(spis): """Вычисляет статистики списка""" sred = sum(spis) / len(spis) mini = min(spis) maxi = max(spis) spis_sorted = sorted(spis) n = len(spis_sorted) if n % 2 == 1: med = spis_sorted[n // 2] else: med = (spis_sorted[n // 2 - 1] + spis_sorted[n // 2]) / 2 if len(spis) > 1: kv_sum = sum((x - sred) ** 2 for x in spis) std = math.sqrt(kv_sum / (len(spis) - 1)) else: std = 0 return sred, mini, maxi, med, std ``` Модуль 2 ```py # Модуль 2 import pickle import os import Mod1 def read_file(): while True: file_name = input("Введите имя файла: ") if os.path.exists(file_name): break print("Файл не найден! Попробуйте снова.") with open(file_name, 'rb') as f: KRT1, KRT2 = pickle.load(f) sps1, sps2 = Mod1.func1(KRT1, KRT2) print("SPS1:", sps1) print("SPS2:", sps2) sred, mini, maxi, med, std = Mod1.func2(sps1) print('Статистики SPS1:') print("Среднее:" ,sred) print("Минимум:", mini) print("Максимум:", maxi) print("Медиана:", med) print("Ст.отклонение:", std) with open('Res22.txt', 'w') as f: f.write("sps1 sps2\n") for i in range(len(sps1)): f.write(str(sps1[i])) f.write(' ') f.write(str(sps2[i])) f.write('\n') return sps1, sps2 ``` Модуль 0 ```py # Модуль 0 import Mod2 import matplotlib.pyplot as plt sps1, sps2 = Mod2.read_file() plt.plot(sps1) plt.title('График sps1') plt.grid(True) plt.show() ``` Генерация входных данных ```py import pickle import random as rn krt1=tuple(rn.randint(20,45) for _ in range(40)) krt2=tuple(rn.randint(20,45) for _ in range(50)) file=open('input.bin','wb') pickle.dump((krt1,krt1),file) file.close() ``` Выполнение ```py import Mod0 Введите имя файла: input.txt Файл не найден! Попробуйте снова. Введите имя файла: input.bin SPS1: [20, 20, 21, 21, 21, 21, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 34, 34, 34, 34, 34, 34, 34, 34, 36, 36, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 40, 40, 42, 42, 42, 42, 43, 43, 43, 43, 44, 44, 44, 44, 45, 45, 45, 45] SPS2: [1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 1, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2] Статистики SPS1: Среднее: 33.375 Минимум: 20 Максимум: 45 Медиана: 33.0 Ст.отклонение: 7.171277096157519 ``` ![График sps1](Ris2.png)