форкнуто от main/python-labs
Родитель
4b903bc3af
Сommit
d2594ad7a4
@ -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()
|
||||||
|
```
|
||||||
Загрузка…
Ссылка в новой задаче