From d2594ad7a4b4274eed9546915efbedb655dd06d6 Mon Sep 17 00:00:00 2001 From: ShinkarenkoVA Date: Mon, 8 Dec 2025 16:19:25 +0300 Subject: [PATCH] Module TEst --- TEMA8/ModuleTest3.md | 161 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 TEMA8/ModuleTest3.md diff --git a/TEMA8/ModuleTest3.md b/TEMA8/ModuleTest3.md new file mode 100644 index 0000000..f924ae0 --- /dev/null +++ b/TEMA8/ModuleTest3.md @@ -0,0 +1,161 @@ +# Тест по модулю 3, вариант 16 + +## 1. Задание + +Создайте модуль М1, содержащий две функции: +- функция 1: аргументы - имя бинарного файла, содержащего кортеж KRT с элементами-отсчетами некоторого сигнала и числовой параметр Т; в функции должны вводиться данные из файла, вычисляться и возвращаться список SPS, элементы которого определяются по правилу: SPS[0] равен среднему значению по кортежу, SPS[i]=(KRT[i]+SPS[i-1]*T)/(1+T) (для i от 1 до длины KRT); +- функция 2: аргумент - список SPS1 с числовыми значениями; по нему рассчитывается и возвращается среднее значение приращений SPS[i]-SPS[i-1] для i от 1 до длины списка. + +## Решение + +```py +import pickle + +def func1(filename, T): + fp = open(filename, 'rb') + KRT = pickle.load(fp) + fp.close() + SPS = [] + SPS.append(sum(KRT) / len(KRT)) + for i in range(1, len(KRT)): + v = (KRT[i] + SPS[i-1] * T) / (1 + T) + SPS.append(v) + return SPS + +def func2(SPS1): + prirash = [] + + for i in range(1, len(SPS1)): + inc = SPS1[i] - SPS1[i-1] + prirash.append(inc) + if prirash: + return sum(prirash) / len(prirash) + else: + return 0.0 +``` + +## 2. Задание + +Создайте еще один модуль М2, в котором должны выполняться операции: + +- запрашивается и вводится имя бинарного файла с данными; проверяется наличие файла и при отсутствии - повторение запроса; + +- запрашивается значение параметра Т (проверить Т>0); + +- вызывается функция 1 и отображаются результаты ее работы; + +- применяется функция 2 со списком, полученным из функции 1, и отображается результат ее работы. + +## Решение + +```py +import os +import M1 + +def M2_main(): + while True: + fname = input("Введите имя файла: ") + if not fname.endswith('.bin'): + fname = fname + '.bin' + if os.path.exists(fname): + print("Файл найден") + break + else: + print("Файл не найден, попробуйте еще раз") + + + while True: + try: + T = float(input("Введите T (больше 0): ")) + if T > 0: + break + else: + print("T должен быть больше 0") + except: + print("Введите число") + + + SPS = M1.func1(fname, T) + + print("\nРезультаты (первые 5 значений):") + for i in range(min(5, len(SPS))): + print(f"SPS[{i}] = {SPS[i]}") + + if len(SPS) > 5: + print("...") + print(f"SPS[{len(SPS)-1}] = {SPS[-1]}") + + + sred = M1.func2(SPS) + print(f"\nСреднее приращение: {sred}") + + return SPS +``` + +## 3. Задание + +Создайте модуль М0 - главную программу, которая вызывает М2 и отображает в виде графика полученный из функции 1 список, а также выводит этот список в бинарный файл с именем RES77.bin. + +## Решение + +```py +import pickle +import matplotlib.pyplot as plt +import M2 + +def main(): + print("Начало работы") + + SPS = M2.M2_main() + + if SPS: + + fp = open('RES77.bin', 'wb') + pickle.dump(SPS, fp) + fp.close() + print("Сохранено в RES77.bin") + + plt.plot(SPS) + plt.title("График SPS") + plt.show() + + print("Конец работы") + +if __name__ == "__main__": + main() +``` + +## 4. Задание + +Подготовьте 2 файла с исходными данными: первый - со 40 значениями : 0,0,1,1,1,:, +второй - с 40 отсчетами синусоидального сигнала с некоторым периодом и амплитудой. + +## Решение + +```py +import pickle +import math +KRT1 = [] +for i in range(40): + if i % 5 == 0 or i % 5 == 1: + KRT1.append(0) + else: + KRT1.append(1) + +KRT1 = tuple(KRT1) +fp = open('data1.bin', 'wb') +pickle.dump(KRT1, fp) +fp.close() + + + +KRT2 = [] +for i in range(40): + x = 10 * math.sin(2 * math.pi * i / 8) + 5 + KRT2.append(x) + +KRT2 = tuple(KRT2) +fp = open('data2.bin', 'wb') +pickle.dump(KRT2, fp) +fp.close() +``` \ No newline at end of file