форкнуто от main/python-labs
Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
161 строка
4.9 KiB
Markdown
161 строка
4.9 KiB
Markdown
# Тест по модулю 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()
|
|
``` |