diff --git a/TEMA9/Figure_2.png b/TEMA9/Figure_2.png new file mode 100644 index 0000000..7177e99 Binary files /dev/null and b/TEMA9/Figure_2.png differ diff --git a/TEMA9/Figure_3.png b/TEMA9/Figure_3.png new file mode 100644 index 0000000..2776840 Binary files /dev/null and b/TEMA9/Figure_3.png differ diff --git a/TEMA9/Figure_4.png b/TEMA9/Figure_4.png new file mode 100644 index 0000000..ad5fc07 Binary files /dev/null and b/TEMA9/Figure_4.png differ diff --git a/TEMA9/M0.py b/TEMA9/M0.py new file mode 100644 index 0000000..443fadc --- /dev/null +++ b/TEMA9/M0.py @@ -0,0 +1,5 @@ +import pylab +import M2 + +pylab.plot(M2.SS3) +pylab.show() diff --git a/TEMA9/M1.py b/TEMA9/M1.py new file mode 100644 index 0000000..2e287bd --- /dev/null +++ b/TEMA9/M1.py @@ -0,0 +1,26 @@ +def fun(name, TAU, K): + sps2 = [] + f = open(name, "r") + sps1 = f.readlines() + for i in range(len(sps1)): + sps1[i] = float(sps1[i].replace("\n", "")) + if i < TAU: + sps2.append(0) + else: + sps2.append(K * sps1[i-TAU]) + return([sps1,sps2]) + + +def fun2(SS1, SS2, TT): + D = 0 + N = len(SS1) + SR1 = sum(SS1)/len(SS1) + SR2 = sum(SS2)/len(SS2) + for i in range(TT, len(SS1)): + D+=(SS1[i]-SR1)*(SS2[i-TT]-SR2) + for i in range(len(SS1)): + D+=(SS1[i]-SR1)*(SS2[i-TT]-SR2) + for i in range(len(SS1)): + D+=(SS1[N-1]-SR1)*(SS2[N-1-TT]-SR2) + return(D) + diff --git a/TEMA9/M2.py b/TEMA9/M2.py new file mode 100644 index 0000000..0c9b57d --- /dev/null +++ b/TEMA9/M2.py @@ -0,0 +1,28 @@ +import os +import pickle +import random +import M1 +while True: + name = input("Введите название текстового файла: ") + if os.path.exists(name): + print("Файл сущетсвует") + break + else: + print("Файл НЕ сущетсвует, повторите PopITку") + +while True: + TAU = int(input("Введите значение TAU >= 0: ")) + if TAU >= 0: + break + else: + print("Сказали же, TAU больше нуля! Мне казалось, что все это поняли") + +SS3 = [] +k = random.randint(2,7) + +res = M1.fun(name, TAU, k) + +for TT in range(TAU+5): + SS3.append(M1.fun2(res[0], res[1], TT)) + +pickle.dump(SS3, open("Res11.bin", "wb")) diff --git a/TEMA9/data.txt b/TEMA9/data.txt new file mode 100644 index 0000000..169f2bc --- /dev/null +++ b/TEMA9/data.txt @@ -0,0 +1,50 @@ +-0.809 +0.203 +1.281 +0.287 +-0.181 +0.297 +0.616 +-2.017 +1.034 +0.166 +0.062 +0.121 +0.077 +-0.716 +0.184 +-0.03 +-0.846 +0.052 +0.51 +-2.679 +0.115 +1.64 +1.424 +-0.635 +-0.134 +-0.308 +0.809 +-1.251 +-0.188 +-2.35 +-0.221 +-0.329 +0.184 +-0.666 +-0.276 +-0.593 +1.266 +0.56 +0.96 +0.47 +-0.862 +-0.103 +0.981 +0.638 +0.344 +0.555 +-0.137 +0.337 +0.561 +-1.075 \ No newline at end of file diff --git a/TEMA9/test.md b/TEMA9/test.md new file mode 100644 index 0000000..4e758ed --- /dev/null +++ b/TEMA9/test.md @@ -0,0 +1,116 @@ +# Защита модуля 3 + +Гордиевских Данил, А-03-23 + +## Вариант 3 задание + +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. + +## Выполнение + +### Текст модуля M0 + +```py +import pylab +import M2 + +pylab.plot(M2.SS3) +pylab.show() +``` + +### Текст модуля M1 + +```py +def fun(name, TAU, K): + sps2 = [] + f = open(name, "r") + sps1 = f.readlines() + for i in range(len(sps1)): + sps1[i] = float(sps1[i].replace("\n", "")) + if i < TAU: + sps2.append(0) + else: + sps2.append(K * sps1[i-TAU]) + return([sps1,sps2]) + + +def fun2(SS1, SS2, TT): + D = 0 + N = len(SS1) + SR1 = sum(SS1)/len(SS1) + SR2 = sum(SS2)/len(SS2) + for i in range(TT, len(SS1)): + D+=(SS1[i]-SR1)*(SS2[i-TT]-SR2) + for i in range(len(SS1)): + D+=(SS1[i]-SR1)*(SS2[i-TT]-SR2) + for i in range(len(SS1)): + D+=(SS1[N-1]-SR1)*(SS2[N-1-TT]-SR2) + return(D) +``` + +### Текст модуля M2 + +```py +import os +import pickle +import random +import M1 +while True: + name = input("Введите название текстового файла: ") + if os.path.exists(name): + print("Файл сущетсвует") + break + else: + print("Файл НЕ сущетсвует, повторите PopITку") + +while True: + TAU = int(input("Введите значение TAU >= 0: ")) + if TAU >= 0: + break + else: + print("Сказали же, TAU больше нуля! Мне казалось, что все это поняли") + +SS3 = [] +k = random.randint(2,7) + +res = M1.fun(name, TAU, k) + +for TT in range(TAU+5): + SS3.append(M1.fun2(res[0], res[1], TT)) + +pickle.dump(SS3, open("Res11.bin", "wb")) +``` + +### Вывод + +![График](Figure_2.png) + +![График](Figure_3.png) + +![График](Figure_4.png)