# Общее контрольное задание по теме 8 Мамакин Ярослав, А-02-23 ## Задание Общее контрольное задание. Разработайте программу, состоящую из трех модулей: - Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Получен-ный список должен возвращаться в вызывающую программу. - Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу. - Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. За-тем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки. ## Решение Модуль 1 ```py def readList(filename): numList = [] with open(filename, "r") as file: for line in file: for num in line.strip().split(): numList.append(float(num)) return numList ``` Модуль 2 ```py import math def calculateCorrelation(list1, list2): n = min(len(list1), len(list2)) mean1 = sum(list1[:n]) / n mean2 = sum(list2[:n]) / n numerator = 0 sum1 = 0 sum2 = 0 for i in range(n): d1 = list1[i] - mean1 d2 = list2[i] - mean2 numerator += d1 * d2 sum1 += d1 ** 2 sum2 += d2 ** 2 denominator = math.sqrt(sum1 * sum2) if denominator == 0: print("деление на ноль") return None return numerator / denominator ``` Модуль 3 ```py import os, mod_s, mod_cc for i in range(1, 3): while True: filename = os.path.abspath(input(f"Введите имя {i}-го файла: ")) if not os.path.isfile(filename): print("Ошибка: введено неверное имя файла") continue newList = mod_s.readList(filename) if not newList: print("Ошибка: в данном файле содержится пустой список значений") continue globals()[f"list{i}"] = newList break correlation = mod_cc.calculateCorrelation(list1, list2) if correlation is not None: print(f"Коэффициент корреляции равен: {correlation}") ``` ```py >>> import mod_m Введите имя 1-го файла: file1.txt Введите имя 2-го файла: file2.txt Коэффициент корреляции равен: -0.1888141941724601 ```