Изменил(а) на 'TEMA8/task.md'

main
TimoshenkoAA 2 месяцев назад
Родитель 1f2b5b91e2
Сommit 0d90a11185

@ -1,75 +1,75 @@
# ОБЩЕЕ КОНТРОЛЬНОЕ ЗАДАНИЕ по Теме 8 # ОБЩЕЕ КОНТРОЛЬНОЕ ЗАДАНИЕ по Теме 8
Выполнил: Тимошенко А.А. Проверил: Козлюк Д.А. Выполнил: Тимошенко А.А. Проверил: Козлюк Д.А.
## Задание ## Задание
Разработайте программу, состоящую из трех модулей: Разработайте программу, состоящую из трех модулей:
- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколь-ко на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полу-ченный список должен возвращаться в вызывающую программу. - Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколь-ко на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полу-ченный список должен возвращаться в вызывающую программу.
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу. - Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. За-тем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки. - Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. За-тем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы. Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
## Решение ## Решение
okz1.py okz1.py
``` ```
def reading (file): def reading (file):
nums = [] nums = []
with open(file, 'r') as file: with open(file, 'r') as file:
for line in file: for line in file:
nums.extend(map(float, line.split())) nums.extend(map(float, line.split()))
return nums return nums
``` ```
okz2.py okz2.py
``` ```
import math import math
def correlation(l1, l2): def correlation(l1, l2):
n = min(len(l1), len(l2)) n = min(len(l1), len(l2))#определяю длину для расчёта — берётся минимальная длина из двух списков
sum1 = sum(l1) sum1 = sum(l1)
sum2 = sum(l2) sum2 = sum(l2)
sum1sq = sum(now ** 2 for now in l1) sum1sq = sum(now ** 2 for now in l1)#суммы квадратов элементов каждого списка
sum2sq = sum(now ** 2 for now in l2) sum2sq = sum(now ** 2 for now in l2)
sum12 = sum(x * y for x, y in zip(l1, l2)) sum12 = sum(x * y for x, y in zip(l1, l2))
part1 = n * sum12 - sum1 * sum2 part1 = n * sum12 - sum1 * sum2
part2 = math.sqrt((n * sum1sq - sum1 ** 2) * (n * sum2sq - sum2 ** 2)) part2 = math.sqrt((n * sum1sq - sum1 ** 2) * (n * sum2sq - sum2 ** 2))#расчёт числителя и знаменателя формулы корреляции Пирсона
try: try:
corr = part1 / part2 corr = part1 / part2
return corr return corr#коэф корреляции
except ZeroDivisionError: except ZeroDivisionError:
print("Ошибка деления на ноль!") print("Ошибка деления на ноль!")
return return
``` ```
okz3.py okz3.py
``` ```
from okz1 import reading from okz1 import reading
from okz2 import correlation from okz2 import correlation
file1 = input("Введите имя первого файла: ") file1 = input("Введите имя первого файла: ")
file2 = input("Введите имя второго файла: ") file2 = input("Введите имя второго файла: ")
arr1 = reading(file1) arr1 = reading(file1)
arr2 = reading(file2) arr2 = reading(file2)
if arr1 is None or arr2 is None: if arr1 is None or arr2 is None:
print("Не удалось считать данные из файлов.") print("Не удалось считать данные из файлов.")
else: else:
corr = correlation(arr1, arr2) corr = correlation(arr1, arr2)
if corr is not None: if corr is not None:
print(f"Коэффициент корреляции: {corr:.2f}") print(f"Коэффициент корреляции: {corr:.2f}")
``` ```
Содержимое файлов: Содержимое файлов:
``` ```
data1.txt data1.txt
1.0 2.0 3.0 4.0 5.0 1.0 2.0 3.0 4.0 5.0
6.0 7.0 8.0 9.0 10.0 6.0 7.0 8.0 9.0 10.0
data2.txt data2.txt
10.0 9.5 9.0 8.5 8.0 10.0 9.5 9.0 8.5 8.0
7.5 7.0 6.5 6.0 1.0 7.5 7.0 6.5 6.0 1.0
``` ```
``` ```
================ RESTART: C:/Users/mapon/OneDrive/Рабочий стол/ПО АС/ТЕМА8/okz3.py ================ ================ RESTART: C:/Users/mapon/OneDrive/Рабочий стол/ПО АС/ТЕМА8/okz3.py ================
Введите имя первого файла: data1.txt Введите имя первого файла: data1.txt
Введите имя второго файла: data2.txt Введите имя второго файла: data2.txt
Коэффициент корреляции: -0.88 Коэффициент корреляции: -0.88
``` ```
Загрузка…
Отмена
Сохранить