From 48c6009fdd07675e84d95cd04fe9b87751d39d24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B5=D0=BD=D0=B8=D1=81=20=D0=92=D0=BE=D0=BB=D0=BE?= =?UTF-8?q?=D0=B4=D0=B8=D0=BD?= Date: Tue, 21 Oct 2025 13:11:28 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=9A=D0=97=20=D0=BF=D0=B5=D1=80=D0=B2?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8F,=20?= =?UTF-8?q?=D0=B0=20=D0=BD=D0=B5=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEMA3/test.md | 219 ++++++++------------------------------------------ 1 file changed, 32 insertions(+), 187 deletions(-) diff --git a/TEMA3/test.md b/TEMA3/test.md index fedf4c0..d452ea2 100644 --- a/TEMA3/test.md +++ b/TEMA3/test.md @@ -2,203 +2,48 @@ Володин Денис, А-02-23 -##Задание +## Задание В-20 -1) Создайте модуль М1, содержащий две функции: +1. Какое назначение имеют демонстрационные примеры в системе помощи? -- функция 1: аргументы - ряд отсчетов некоторого сигнала и целочисленный параметр N; функция должна рассчитать и возвратить оценки средних значений М1 и М2 и дисперсий С1 и С2 по первым N отсчетам сигнала и по оставшейся его части; +2. Создайте объект-список с числовыми четными целыми значениями от -10 до +26. Напишите инструкцию, доказывающую, что создан объект именно требуемого типа. Напишите инструкцию отображения списка атрибутов созданного объекта. -- функция 2: аргумент - имя текстового файла с отсчетами сигнала Х; функция должна прочитать данные из указанного файла, передать их в функцию 1, отобразить результаты расчета и по возвращенным данным рассчитать и вернуть 2 статистики +3. Напишите инструкцию, позволяющую определить число элементов в созданном списке. Напишите инструкции, заменяющие первое значение в списке на -1000, а последнее - на +1000. Отобразите получившийся объект. -t=|M1-M2| /((C1*N+С2*(NN-N))/(NN-2))0.5 +4. Напишите инструкцию, вставляющую в список на 4-ю позицию от начала число 123. Удлините список за счет его повторения ещё два раза. Отобразите получившийся объект. Подсчитайте число элементов в получившемся списке. -F=max(C1,C2)/min(C1,C2) - -2) Создайте еще один модуль М2, в котором должны выполняться операции: - -- запрашивается и вводится имя текстового файла, в котором содержатся данные для расчета; проверяется наличие файла и при отсутствии - повторение запроса; - -- вызывается функция 2 и затем отображается в числовом виде введенный из файла сигнал и рассчитанные статистики; - -- при t>2 выдается сообщение: "Сигнал сильно меняется", а в ином случае: "Сигнал заметно не меняется"; при F>4 выдается сообщение: "Разброс сигнала сильно меняется", а в ином случае: "Разброс сигнала заметно не меняется"; эти же сообщения должны быть записаны в текстовый файл Res101.txt. - -3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает в виде графика введенный из файла числовой ряд. - -4) Для проверки запишите в текстовый файл числовой ряд со значениями приращений заболеваемости COVID-19 в России в январе 2022 г.: - - -440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665, 3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993 +4. Преобразуйте список в кортеж. Создайте два кортежа, содержащих, соответственно первую и вторую половину элементов из исходного кортежа. Отобразите созданные объекты. ## Решение Модуль М1 ```py - -import math -def calculate_statistics(signal_data, N): - if len(signal_data) < N: - raise ValueError("N не может быть больше длины сигнала") - first_part = signal_data[:N] - second_part = signal_data[N:] - M1 = sum(first_part) / len(first_part) - M2 = sum(second_part) / len(second_part) - C1 = sum((x - M1) ** 2 for x in first_part) / len(first_part) - C2 = sum((x - M2) ** 2 for x in second_part) / len(second_part) - return M1, M2, C1, C2 -def analyze_signal_file(filename): - try: - with open(filename, 'r', encoding='utf-8') as file: - content = file.read().strip() - signal_data = [] - for item in content.replace(',', ' ').split(): - try: - signal_data.append(float(item)) - except ValueError: - continue - if not signal_data: - raise ValueError("Файл не содержит числовых данных") - NN = len(signal_data) - N = NN // 2 # Берем первую половину данных - M1, M2, C1, C2 = calculate_statistics(signal_data, N) - print("\n=== РЕЗУЛЬТАТЫ РАСЧЕТА ===") - print(f"Общее количество отсчетов: {NN}") - print(f"Количество отсчетов в первой части (N): {N}") - print(f"Среднее значение M1 (первые {N} отсчетов): {M1:.4f}") - print(f"Среднее значение M2 (оставшиеся отсчеты): {M2:.4f}") - print(f"Дисперсия C1 (первые {N} отсчетов): {C1:.4f}") - print(f"Дисперсия C2 (оставшиеся отсчеты): {C2:.4f}") - denominator = (C1 * N + C2 * (NN - N)) / (NN - 2) - if denominator <= 0: - t_stat = 0 - else: - t_stat = abs(M1 - M2) / math.sqrt(denominator) - if min(C1, C2) == 0: - F_stat = float('inf') - else: - F_stat = max(C1, C2) / min(C1, C2) - print(f"Статистика t: {t_stat:.4f}") - print(f"Статистика F: {F_stat:.4f}") - return signal_data, t_stat, F_stat - except Exception as e: - print(f"Ошибка при анализе файла: {e}") - return None, None, None -``` - -M2 - -```py -import os -import m1 -def process_signal_analysis(): - while True: - filename = input("Введите имя текстового файла с данными сигнала: ").strip() - if os.path.exists(filename): - break - else: - print(f"Файл '{filename}' не найден. Попробуйте снова.") - signal_data, t_stat, F_stat = m1.analyze_signal_file(filename) - if signal_data is None: - return - print(f"\nВведенный сигнал ({len(signal_data)} отсчетов):") - print(signal_data) - print(f"Рассчитанные статистики: t = {t_stat:.4f}, F = {F_stat:.4f}") - t_message = "Сигнал сильно меняется" if t_stat > 2 else "Сигнал заметно не меняется" - F_message = "Разброс сигнала сильно меняется" if F_stat > 4 else "Разброс сигнала заметно не меняется" - print(f"\n=== РЕЗУЛЬТАТЫ АНАЛИЗА ===") - print(t_message) - print(F_message) - with open("Res101.txt", "w", encoding="utf-8") as result_file: - result_file.write("=== РЕЗУЛЬТАТЫ АНАЛИЗА СИГНАЛА ===\n\n") - result_file.write(f"Исходный сигнал: {signal_data}\n") - result_file.write(f"Количество отсчетов: {len(signal_data)}\n") - result_file.write(f"Статистика t: {t_stat:.4f}\n") - result_file.write(f"Статистика F: {F_stat:.4f}\n\n") - result_file.write(f"ВЫВОДЫ:\n") - result_file.write(f"{t_message}\n") - result_file.write(f"{F_message}\n") - print(f"\nРезультаты сохранены в файл 'Res101.txt'") - return signal_data, t_stat, F_stat -``` - -M0 - -```py -import m2 -import matplotlib.pyplot as plt -import os -def create_test_data_file(): - covid_data = [-440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, - 2665, 3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993] - with open("covid_data.txt", "w", encoding="utf-8") as file: - file.write(", ".join(map(str, covid_data))) - print("Создан тестовый файл 'covid_data.txt' с данными COVID-19") -def plot_signal(signal_data, title="График сигнала"): - plt.figure(figsize=(12, 6)) - plt.plot(signal_data, 'b-o', linewidth=2, markersize=6, label='Сигнал') - plt.axhline(y=0, color='r', linestyle='--', alpha=0.7, label='Нулевая линия') - plt.title(title, fontsize=14, fontweight='bold') - plt.xlabel('Номер отсчета', fontsize=12) - plt.ylabel('Значение сигнала', fontsize=12) - plt.grid(True, alpha=0.3) - plt.legend() - for i, value in enumerate(signal_data): - plt.annotate(f'{value}', (i, value), textcoords="offset points", - xytext=(0,10), ha='center', fontsize=8) - plt.tight_layout() - plt.show() -def main(): - print("=== АНАЛИЗ СИГНАЛА ===") - print("Программа для статистического анализа сигналов") - create_test_data_file() - print("\nЗапуск анализа сигнала...") - result = m2.process_signal_analysis() - if result: - signal_data, t_stat, F_stat = result - print("\nСтроится график сигнала...") - plot_signal(signal_data, "График приращений заболеваемости COVID-19 (январь 2022)") - print("\n=== АНАЛИЗ ЗАВЕРШЕН ===") - print("Результаты сохранены в файле 'Res101.txt'") - else: - print("Анализ завершен с ошибкой") -if __name__ == "__main__": - main() -``` - -Результат работы - -```py -=== АНАЛИЗ СИГНАЛА === -Программа для статистического анализа сигналов -Создан тестовый файл 'covid_data.txt' с данными COVID-19 - -Запуск анализа сигнала... -Введите имя текстового файла с данными сигнала: covid_data.txt - -=== РЕЗУЛЬТАТЫ РАСЧЕТА === -Общее количество отсчетов: 20 -Количество отсчетов в первой части (N): 10 -Среднее значение M1 (первые 10 отсчетов): 481.2000 -Среднее значение M2 (оставшиеся отсчеты): 4205.0000 -Дисперсия C1 (первые 10 отсчетов): 1376929.9600 -Дисперсия C2 (оставшиеся отсчеты): 8869537.8000 -Статистика t: 1.5608 -Статистика F: 6.4415 - -Введенный сигнал (20 отсчетов): -[-440.0, -131.0, -456.0, 1419.0, -167.0, -322.0, -416.0, 1695.0, 421.0, 3209.0, 2665.0, 3359.0, 2051.0, 1496.0, 526.0, 2647.0, 4951.0, 10663.0, 7699.0, 5993.0] -Рассчитанные статистики: t = 1.5608, F = 6.4415 - -=== РЕЗУЛЬТАТЫ АНАЛИЗА === -Сигнал заметно не меняется -Разброс сигнала сильно меняется - -Результаты сохранены в файл 'Res101.txt' -``` - -![](figure1.png) - -```py -=== АНАЛИЗ ЗАВЕРШЕН === -Результаты сохранены в файле 'Res101.txt' +>>> obsp=list(range(-10,26,2)) +>>> type(obsp) + +>>> dir(obsp) +['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] +>>> kol_elem=len(obsp) +>>> kol_elem +18 +>>> obsp[0]=-1000 +>>> obsp[-1]=1000 +>>> obsp +[-1000, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 1000] +>>> obsp.insert(3,123) +>>> long_l=obsp*3 +>>> long_l +[-1000, -8, -6, 123, -4, -2, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 1000, -1000, -8, -6, 123, -4, -2, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 1000, -1000, -8, -6, 123, -4, -2, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 1000] +>>> len(long_l) +57 +>>> kurt_n=tuple(long_l) +>>> mid=len(kurt_n)//2 +>>> f_half=kurt_n[:mid] +>>> s_half=kurt_n[mid:] +>>> f_half +(-1000, -8, -6, 123, -4, -2, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 1000, -1000, -8, -6, 123, -4, -2, 0, 2, 4) +>>> s_half +(6, 8, 10, 12, 14, 16, 18, 20, 22, 1000, -1000, -8, -6, 123, -4, -2, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 1000) ``` \ No newline at end of file