Незначительные изменения

Этот коммит содержится в:
2025-12-07 16:26:26 +03:00
родитель 263c3dcb17
Коммит 6dcf8be3d3
15 изменённых файлов: 1186 добавлений и 56 удалений

46
TEMA8/Control/m1.py Обычный файл
Просмотреть файл

@@ -0,0 +1,46 @@
# module1.py - Модуль для чтения числового списка из файла
def read_numbers_from_file(filename):
"""
Считывает числовой список из текстового файла.
Аргументы:
filename (str): имя файла для чтения
Возвращает:
list: список чисел (float)
"""
numbers = []
try:
with open(filename, 'r', encoding='utf-8') as file:
for line in file:
# Разделяем строку на элементы по пробелам
elements = line.strip().split()
# Преобразуем каждый элемент в число и добавляем в список
for element in elements:
try:
number = float(element)
numbers.append(number)
except ValueError:
print(f"Внимание: элемент '{element}' в файле '{filename}' не является числом и будет пропущен")
except FileNotFoundError:
print(f"Ошибка: файл '{filename}' не найден")
return []
except IOError:
print(f"Ошибка ввода-вывода при чтении файла '{filename}'")
return []
print(f"Прочитано {len(numbers)} чисел из файла '{filename}'")
return numbers
# Тестирование модуля (если запускается напрямую)
if __name__ == "__main__":
# Тестовая проверка
test_filename = input("Введите имя файла для теста: ")
result = read_numbers_from_file(test_filename)
print(f"Результат: {result}")
print(f"Количество элементов: {len(result)}")

66
TEMA8/Control/m2.py Обычный файл
Просмотреть файл

@@ -0,0 +1,66 @@
# module2.py - Модуль для расчёта коэффициента корреляции
import math
def calculate_correlation(list1, list2):
"""
Вычисляет коэффициент корреляции Пирсона между двумя списками.
Аргументы:
list1 (list): первый список чисел
list2 (list): второй список чисел
Возвращает:
float: коэффициент корреляции или None при ошибке
"""
# Проверяем, что списки не пустые
if not list1 or not list2:
print("Ошибка: один из списков пустой")
return None
# Берем минимальную длину из двух списков
n = min(len(list1), len(list2))
if n < 2:
print("Ошибка: для расчёта корреляции нужно хотя бы 2 элемента")
return None
# Берем только первые n элементов из каждого списка
x = list1[:n]
y = list2[:n]
# Выводим информацию о количестве используемых элементов
if len(list1) != len(list2):
print(f"Внимание: списки разной длины. Используются первые {n} элементов")
# Вычисляем суммы
sum_x = sum(x)
sum_y = sum(y)
sum_xy = sum(x[i] * y[i] for i in range(n))
sum_x2 = sum(x[i] * x[i] for i in range(n))
sum_y2 = sum(y[i] * y[i] for i in range(n))
# Вычисляем коэффициент корреляции
numerator = n * sum_xy - sum_x * sum_y
denominator = math.sqrt((n * sum_x2 - sum_x * sum_x) * (n * sum_y2 - sum_y * sum_y))
if denominator == 0:
print("Ошибка: знаменатель равен нулю (нет вариации данных)")
return None
correlation = numerator / denominator
return correlation
# Тестирование модуля (если запускается напрямую)
if __name__ == "__main__":
# Тестовые данные
test_list1 = [1, 2, 3, 4, 5]
test_list2 = [2, 4, 6, 8, 10] # Положительная корреляция
# test_list2 = [5, 4, 3, 2, 1] # Отрицательная корреляция
result = calculate_correlation(test_list1, test_list2)
if result is not None:
print(f"Коэффициент корреляции: {result:.4f}")
print(f"Коэффициент корреляции (округленный): {round(result, 3)}")

71
TEMA8/Control/m3.py Обычный файл
Просмотреть файл

@@ -0,0 +1,71 @@
# module3.py - Главный модуль программы
import module1
import module2
def main():
print("=" * 60)
print("ПРОГРАММА ДЛЯ РАСЧЕТА КОЭФФИЦИЕНТА КОРРЕЛЯЦИИ")
print("=" * 60)
# Запрашиваем имена файлов
filename1 = input("Введите имя первого файла с данными: ")
filename2 = input("Введите имя второго файла с данными: ")
print("-" * 60)
# Чтение данных из файлов
print("Чтение данных из файлов...")
list1 = module1.read_numbers_from_file(filename1)
list2 = module1.read_numbers_from_file(filename2)
if not list1 or not list2:
print("Ошибка: не удалось прочитать данные из одного из файлов")
return
print("-" * 60)
print(f"Первый список: {len(list1)} элементов")
print(f"Пример первых 5 элементов: {list1[:5]}")
print()
print(f"Второй список: {len(list2)} элементов")
print(f"Пример первых 5 элементов: {list2[:5]}")
print("-" * 60)
# Расчет коэффициента корреляции
print("Расчет коэффициента корреляции...")
correlation = module2.calculate_correlation(list1, list2)
print("-" * 60)
if correlation is not None:
print(f"Коэффициент корреляции: {correlation:.6f}")
print(f"Коэффициент корреляции (округленный до 3 знаков): {round(correlation, 3)}")
# Интерпретация результата
print("\nИнтерпретация:")
abs_corr = abs(correlation)
if abs_corr < 0.3:
print(" Очень слабая корреляция")
elif abs_corr < 0.5:
print(" Слабая корреляция")
elif abs_corr < 0.7:
print(" Умеренная корреляция")
elif abs_corr < 0.9:
print(" Сильная корреляция")
else:
print(" Очень сильная корреляция")
if correlation > 0:
print(" Корреляция положительная")
elif correlation < 0:
print(" Корреляция отрицательная")
else:
print(" Корреляция отсутствует")
else:
print("Не удалось рассчитать коэффициент корреляции")
print("=" * 60)
# Запуск программы
if __name__ == "__main__":
main()