Этот коммит содержится в:
2025-11-29 11:18:39 +03:00
родитель c6be3ba73b
Коммит 761f494d9d

Просмотреть файл

@@ -1,162 +1,85 @@
\# Общее контрольное задание по теме 8 # Общее контрольное задание по теме 8
Володин Денис, А-02-23 Володин Денис, А-02-23
## Задание
\## Задание
Разработайте программу, состоящую из трех модулей: Разработайте программу, состоящую из трех модулей:
\- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу. - Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу.
\- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу. - Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
\- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки. - Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы. Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
## Решение
\## Решение
```py ```py
#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(a1, a2): def correlation(a1, a2):
  n = min(len(a1), len(a2))   n = min(len(a1), len(a2))
  sum1 = sum(a1)   sum1 = sum(a1)
  sum2 = sum(a2)   sum2 = sum(a2)
  sum1sq = sum(now \*\* 2 for now in a1)   sum1sq = sum(now \*\* 2 for now in a1)
  sum2sq = sum(now \*\* 2 for now in a2)   sum2sq = sum(now \*\* 2 for now in a2)
  sum12 = sum(x \* y for x, y in zip(a1, a2))   sum12 = sum(x \* y for x, y in zip(a1, a2))
  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 6.0 7.0 8.0 9.0 10.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0
data2.txt data2.txt
10.0 9.0 9.5 8.0 7.0 5.0 4.0 2.0 1.0 7.5 10.0 9.0 9.5 8.0 7.0 5.0 4.0 2.0 1.0 7.5
Введите имя первого файла: data1.txt Введите имя первого файла: data1.txt
Введите имя второго файла: data2.txt Введите имя второго файла: data2.txt
Коэффициент корреляции: -0.76 Коэффициент корреляции: -0.76
Process finished with exit code 0 Process finished with exit code 0
```
``