diff --git a/TEMA9/test.md b/TEMA9/test.md new file mode 100644 index 0000000..c2194d9 --- /dev/null +++ b/TEMA9/test.md @@ -0,0 +1,129 @@ +# Идивидуальное контрольное задание по ТЕМЕ №9 +Криштул Александр, А-03-23 + +## Задание + +1) Создайте модуль М1, содержащий две функции: + +- функция 1: аргументы - списки А и В с необязательно равными числами элементов; в функции по спискам вычисляются и возвращается список SPS со средними значениями МА, МВ, оценками дисперсий DА,DВ, а также с наибольшим и наименьшим значениями по совокупности данных из обоих списков; + +- функция 2 : аргументы - числовое значение х и списки А и В; в функции по спискам находится элемент z, для которого значение |z-x| будет наименьшим, и возвращается символьное значение А, если этот элемент будет найден в списке А, или В, если он найдется в В. + +2) Создайте еще один модуль М2, в котором должны выполняться операции: + +- запрашивается и вводится имя бинарного файла, проверяется его наличие, и если он существует, то из него считываются два списка: А и В; + +- с применением функции 1 рассчитываются и отображаются параметры данных; + +- у пользователя запрашивается значение х; с применением функции 2 определяется символ, указывающий имя списка с наиболее "близким" значением и отображается на экране; эта операция повторяется до тех пор, пока пользователь в ответ на запрос не введет пустое значение. + +3) Создайте модуль М0 - главную программу, которая вызывает М2 и записывает список SPS, полученный в функции 1 в текстовый файл Res000.txt. + +4) Для проверки программы запишите в бинарный файл с некоторым именем два списка: + +А: -440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665 + +В: 3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993 + +и введите контрольные значения х=-100 и х= 3500. + + + + + +## Решение + +```py +# M1 + +import statistics +import math + +def func1(A, B): + combined = A + B + + MA = statistics.mean(A) + MB = statistics.mean(B) + + DA = statistics.variance(A) + DB = statistics.variance(B) + + max_val = max(combined) + min_val = min(combined) + + SPS = [MA, MB, DA, DB, max_val, min_val] + return SPS + +def func2(x, A, B): + + elements = [(val, 'A') for val in A] + [(val, 'B') for val in B] + + closest_element = min(elements, key=lambda item: abs(item[0] - x)) + + return closest_element[1] +``` + +```py +# M2 +import os +import pickle +from M1 import func1, func2 + +def run_module2(): + + filename = input("Введите имя бинарного файла: ") + + with open(filename, 'rb') as f: + data = pickle.load(f) + A = data.get('A', []) + B = data.get('B', []) + + SPS = func1(A, B) + + print("\n" + "="*50) + print("Статистические параметры:") + print(f"Среднее значение списка A (MA): {SPS[0]}") + print(f"Среднее значение списка B (MB): {SPS[1]}") + print(f"Дисперсия списка A (DA): {SPS[2]}") + print(f"Дисперсия списка B (DB): {SPS[3]}") + print(f"Наибольшее значение (max): {SPS[4]}") + print(f"Наименьшее значение (min): {SPS[5]}") + print("="*50) + + + while True: + x_input = input("Введите значение x: ").strip() + + x = float(x_input) + result = func2(x, A, B) + + if result: + print(f"Наиболее близкое значение находится в списке: {result}") + return SPS, A, B + else: + break +``` + +```py +# M0 +from M2 import run_module2 + +def main(): + SPS, A, B = run_module2() + + if SPS: + with open("Res000.txt", "w") as f: + f.write(f"MA (среднее A) = {SPS[0]}\n") + f.write(f"MB (среднее B) = {SPS[1]}\n") + f.write(f"DA (дисперсия A) = {SPS[2]}\n") + f.write(f"DB (дисперсия B) = {SPS[3]}\n") + f.write(f"Максимальное значение = {SPS[4]}\n") + f.write(f"Минимальное значение = {SPS[5]}\n") + + else: + print("Нет данных для записи в файл") + +main() +``` + + \ No newline at end of file