From 8cb32abf613e96fef9efe4ae3b55f865bc650de5 Mon Sep 17 00:00:00 2001 From: EfremovSI Date: Mon, 15 Dec 2025 08:43:13 +0000 Subject: [PATCH] test --- TEMA9/test.md | 174 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 TEMA9/test.md diff --git a/TEMA9/test.md b/TEMA9/test.md new file mode 100644 index 0000000..6a4d62a --- /dev/null +++ b/TEMA9/test.md @@ -0,0 +1,174 @@ +# Индивидуальное контрольное задание по теме 9 + +Ефремов Станислав, А-02-23 + +## Задание + +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: + indices.append(i) + return tuple(indices) + + +def correct_anomalies(X, K): + + X1 = X.copy() + for idx in K: + if idx == len(X) - 1: + X1[idx] = X1[idx - 1] + else: + X1[idx] = 0.5 * (X1[idx - 1] + X1[idx + 1]) + return X1 +``` + +### Модуль 2 + +```py + +import os +import sys +import pickle + +def run_M2(): + + while True: + filename = input("Введите имя текстового файла с сигналом: ").strip() + if os.path.isfile(filename): + break + + + + X = [] + with open(filename, 'r') as f: + for line in f: + parts = line.strip().split() + for p in parts: + X.append(float(p)) + + + while True: + + M1 = float(input("Введите M1 (нижняя граница разности): ")) + M2 = float(input("Введите M2 (верхняя граница разности, M2 > M1): ")) + if M1 < M2: + break + else: + print("M1 должно быть меньше M2.") + + + from M1 import find_anomalous_indices, correct_anomalies + + + K = find_anomalous_indices(X, M1, M2) + print(f"Аномальные индексы: {K}") + + + if K: + X1 = correct_anomalies(X, K) + print("Исправленный сигнал:", X1) + + + with open("Res44.bin", "wb") as f: + pickle.dump(X1, f) + print("Результат записан в Res44.bin") + else: + print("Аномальных отсчётов не обнаружено.") + + return X, X1 if K else X + +``` + +### Модуль 0 + +```py +import pylab +from M2 import run_M2 + +def main(): + X, X1 = run_M2() + + pylab.figure(figsize=(10, 5)) + pylab.subplot(1, 2, 1) + pylab.plot(X, label='Исходный сигнал') + pylab.title("Исходный сигнал") + pylab.xlabel("Отсчёты") + pylab.ylabel("Значение") + pylab.grid(True) + + pylab.subplot(1, 2, 2) + pylab.plot(X1, label='Исправленный сигнал', color='orange') + pylab.title("Исправленный сигнал") + pylab.xlabel("Отсчёты") + pylab.ylabel("Значение") + pylab.grid(True) + + pylab.tight_layout() + pylab.show() + +if __name__ == "__main__": + main() +``` + +## Результат + +### Для -2 и 5: + +```py + +Введите имя текстового файла с сигналом: signal.txt +Введите M1 (нижняя граница разности): -2 +Введите M2 (верхняя граница разности, M2 > M1): 5 +Аномальные индексы: (4, 6, 11, 12, 13, 14, 15, 19, 21, 23, 24, 25, 26, 27, 29, 31, 32, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47) +Исправленный сигнал: [4.263134009624702, 4.067283548723314, 4.874920842655541, 4.834128754109237, 8.223862521322928, 11.61359628853662, 10.259560286375322, 8.905524284214025, 8.186641831318802, 8.638222773625724, 10.700010550793879, 12.779448770191685, 8.629985270429243, 9.424308136414886, 8.760419982249502, 9.797062915592713, 10.833705848935924, 9.862509524620615, 11.252167038027647, 12.422198441999871, 13.592229845972096, 10.572927730780062, 7.553625615588027, 7.133718458186862, 9.520052608400205, 9.619255895493783, 6.667092820033337, 5.8050169142673225, 4.942941008501308, 8.946793175470068, 12.950645342438829, 11.648800239430907, 12.308287984866364, 12.96777573030182, 13.306115816113852, 6.713448306681809, 8.251140355134947, 9.870702494815166, 11.490264634495386, 6.833826225314228, 7.604423745564782, 10.493832859781548, 7.59146239455013, 11.577494034371783, 9.08507549520261, 16.320693167525047, 10.352440652123295, 8.987414956427836, 7.622389260732377, 11.17003135779134] +Результат записан в Res44.bin + +``` + +![alt text](-2and5.png) + +### Для -20 и 50: + +```py + +Введите имя текстового файла с сигналом: signal.txt +Введите M1 (нижняя граница разности): -20 +Введите M2 (верхняя граница разности, M2 > M1): 50 +Аномальные индексы: () +Аномальных отсчётов не обнаружено. + +``` + +![alt text](-20and50.png) \ No newline at end of file