4.9 KiB
Тест по модулю 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 до длины списка.
Решение
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, и отображается результат ее работы.
Решение
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.
Решение
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 отсчетами синусоидального сигнала с некоторым периодом и амплитудой.
Решение
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()