From b4ce53684bd0cbaebe780a9bccfc492c6e7282a3 Mon Sep 17 00:00:00 2001 From: KhatiukhinYS Date: Mon, 8 Dec 2025 16:19:12 +0300 Subject: [PATCH] IKZ --- TEMA9/IKZ.md | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++ TEMA9/MMM0.py | 18 ++++++++ TEMA9/MMM1.py | 23 ++++++++++ TEMA9/MMM2.py | 51 +++++++++++++++++++++ 4 files changed, 215 insertions(+) create mode 100644 TEMA9/IKZ.md create mode 100644 TEMA9/MMM0.py create mode 100644 TEMA9/MMM1.py create mode 100644 TEMA9/MMM2.py diff --git a/TEMA9/IKZ.md b/TEMA9/IKZ.md new file mode 100644 index 0000000..20d1b3b --- /dev/null +++ b/TEMA9/IKZ.md @@ -0,0 +1,123 @@ +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 cor_anom(X, K): + + X1 = X.copy() + n = len(X) + + for idx in K: + if idx == n - 1: + X1[idx] = X[idx - 1] + elif idx == 0: + X1[idx] = X[idx + 1] + else: + X1[idx] = 0.5 * (X[idx - 1] + X[idx + 1]) + + return X1 + +``` \ No newline at end of file diff --git a/TEMA9/MMM0.py b/TEMA9/MMM0.py new file mode 100644 index 0000000..c9f2192 --- /dev/null +++ b/TEMA9/MMM0.py @@ -0,0 +1,18 @@ +import matplotlib.pyplot as plt +from MMM2 import main_pr + +def plot_signals(X, X1): + plt.figure() + plt.plot(X, label='X',marker='o', linestyle='-') + plt.plot(X1, label='X1',marker='s', linestyle='--') + plt.title('Сравнение исходного и исправленного сигналов') + plt.legend() + plt.grid(True) + plt.show() + + +if __name__ == "__main__": + result = main_pr() + if result: + X, X1 = result if result[1] is not None else (result[0], None) + plot_signals(X, X1) diff --git a/TEMA9/MMM1.py b/TEMA9/MMM1.py new file mode 100644 index 0000000..35fd45a --- /dev/null +++ b/TEMA9/MMM1.py @@ -0,0 +1,23 @@ +def find_anomal(X, M1, M2): + + K = [] + for i in range(1, len(X)): + diff = X[i] - X[i - 1] + if diff < M1 or diff > M2: + K.append(i) + return tuple(K) + +def cor_anom(X, K): + + X1 = X.copy() + n = len(X) + + for idx in K: + if idx == n - 1: + X1[idx] = X[idx - 1] + elif idx == 0: + X1[idx] = X[idx + 1] + else: + X1[idx] = 0.5 * (X[idx - 1] + X[idx + 1]) + + return X1 diff --git a/TEMA9/MMM2.py b/TEMA9/MMM2.py new file mode 100644 index 0000000..3f45fac --- /dev/null +++ b/TEMA9/MMM2.py @@ -0,0 +1,51 @@ +import os +import pickle +from MMM1 import find_anomal, cor_anom + +def read_sig(filename): + numbers = [] + try: + with open(filename, 'r', encoding='utf-8') as f: + for line in f: + parts = line.strip().split() + for part in parts: + try: + numbers.append(float(part)) + except ValueError: + continue + except Exception as e: + print(f"Ошибка чтения файла: {e}") + return None + return numbers + +def main_pr(): + while True: + filename = input("Введите имя текстового файла с сигналом: ") + if os.path.isfile(filename): + break + print("Файл не найден. Попробуйте снова.") + + X = read_sig(filename) + if X is None: + print("Не удалось прочитать сигнал.") + return + + M1 = float(input("Введите M1 (нижняя граница): ")) + M2 = float(input("Введите M2 (верхняя граница): ")) + + anomalies = find_anomal(X, M1, M2) + if anomalies: + print(f"Индексы аномальных отсчетов: {anomalies}") + else: + print("Индексов аномальных отcчетов нет") + + if anomalies: + X1 = cor_anom(X, anomalies) + + with open('Res44.bin', 'wb') as f: + pickle.dump(X1, f) + print("Результат сохранён в файл Res44.bin") + else: + print("Аномальных отсчетов не обнаружено.") + + return X, X1 if anomalies else None