Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

86 строки
3.5 KiB
Markdown

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

# Общее контрольное задание по теме 8
Володин Денис, А-02-23
## Задание
Разработайте программу, состоящую из трех модулей:
- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу.
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
## Решение
```py
#okz1.py
def reading (file):
  nums = []
  with open(file, 'r') as file:
  for line in file:
  nums.extend(map(float, line.split()))
  return nums
#okz2.py
import math
def correlation(a1, a2):
  n = min(len(a1), len(a2))
  sum1 = sum(a1)
  sum2 = sum(a2)
  sum1sq = sum(now ** 2 for now in a1)
  sum2sq = sum(now ** 2 for now in a2)
  sum12 = sum(x * y for x, y in zip(a1, a2))
  part1 = n * sum12 - sum1 * sum2
  part2 = math.sqrt((n * sum1sq - sum1 ** 2) * (n * sum2sq - sum2 ** 2))
  try:
  corr = part1 / part2
  return corr
  except ZeroDivisionError:
  print("Ошибка деления на ноль!")
  return
#okz3.py
from okz1 import reading
from okz2 import correlation
file1 = input("Введите имя первого файла: ")
file2 = input("Введите имя второго файла: ")
arr1 = reading(file1)
arr2 = reading(file2)
if arr1 is None or arr2 is None:
  print("Не удалось считать данные из файлов.")
else:
  corr = correlation(arr1, arr2)
  if corr is not None:
  print(f"Коэффициент корреляции: {corr:.2f}")
#Проверка
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
```