# Общее контрольное задание по теме 8 Похил Анастасия, А-02-23 ## Задание Разработайте программу, состоящую из трех модулей: - Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу. - Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу. - Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки. Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы. ## Решение ```py #okz1.py def read_numbers_from_file(filename): numbers = [] file = open(filename, 'r') lines = file.readlines() file.close() for line in lines: line = line.strip() if line: parts = line.split() for part in parts: numbers.append(float(part)) return numbers #okz2.py def correlation_coefficient(list1, list2): length1 = len(list1) length2 = len(list2) min_length = min(length1, length2) if min_length < 2: return 0.0 x = list1[:min_length] y = list2[:min_length] sum_x = 0.0 sum_y = 0.0 for i in range(min_length): sum_x += x[i] sum_y += y[i] average_x = sum_x / min_length average_y = sum_y / min_length top = 0.0 sum_sq_x = 0.0 sum_sq_y = 0.0 for i in range(min_length): diff_x = x[i] - average_x diff_y = y[i] - average_y top += diff_x * diff_y sum_sq_x += diff_x * diff_x sum_sq_y += diff_y * diff_y if sum_sq_x == 0.0 or sum_sq_y == 0.0: return 0.0 bottom = (sum_sq_x * sum_sq_y) ** 0.5 result = top / bottom return result #okz3.py import okz1 import okz2 def main(): print("Введите имя первого файла:") file_name1 = input() print("Введите имя второго файла:") file_name2 = input() numbers1 = module1.read_numbers_from_file(file_name1) numbers2 = module1.read_numbers_from_file(file_name2) correlation = module2.correlation_coefficient(numbers1, numbers2) correlation = round(correlation, 3) print("Коэффициент корреляции:", correlation) #Проверка data1.txt 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 data2.txt 10.0 9.0 9.5 8.0 7.0 5.0 4.0 2.0 1.0 7.5 Введите имя первого файла: data1.txt Введите имя второго файла: data2.txt Коэффициент корреляции: -0.76 Process finished with exit code 0 ```