From 3063b8743778206e0b9ca7f64af77febda47464c Mon Sep 17 00:00:00 2001 From: MelnikovDM Date: Mon, 15 Dec 2025 15:15:41 +0300 Subject: [PATCH] Add new file --- TEMA8/task.md | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 TEMA8/task.md diff --git a/TEMA8/task.md b/TEMA8/task.md new file mode 100644 index 0000000..b7baac5 --- /dev/null +++ b/TEMA8/task.md @@ -0,0 +1,77 @@ +# Общее контрольное задание по теме 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