diff --git a/TEMA8/data.txt b/TEMA8/data.txt new file mode 100644 index 0000000..c28bd42 --- /dev/null +++ b/TEMA8/data.txt @@ -0,0 +1,3 @@ +10 20 30.5 +40 50 60 +70 80 \ No newline at end of file diff --git a/TEMA8/data2.txt b/TEMA8/data2.txt new file mode 100644 index 0000000..51db088 --- /dev/null +++ b/TEMA8/data2.txt @@ -0,0 +1,4 @@ +15.2 20.1 25.3 18.4 22.7 +19.6 14.8 13.5 24.9 28.3 +21.4 23.6 27.9 16.8 22.2 +14.7 29.5 21.8 25.1 17.3 \ No newline at end of file diff --git a/TEMA8/task.md b/TEMA8/task.md new file mode 100644 index 0000000..c0000dd --- /dev/null +++ b/TEMA8/task.md @@ -0,0 +1,70 @@ +# Общее контрольное задание + +Зеленкина Катерина, А-02-23 + +## Задание +Разработайте программу, состоящую из трех модулей: +1. Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу. +2. Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу. +3. Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки. +Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы. + + +## Решение +Модуль 1 +```py +def mod1(fn): + numbers = [] + + with open(fn, 'r') as f: + for line in f: + # Разбиваем строку на элементы + elements = line.strip().split() + # Преобразуем каждый элемент в число + for element in elements: + number = float(element) + numbers.append(number) + + return numbers + +# Пример использования +result = mod1("data.txt") +print('Список файла1: ', result) + +Список файла1: [10.0, 20.0, 30.5, 40.0, 50.0, 60.0, 70.0, 80.0] +``` + +Модуль 2 +```py +import statistics +def mod2(list1, list2): + n = min(len(list1), len(list2)) + if n == 0: + return 0.0 + x = list1[:n] + y = list2[:n] + + cor = statistics.correlation(x, y) + return cor +``` + +Модуль 3 +```py +import task1 +import task2 + +file1 = input("Первый файл: ") +file2 = input("Второй файл: ") + +list1 = task1.mod1(file1) +list2 = task1.mod1(file2) + +result = task2.mod2(list1, list2) + +print(f"Коэффициент корреляции: {result:.3f}") + + +Первый файл: data.txt +Второй файл: data2.txt +Коэффициент корреляции: -0.361 +``` diff --git a/TEMA8/task1.py b/TEMA8/task1.py new file mode 100644 index 0000000..2f7ee79 --- /dev/null +++ b/TEMA8/task1.py @@ -0,0 +1,17 @@ +def mod1(fn): + numbers = [] + + with open(fn, 'r') as f: + for line in f: + # Разбиваем строку на элементы + elements = line.strip().split() + # Преобразуем каждый элемент в число + for element in elements: + number = float(element) + numbers.append(number) + + return numbers + +# Пример использования +result = mod1("data.txt") +print('Список файла1: ', result) diff --git a/TEMA8/task2.py b/TEMA8/task2.py new file mode 100644 index 0000000..f007bdb --- /dev/null +++ b/TEMA8/task2.py @@ -0,0 +1,10 @@ +import statistics +def mod2(list1, list2): + n = min(len(list1), len(list2)) + if n == 0: + return 0.0 + x = list1[:n] + y = list2[:n] + + cor = statistics.correlation(x, y) + return cor diff --git a/TEMA8/task3.py b/TEMA8/task3.py new file mode 100644 index 0000000..6304cce --- /dev/null +++ b/TEMA8/task3.py @@ -0,0 +1,12 @@ +import task1 +import task2 + +file1 = input("Первый файл: ") +file2 = input("Второй файл: ") + +list1 = task1.mod1(file1) +list2 = task1.mod1(file2) + +result = task2.mod2(list1, list2) + +print(f"Коэффициент корреляции: {result:.3f}")