From 44cb4ff1d047c3ddcd3b63f334cb7ff01169e18a Mon Sep 17 00:00:00 2001 From: KuzmenkoEA Date: Sat, 13 Dec 2025 13:09:40 +0000 Subject: [PATCH] =?UTF-8?q?=D0=BE=D0=BA=D0=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEMA8/task.md | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 TEMA8/task.md diff --git a/TEMA8/task.md b/TEMA8/task.md new file mode 100644 index 0000000..439d886 --- /dev/null +++ b/TEMA8/task.md @@ -0,0 +1,89 @@ +## Общее контрольное задание по Теме 8 + +Кузьменко Елена, А-02-23 + +## Задание + + Разработайте программу, состоящую из трех модулей: + 1) Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу. + 2) Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу. + 3) Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки. + Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы. + +## Решение + +### 1) Модуль 1 + +```py +# Модуль 1 OKZ1.py +def file(filename): + num = [] + 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: + num.append(float(part)) # преобразуем часть в число и добавляем в список + + return num +``` + +### 2) Модуль 2 + +```py +# Модуль 2 OKZ2.py +def corr(list1, list2): + n = len(list1) if len(list1) < len(list2) else len(list2) + if n < 2: + return 0.0 + sred1 = sum(list1[:n]) / n + sred2 = sum(list2[:n]) / n + s1 = s2 = s3 = 0.0 + for i in range(n): + d1 = list1[i] - sred1 # отклонение от среднего для первого списка + d2 = list2[i] - sred2 # отклонение от среднего для второго списка + s1 += d1 * d2 # сумма произведений отклонений + s2 += d1 * d1 # сумма квадратов отклонений первого + s3 += d2 * d2 # сумма квадратов отклонений второго + if s2 == 0 or s3 == 0: + return 0.0 + return s1 / ((s2 * s3) ** 0.5) +``` + +### 3) Модуль 3 + +```py +# Модуль 3 OKZ3.py +import OKZ1, OKZ2 +print("Введите имя первого файла:") +file1 = input() +print("Введите имя второго файла:") +file2 = input() +num1 = OKZ1.file(file1) +num2 = OKZ1.file(file2) +corr0 = OKZ2.corr(num1, num2) +corr0 = round(corr0, 3) +print("Коэффициент корреляции:", corr0) +``` + +### Проверка + +Содержимое файла task_test1.txt: + 112 45 102 8 -23 6 12.2 9 -9.2 + +Содержимое файла task_test2.txt: + 32 -0.5 12.3 9 10 98 8 12 + +Запуск Модуля 3: +```py +=========== RESTART: C:/Users/vaffl/Desktop/Учеба/ПОАС/TEMA8/OKZ3.py =========== +Введите имя первого файла: +task_test1.txt +Введите имя второго файла: +task_test2.txt +Коэффициент корреляции: -0.062 +``` \ No newline at end of file