# Общее контрольное задание по теме 8 ## Задание: Разработайте программу, состоящую из трех модулей: - Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу. - Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу. - Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки. Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы. ## Решение: Модуль 1: ``` >>>def read_file(filename): numbers = [] with open(filename, 'r', encoding='utf-8') as file: for line in file: numbers.extend(map(float, line.split())) return numbers ``` Модуль 2: ``` >>>import math >>>def correlation(l1, l2): n = min(len(l1), len(l2)) sum1 = sum(l1) sum2 = sum(l2) x = l1[:n] y = l2[:n] # Суммы sum_x = sum(x) sum_y = sum(y) sum_x_sq = sum(xi * xi for xi in x) sum_y_sq = sum(yi * yi for yi in y) sum_xy = sum(x[i] * y[i] for i in range(n)) numerator = n * sum_xy - sum_x * sum_y denominator_x = n * sum_x_sq - sum_x ** 2 denominator_y = n * sum_y_sq - sum_y ** 2 # Проверка на нулевой знаменатель if denominator_x <= 0 or denominator_y <= 0: print("Одна из последовательностей имеет нулевую дисперсию.") return None denominator = (denominator_x * denominator_y) ** 0.5 correlation = numerator / denominator # Проверка на корректность значения correlation = max(-1.0, min(1.0, correlation)) return correlation ``` Модуль 3: ``` >>>import Module1 >>>import Module2 >>>file1 = input("Введите имя первого файла: ") >>>file2 = input("Введите имя второго файла: ") # Читаем данные из файлов >>>data1 = Module1.read_file(file1) >>>data2 = Module1.read_file(file2) # Рассчитываем корреляцию >>>correlation_result = Module2.correlation(data1, data2) >>>print(correlation_result) # Выводим результат >>>print(f"Coef cor: {correlation_result:.3f}") ``` Введите имя первого файла: data1.txt Введите имя второго файла: data2.txt 0.9907674518545938 Coef cor: 0.991