diff --git a/TEMA8/11 b/TEMA8/11 new file mode 100644 index 0000000..2552102 Binary files /dev/null and b/TEMA8/11 differ diff --git a/TEMA8/create_test_data.py b/TEMA8/create_test_data.py new file mode 100644 index 0000000..f6145d1 --- /dev/null +++ b/TEMA8/create_test_data.py @@ -0,0 +1,18 @@ +# Скрипт для создания тестовых данных +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}") diff --git a/TEMA8/iz.md b/TEMA8/iz.md index 3625b80..2b6edf4 100644 --- a/TEMA8/iz.md +++ b/TEMA8/iz.md @@ -1,5 +1,7 @@ # Индивидуальное задание ## Туровец Евгений в26 +### 26. Разработайте функцию, которая по заданному словарю (аргумент функции) с числовыми ключами рассчитывает сумму значений +для ключей из заданного кортежа (аргумент функ-ции). Проверьте функцию на примере. ### Исходный код: ```py def suma(d, keys): @@ -16,7 +18,7 @@ print(result) def suma(d, keys): return sum(d.get(k, 0) for k in keys) ``` -### Тогда кода основной программы будет: +### Тогда код основной программы будет: ```py import md1 dict1 = {1: 10, 2: 20, 3: 30, 4: 40} diff --git a/TEMA8/m0.py b/TEMA8/m0.py new file mode 100644 index 0000000..858e39c --- /dev/null +++ b/TEMA8/m0.py @@ -0,0 +1,28 @@ +# Модуль М0 - главная программа +from m2 import process_data + +def main(): + """Основная функция программы""" + print("=== ОБРАБОТКА ДВУХ СПИСКОВ ===") + + # Вызов обработки данных из модуля М2 + results = process_data() + + 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() diff --git a/TEMA8/m1.py b/TEMA8/m1.py new file mode 100644 index 0000000..aa9f3d2 --- /dev/null +++ b/TEMA8/m1.py @@ -0,0 +1,28 @@ +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 + else: + down += 1 + + return up, down diff --git a/TEMA8/m2.py b/TEMA8/m2.py new file mode 100644 index 0000000..463591b --- /dev/null +++ b/TEMA8/m2.py @@ -0,0 +1,93 @@ +# Модуль М2 +import pickle +import os +import matplotlib.pyplot as plt +from m1 import sred, colvo + +def ctenie(): + """Чтение данных из бинарного файла""" + 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 + 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()