форкнуто от 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()
|
||||
```
|
||||
Загрузка…
Ссылка в новой задаче