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

3.3 KiB

Общее контрольное задание по теме 8

Бушманов А.С. А-01-23

Задание:

Разработайте программу, состоящую из трех модулей:

  • Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу.
  • Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
  • Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки. Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.

Решение:

#1 
def read_file(filename):
    numbers = []
    f = open(filename, "r", encoding="utf-8")

    for line in f:
        parts = line.split()          # разбиваем строку по пробелам
        for p in parts:
            numbers.append(float(p))  # добавляем число в список

    f.close()
    return numbers
#2
import math

def correlation(l1, l2):
    n = min(len(l1), len(l2))
    x = l1[:n]
    y = l2[:n]

    sx = sum(x)
    sy = sum(y)

    sxx = 0
    syy = 0
    sxy = 0

    for i in range(n):
        sxx += x[i] * x[i]
        syy += y[i] * y[i]
        sxy += x[i] * y[i]

    num = n * sxy - sx * sy
    den = math.sqrt((n * sxx - sx * sx) * (n * syy - sy * sy))

    return num / den
#3
import module1
import module2

file1 = input("Введите имя первого файла: ")
file2 = input("Введите имя второго файла: ")

a = module1.read_file(file1)
b = module1.read_file(file2)

r = module2.correlation(a, b)

print(f"Coef cor: {r:.3f}")

Ответ:

import module3.py
Введите имя первого файла: data1.txt
Введите имя второго файла: data2.txt
Coef cor: 0.105

Файлы:

data1.txt

2 7 1
8 2
8 1 8
2 8

data2.txt

3 1 4 1
5 9
2 6 5
3