diff --git a/TEMA9/M0.py b/TEMA9/M0.py new file mode 100644 index 0000000..880373d --- /dev/null +++ b/TEMA9/M0.py @@ -0,0 +1,16 @@ +import M2 +import matplotlib.pyplot as plt + +def main(): + """ + Главная программа + """ + data = M2.main_M2() + + if data: + plt.plot(data) + plt.title('SS3 из модуля M2') + plt.show() + +if __name__ == "__main__": + main() diff --git a/TEMA9/M1.py b/TEMA9/M1.py new file mode 100644 index 0000000..7c60d11 --- /dev/null +++ b/TEMA9/M1.py @@ -0,0 +1,44 @@ +import random + +def function1(name, TAU,K): + '''Чтение сигнала из файла и создание списка''' + try: + fl = open(name,'r') + data = fl.read().strip().split() + SPS1 = [float(x) for x in data] + fl.close() + + N = len(SPS1) + SPS2 = [0]*N + + for i in range (N): + if i < TAU - 1: + SPS2[i]=0 + else: + SPS2[i]= K * SPS1[i-TAU] + + return SPS1, SPS2 + + except FileNotFoundError: + print(f'Файл {name} не найден') + return [],[] + +def function2(SS1,SS2,TT): + '''Расчет значения D''' + if not SS1 or not SS2: + return 0 + + N = len(SS1) + + if TT<0 or TT>= N: + return 0 + + SR1 = sum(SS1)/N if N >0 else 0 + SR2 = sum(SS2)/N if N >0 else 0 + + D = 0 + for i in range(TT,N): + if (i-TT)=0): ")) + if TAU >= 0: + break + else: + print("TAU должно быть >= 0. Попробуйте снова.") + except ValueError: + print("Некорректный ввод. Введите целое число.") + + K = random.uniform(2, 7) + print(f"\nСлучайное значение K: {K:.2f}") + + SPS1, SPS2 = M1.function1(name, TAU, K) + + if not SPS1: + print("Не удалось получить данные. Программа завершена.") + return + + print(f"\nДлина списка SPS1: {len(SPS1)}") + print("Первые 10 элементов SPS1:", SPS1[:10]) + print("Первые 10 элементов SPS2:", SPS2[:10]) + + SS3 = [] + max_TT = TAU + 5 + + for TT in range(max_TT + 1): + D = M1.function2(SPS1, SPS2, TT) + SS3.append(D) + print(f"TT = {TT}: D = {D:.6f}") + + output_filename = "Res11.bin" + try: + with open(output_filename, 'w') as file: + for value in SS3: + file.write(f"{value}\n") + print(f"\nРезультаты записаны в файл: {output_filename}") + except Exception as e: + print(f"Ошибка при записи в файл: {e}") + + return SS3 + +if __name__ == "__main__": + main_M2() diff --git a/TEMA9/signal.txt b/TEMA9/signal.txt new file mode 100644 index 0000000..5a8dee7 --- /dev/null +++ b/TEMA9/signal.txt @@ -0,0 +1 @@ +0.497 2.127 1.452 2.602 4.794 -1.905 0.085 -2.629 0.252 2.689 2.474 3.816 -2.189 -1.768 2.77 -2.433 -1.041 -2.445 2.476 4.147 -0.049 4.456 -0.775 4.662 -1.757 4.352 -1.168 -2.37 4.542 -1.175 3.69 -3.318 -2.284 4.73 -1.774 1.809 -3.342 -4.543 -2.636 2.474 4.302 -0.962 -0.86 4.75 -0.829 -4.45 -1.604 -3.344 -4.06 -2.0 \ No newline at end of file diff --git a/TEMA9/sygnals.py b/TEMA9/sygnals.py new file mode 100644 index 0000000..ce3e265 --- /dev/null +++ b/TEMA9/sygnals.py @@ -0,0 +1,10 @@ +import random + +data = [] +for i in range(50): + data.append(str(round(random.uniform(-5, 5), 3))) + +with open("signal.txt", 'w') as file: + file.write(" ".join(data)) + +print("Файл 'signal.txt' готов к использованию") diff --git a/TEMA9/test.md b/TEMA9/test.md new file mode 100644 index 0000000..a4d561a --- /dev/null +++ b/TEMA9/test.md @@ -0,0 +1,37 @@ +# Тест 3 Вариант 3 + +Лыкова Елизавета, А-01-23 + +## Задание + +1) Создайте модуль М1, содержащий две функции: + +- функция 1: аргументы - имя текстового файла, содержащего некоторое число отсчетов сигнала, целочисленный параметр TAU и числовой параметр К; в функции считывается сигнал из файла в список SPS1 и формируется второй список SPS2, элементы которого определяются по правилу: первые (TAU-1) элементов равны 0, а последующие определяются по формуле: SPS2[i]=K*SPS1[i-TAU]; оба списка возвращаются в качестве результатов работы функции; + +- функция 2: аргументы - два числовых списка SS1 и SS2, а также целочисленный параметр ТТ; в функции рассчитывается и возвращается значение + +D= (SS1[TT]-SR1)*(SS2[0] - SR2)+ (SS1[TT+1]-SR1)*(SS2[1] - SR2)+:+ + +(SS1[i]-SR1)*(SS2[i-TT] - SR2)+:+ (SS1[N]-SR1)*(SS2[N-TT] - SR2), + +где N - длина списка SS1, SR1, SR2 - средние значения соответствующих списков. + +2) Создайте еще один модуль М2, в котором должны выполняться операции: + +- запрашивается и вводится имя текстового файла с данными; проверяется наличие файла и при отсутствии - повторение запроса; + +- запрашивается значение параметра TAU и проверяется TAU >=0; + +- вызывается функция 1 с указанными именем файла и параметром TAU, и случайным значением К из диапазона значений от 2 до 7; отображаются рассчитанные списки; + +- вызывается функция 2 в цикле со значениями TT от 0 до TAU+5; результаты записываются в список SS3; + +- список SS3 записывается в текстовый файл с именем Res11.bin. + +3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает в виде графика список SPS3. + +4) Подготовьте файл с исходными данными - 50 отсчетов случайного нормально распределенного с некоторыми параметрами сигнала. Проведите по программе расчеты со значениями TAU, равными 0, 5 и 10. + +## Решение + +Всё в модулях в гите.