diff --git a/TEMA8/Res1234.txt b/TEMA8/Res1234.txt new file mode 100644 index 0000000..14fc0d3 --- /dev/null +++ b/TEMA8/Res1234.txt @@ -0,0 +1,5 @@ +Результаты расчета: +Среднее значение A: 679.73 +Среднее значение B: 4376.11 +Пороговое значение P: 2527.92 +Список результатов: [679.7272727272727, 4376.111111111111, 2527.919191919192] diff --git a/TEMA8/create_test_data.py b/TEMA8/create_test_data.py index f6145d1..7aa00d7 100644 --- a/TEMA8/create_test_data.py +++ b/TEMA8/create_test_data.py @@ -1,11 +1,8 @@ -# Скрипт для создания тестовых данных import pickle -# Тестовые данные из задания A = [-440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665] B = [3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993] -# Сохранение данных в бинарный файл filename = input("Введите имя файла для сохранения тестовых данных (например: test_data.bin): ") try: diff --git a/TEMA8/m0.py b/TEMA8/m0.py index 858e39c..c7f3d5c 100644 --- a/TEMA8/m0.py +++ b/TEMA8/m0.py @@ -1,15 +1,11 @@ -# Модуль М0 - главная программа -from m2 import process_data - +from m2 import obrabotka as ob def main(): """Основная функция программы""" print("=== ОБРАБОТКА ДВУХ СПИСКОВ ===") - - # Вызов обработки данных из модуля М2 - results = process_data() - + + results = ob() if results is not None: - # Запись результатов в текстовый файл + try: with open('Res1234.txt', 'w', encoding='utf-8') as file: file.write("Результаты расчета:\n") diff --git a/TEMA8/m1.py b/TEMA8/m1.py index aa9f3d2..2dbf870 100644 --- a/TEMA8/m1.py +++ b/TEMA8/m1.py @@ -1,24 +1,13 @@ def sred(A, B): - """ - средние значения по двум спискам/кортежам - и пороговое значение P (полусумма средних) - """ - # Вычисляем средние значения avg_A = sum(A) / len(A) if len(A) > 0 else 0 avg_B = sum(B) / len(B) if len(B) > 0 else 0 - - # Вычисляем пороговое значение P P = (avg_A + avg_B) / 2 - return [avg_A, avg_B, P] def colvo(C, M): - """ - подсчитывает элементы выше и не выше порога M - """ up = 0 down = 0 - + for element in C: if element > M: up += 1 diff --git a/TEMA8/m2.py b/TEMA8/m2.py index 463591b..772e837 100644 --- a/TEMA8/m2.py +++ b/TEMA8/m2.py @@ -1,93 +1,23 @@ -# Модуль М2 import pickle import os -import matplotlib.pyplot as plt from m1 import sred, colvo -def ctenie(): - """Чтение данных из бинарного файла""" - filename = input("Введите имя бинарного файла: ") - +def obrabotka(): + filename = input("Имя файла: ") if not os.path.exists(filename): - print(f"Файл {filename} не существует!") - return None, None - - try: - with open(filename, 'rb') as file: - data = pickle.load(file) - if len(data) >= 2: - A = data[0] - B = data[1] - return A, B - else: - print("Файл должен содержать как минимум два списка/кортежа") - return None, None - except Exception as e: - print(f"Ошибка при чтении файла: {e}") - return None, None - -def process_data(): - """Основная функция обработки данных""" - # Чтение данных из файла - A, B = ctenie() - - if A is None or B is None: - return None - - print(f"\nСписок A: {A}") - print(f"Список B: {B}") - - # Применение функции 1 - results = sred(A, B) - avg_A, avg_B, P = results - - print(f"\nСреднее значение A: {avg_A:.2f}") - print(f"Среднее значение B: {avg_B:.2f}") - print(f"Пороговое значение P: {P:.2f}") - - # Применение функции 2 к спискам A и B + print("Файл не найден!") + return + with open(filename, 'rb') as f: + data = pickle.load(f) + A, B = data[0], data[1] + print(f"A: {A}") + print(f"B: {B}") + avg_A, avg_B, P = sred(A, B) + print(f"\nСреднее A: {avg_A:.2f}") + print(f"Среднее B: {avg_B:.2f}") + print(f"Порог P: {P:.2f}") up_A, down_A = colvo(A, P) up_B, down_B = colvo(B, P) - - print(f"\nДля списка A:") - print(f" Элементов выше P ({P:.2f}): {up_A}") - print(f" Элементов не выше P: {down_A}") - - print(f"\nДля списка B:") - print(f" Элементов выше P ({P:.2f}): {up_B}") - print(f" Элементов не выше P: {down_B}") - - # Построение графика - plot_data(A, B, avg_A, avg_B, P) - - return results - -def plot_data(A, B, avg_A, avg_B, P): - """Построение графика для списков A и B""" - plt.figure(figsize=(10, 6)) - - # Создание индексов для элементов - indices_A = range(len(A)) - indices_B = range(len(B)) - - # Построение точек для списка A - plt.scatter(indices_A, A, color='blue', label='Список A', s=50, alpha=0.7) - - # Построение точек для списка B - plt.scatter(indices_B, B, color='red', label='Список B', s=50, alpha=0.7) - - # Горизонтальные линии для средних значений и порога - plt.axhline(y=avg_A, color='blue', linestyle='--', alpha=0.5, label=f'Среднее A: {avg_A:.2f}') - plt.axhline(y=avg_B, color='red', linestyle='--', alpha=0.5, label=f'Среднее B: {avg_B:.2f}') - plt.axhline(y=P, color='green', linestyle='-', alpha=0.7, label=f'Порог P: {P:.2f}') - - # Настройка графика - plt.xlabel('Индекс элемента') - plt.ylabel('Значение элемента') - plt.title('Сравнение списков A и B') - plt.legend() - plt.grid(True, alpha=0.3) - - # Сохранение графика - plt.savefig('comparison_plot.png', dpi=300, bbox_inches='tight') - plt.show() + print(f"\nA: выше {up_A}, ниже {down_A}") + print(f"B: выше {up_B}, ниже {down_B}") + return [avg_A, avg_B, P] \ No newline at end of file diff --git a/TEMA8/modul.md b/TEMA8/modul.md new file mode 100644 index 0000000..b5131fe --- /dev/null +++ b/TEMA8/modul.md @@ -0,0 +1,141 @@ +# Туровец Евгений В18 +### M3_18 +1) Создайте модуль М1, содержащий две функции: + +- функция 1: аргументы - два списка или кортежа - А и В; функция должна вычислить и вернуть список с 3 элементами: средние значения по каждому списку и значение Р, равное полусумме этих средних; + +- функция 2: аргументы - список или кортеж С и числовое значение порога М; в функции должны быть подсчитаны и возвращены число элементов в С, значения которых превышают значение М, и число элементов, значения которых не превышают М. + +2) Создайте еще один модуль М2, в котором должны выполняться операции: + +- запрашивается и вводится имя бинарного файла, проверяется его наличие, и если он существует, то из него считываются два объекта-списка или кортежа: А и В; + +- с применением функции 1 рассчитываются и отображаются средние значения и пороговое значение Р; + +- функция 2 поочередно применяется к объектам А и В с порогом Р, рассчитанным в функции 1; отображаются результаты расчета; + +- объекты А и В отображаются на одном графике с разметкой осей + +3) Создайте модуль М0 - главную программу, которая вызывает М2 и записывает список, полученный в функции 1 в текстовый файл Res1234.txt. + +4) Для проверки программы запишите в бинарный файл с некоторым именем два списка: + +А: -440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665 + +В: 3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993 + +Проведите расчеты с этими данными. +mo: +```py +from m2 import obrabotka as ob +def main(): + """Основная функция программы""" + print("=== ОБРАБОТКА ДВУХ СПИСКОВ ===") + + results = ob() + if results is not None: + + try: + with open('Res1234.txt', 'w', encoding='utf-8') as file: + file.write("Результаты расчета:\n") + file.write(f"Среднее значение A: {results[0]:.2f}\n") + file.write(f"Среднее значение B: {results[1]:.2f}\n") + file.write(f"Пороговое значение P: {results[2]:.2f}\n") + file.write(f"Список результатов: {results}\n") + + print("\nРезультаты успешно записаны в файл 'Res1234.txt'") + except Exception as e: + print(f"Ошибка при записи в файл: {e}") + else: + print("Программа завершена с ошибкой.") + +if __name__ == "__main__": + main() + +``` +m1: +```py +def sred(A, B): + avg_A = sum(A) / len(A) if len(A) > 0 else 0 + avg_B = sum(B) / len(B) if len(B) > 0 else 0 + P = (avg_A + avg_B) / 2 + return [avg_A, avg_B, P] + +def colvo(C, M): + up = 0 + down = 0 + + for element in C: + if element > M: + up += 1 + else: + down += 1 + + return up, down + +``` +m2: +```py +import pickle +import os +from m1 import sred, colvo + +def obrabotka(): + filename = input("Имя файла: ") + if not os.path.exists(filename): + print("Файл не найден!") + return + with open(filename, 'rb') as f: + data = pickle.load(f) + A, B = data[0], data[1] + print(f"A: {A}") + print(f"B: {B}") + avg_A, avg_B, P = sred(A, B) + print(f"\nСреднее A: {avg_A:.2f}") + print(f"Среднее B: {avg_B:.2f}") + print(f"Порог P: {P:.2f}") + up_A, down_A = colvo(A, P) + up_B, down_B = colvo(B, P) + print(f"\nA: выше {up_A}, ниже {down_A}") + print(f"B: выше {up_B}, ниже {down_B}") + return [avg_A, avg_B, P] +``` +Скрипт для создания начальных данных: +```py +import pickle + +A = [-440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665] +B = [3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993] + +filename = input("Введите имя файла для сохранения тестовых данных (например: test_data.bin): ") + +try: + with open(filename, 'wb') as file: + pickle.dump([A, B], file) + print(f"Тестовые данные успешно сохранены в файл '{filename}'") + print(f"Список A: {A}") + print(f"Список B: {B}") +except Exception as e: + print(f"Ошибка при сохранении файла: {e}") + +``` +"""" Вывод: +``` +Введите имя файла для сохранения тестовых данных: test1 +Тестовые данные успешно сохранены в файл 'test1' +Список A: [-440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665] +Список B: [3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993] + +Имя файла: test1 +A: [-440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665] +B: [3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993] + +Среднее A: 679.73 +Среднее B: 4376.11 +Порог P: 2527.92 + +A: выше 2, ниже 9 +B: выше 6, ниже 3 + +Результаты успешно записаны в файл 'Res1234.txt' +``` \ No newline at end of file diff --git a/TEMA8/test b/TEMA8/test new file mode 100644 index 0000000..2552102 Binary files /dev/null and b/TEMA8/test differ diff --git a/TEMA8/test1 b/TEMA8/test1 new file mode 100644 index 0000000..2552102 Binary files /dev/null and b/TEMA8/test1 differ