# Тест по модулю 3. ***M3_9*** 1) Создайте модуль М1, содержащий две функции: - функция 1: аргументы - список Х с последовательностью отсчетов некоторого сигнала и два числовых параметра:М1 и М2; в функции должен создаваться кортеж К с индексами "аномальных" отсчетов сигнала, для которых выполняются неравенства: X[i]-X[i-1]M2. - функция 2: аргументы - список Х с отсчетами сигнала и кортеж К с индексами "аномальных" отсчетов; в функции должен создаваться новый список Х1, в котором элементы совпадают с элементами из Х, если те не являются "аномальными", а элементы из списка К заменяются на X[i]=0.5*(X[i-1]+X[i+1]), а если "аномальным" окажется последний элемент, то его значение заменяется на значение предпоследнего элемента. 2) Создайте еще один модуль М2, в котором должны выполняться операции: - запрашивается и вводится имя текстового файла со значениями сигнала; проверяется наличие файла и при отсутствии - повторение запроса; - из указанного файла считывается список Х с сигналом, причем в строках файла может быть разное число отсчетов сигнала; - запрашиваются и вводятся граничные значения М1 и М2 (с проверкой: М1 M2: K.append(i) return tuple(K) def correct_signal(X, K): X1 = X.copy() for i in K: if i == len(X)-1: X1[i] = X[i-1] else: X1[i] = 0.5 * (X[i-1] + X[i+1]) return X1 ``` M2.py: ```python import os from M1 import find_anomalous, correct_signal def get_file(): while True: name = input("Имя файла: ") if (os.getcwd() + "/TEMA9/" + name): return (os.getcwd() + "/TEMA9/" + name) print("Файл не найден") def get_M(): while True: try: M1 = float(input("M1: ")) M2 = float(input("M2: ")) if M1 < M2: return M1, M2 print("M1 должно быть < M2") except: print("Введите числа") def read_file(filename): X = [] with open(filename, 'r') as f: for line in f: for num in line.split(): X.append(float(num)) return X def save_binary(X1): with open("Res44.bin", 'wb') as f: for val in X1: f.write(str(val).encode() + b' ') def main(): filename = get_file() X = read_file(filename) print(f"Прочитано {len(X)} значений") M1, M2 = get_M() K = find_anomalous(X, M1, M2) print(f"Аномалии: {K}") if K: X1 = correct_signal(X, K) print(f"Исправлено: {X1[:10]}...") save_binary(X1) else: print("Аномалий нет") return X, X1 if K else None ``` ## Тест программы. **М1=-2, М2=5** Ответ программы: ```shell Имя файла: data.txt Прочитано 50 значений M1: -2 M2: 5 Аномалии: (1, 2, 3, 4, 5, 6, 8, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 22, 24, 25, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 44, 46, 48) Исправлено: [-0.6237815140713643, 8.334758413952665, 8.676761749029652, 16.311955261228825, 10.049076856969142, 11.629416687369641, 9.707997133988439, 8.474627629385962, 6.672229105628724, 4.869830581871486]... ``` ![График1](Graf1.png) Создан файл Res44.bin: ```text -0.6237815140713643 8.334758413952665 8.676761749029652 16.311955261228825 10.049076856969142 11.629416687369641 9.707997133988439 8.474627629385962 6.672229105628724 4.869830581871486 10.849253911018645 15.007334330751284 15.685684131327989 7.276761757100063 14.936309642961522 7.71080097037114 8.84174165046468 5.40753722882943 0.4706925635385968 4.260279922438404 12.093061250735083 6.9658395175116095 7.603305298422549 8.240771079333488 11.582777804202491 15.70265791101874 13.69355803793308 11.825229995716477 8.924432404604957 6.236897247630704 7.718515343413342 14.138162005578465 10.369381683301384 10.469410599944988 12.440727080674186 5.744189038187823 17.191426811028236 6.9476582691774915 12.497727637752119 8.705607846445806 5.5468985368821375 8.65552847128108 6.8664456002207395 8.650972345948677 10.520154831433961 12.389337316919246 12.27492795757532 12.160518598231395 11.04920237433025 9.937886150429105 ``` **М1=-20, М2=50** Ответ программы: ```shell Имя файла: data.txt Прочитано 50 значений M1: -20 M2: 50 Аномалии: () Аномалий нет ``` ![График2](Graf2.png)