diff --git a/TEMA3/test.md b/TEMA3/test.md new file mode 100644 index 0000000..dfb9b1d --- /dev/null +++ b/TEMA3/test.md @@ -0,0 +1,201 @@ +## Индивидуально контрольное задание по Теме 3 + +Володин Денис, А-02-23 + +##Задание + +В-20 + +1) Создайте модуль М1, содержащий две функции: + +- функция 1: аргументы - ряд отсчетов некоторого сигнала и целочисленный параметр N; функция должна рассчитать и возвратить оценки средних значений М1 и М2 и дисперсий С1 и С2 по первым N отсчетам сигнала и по оставшейся его части; + +- функция 2: аргумент - имя текстового файла с отсчетами сигнала Х; функция должна прочитать данные из указанного файла, передать их в функцию 1, отобразить результаты расчета и по возвращенным данным рассчитать и вернуть 2 статистики + +t=|M1-M2| /((C1*N+С2*(NN-N))/(NN-2))0.5 + +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 + +## Решение + +Модуль М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) + +=== АНАЛИЗ ЗАВЕРШЕН === +Результаты сохранены в файле 'Res101.txt' \ No newline at end of file diff --git a/TEMA4/test.md b/TEMA4/test.md new file mode 100644 index 0000000..23f0ad2 --- /dev/null +++ b/TEMA4/test.md @@ -0,0 +1,40 @@ +## Индивидуально контрольное задание по Теме 4 + +Володин Денис, А-02-23 + +##Задание + +В-20 +Напишите инструкцию запоминания в переменной текущего времени в секундах с начала эпохи. Преобразуйте это время в Московское региональное время. Создайте кортеж с элементами – целыми числами от 27 до 147 через 15. Рассчитайте сумму элементов кортежа и определите значение отношения синуса этой суммы к корню квадратному из неё. Отобразите полученное значение в виде: «Результат = ХХХ» с округлением до 5 знаков после точки. + +##Решение + +```py +import time +import datetime +import math +current_time_seconds = time.time() +print(f"Текущее время в секундах с начала эпохи: {current_time_seconds}") +utc_time = datetime.datetime.utcfromtimestamp(current_time_seconds) +moscow_time = utc_time + datetime.timedelta(hours=3) +print(f"Московское время: {moscow_time.strftime('%Y-%m-%d %H:%M:%S')}") +numbers_tuple = tuple(range(27, 148, 15)) +print(f"Кортеж чисел: {numbers_tuple}") +tuple_sum = sum(numbers_tuple) +print(f"Сумма элементов кортежа: {tuple_sum}") +if tuple_sum >= 0: + result = math.sin(tuple_sum) / math.sqrt(tuple_sum) +else: + result = math.sin(tuple_sum) / math.sqrt(-tuple_sum) # для комплексного случая, но в нашем случае сумма положительна +print(f"Результат = {result:.5f}") +``` + +##Вывод + +```py +Текущее время в секундах с начала эпохи: 1760948869.1841416 +Московское время: 2025-10-20 11:27:49 +Кортеж чисел: (27, 42, 57, 72, 87, 102, 117, 132, 147) +Сумма элементов кортежа: 783 +Результат = -0.02419 +``` \ No newline at end of file