форкнуто от main/python-labs
Родитель
fad1a92cca
Сommit
5f9f212f15
@ -0,0 +1,116 @@
|
||||
# Индивидуальное контрольное задание по теме 8
|
||||
Подольский Никита, А-01-23
|
||||
|
||||
## Задание (Вариант 4)
|
||||
|
||||
Разработайте функцию с 5 аргументами, создающую отсчеты сигнала в виде последовательности импульсов с заданными параметрами: амплитуда, продолжительность импульса, период (им-пульс + пауза), число отсчетов (аргументы функции). Сигнал должен быть записан в виде столбца в текстовый файл с заданным именем (5-й аргумент функции), а также возвращен в вызывающую программу в виде списка.
|
||||
|
||||
По указанному преподавателем 4ому варианту контрольного задания разработайте функцию, на ее основе создайте модуль. Создайте второй модуль, в котором должны быть инструкции для ввода/создания исходных данных для проверки работы функции, вызов функции и отображение полученных результатов.
|
||||
|
||||
## Решение
|
||||
### Вариант 4
|
||||
``` python
|
||||
# module_pulse.py
|
||||
|
||||
def generate_pulse_signal(ampl, pulse_len, period, n_samples, filename):
|
||||
|
||||
if not isinstance(pulse_len, int) or pulse_len <= 0:
|
||||
raise ValueError("pulse_len должен быть целым > 0")
|
||||
if not isinstance(period, int) or period <= 0:
|
||||
raise ValueError("period должен быть целым > 0")
|
||||
if period < pulse_len:
|
||||
raise ValueError("period должен быть >= pulse_len (иначе пауза отрицательная)")
|
||||
if not isinstance(n_samples, int) or n_samples <= 0:
|
||||
raise ValueError("n_samples должен быть целым > 0")
|
||||
if not isinstance(filename, str) or filename.strip() == "":
|
||||
raise ValueError("filename должен быть непустой строкой")
|
||||
|
||||
signal = []
|
||||
for i in range(n_samples):
|
||||
pos_in_period = i % period
|
||||
if pos_in_period < pulse_len:
|
||||
signal.append(ampl)
|
||||
else:
|
||||
signal.append(0)
|
||||
|
||||
# запись столбцом
|
||||
with open(filename, "w", encoding="utf-8") as f:
|
||||
for i in range(len(signal)):
|
||||
f.write(str(signal[i]) + "\n")
|
||||
|
||||
|
||||
return signal
|
||||
|
||||
```
|
||||
|
||||
|
||||
```python
|
||||
# main_test.py
|
||||
|
||||
from module_pulse import generate_pulse_signal
|
||||
|
||||
def main():
|
||||
print("Генератор импульсного сигнала (вариант 4)\n")
|
||||
|
||||
ampl = float(input("Амплитуда: "))
|
||||
pulse_len = int(input("Длительность импульса (отсчёты): "))
|
||||
period = int(input("Период (импульс+пауза, отсчёты): "))
|
||||
n_samples = int(input("Число отсчётов: "))
|
||||
filename = input("Имя файла для записи (например signal.txt): ").strip()
|
||||
|
||||
signal = generate_pulse_signal(ampl, pulse_len, period, n_samples, filename)
|
||||
|
||||
print("\nГотово.")
|
||||
print(f"Сигнал записан в файл: {filename}")
|
||||
print("Первые 30 отсчётов (или меньше):")
|
||||
print(signal[:30])
|
||||
|
||||
# чтобы было видно структуру по периодам:
|
||||
print("\nСигнал по строкам (индекс: значение) для первых 30:")
|
||||
for i in range(min(30, len(signal))):
|
||||
print(i, ":", signal[i])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
```
|
||||
|
||||
Результат
|
||||
``` python
|
||||
Генератор импульсного сигнала (вариант 4)
|
||||
|
||||
Амплитуда: 5
|
||||
Длительность импульса (отсчёты): 3
|
||||
Период (импульс+пауза, отсчёты): 8
|
||||
Число отсчётов: 20
|
||||
Имя файла для записи (например signal.txt): signal.txt
|
||||
|
||||
Готово.
|
||||
Сигнал записан в файл: signal.txt
|
||||
Первые 30 отсчётов (или меньше):
|
||||
[5.0, 5.0, 5.0, 0, 0, 0, 0, 0, 5.0, 5.0, 5.0, 0, 0, 0, 0, 0, 5.0, 5.0, 5.0, 0]
|
||||
|
||||
Сигнал по строкам (индекс: значение) для первых 30:
|
||||
0 : 5.0
|
||||
1 : 5.0
|
||||
2 : 5.0
|
||||
3 : 0
|
||||
4 : 0
|
||||
5 : 0
|
||||
6 : 0
|
||||
7 : 0
|
||||
8 : 5.0
|
||||
9 : 5.0
|
||||
10 : 5.0
|
||||
11 : 0
|
||||
12 : 0
|
||||
13 : 0
|
||||
14 : 0
|
||||
15 : 0
|
||||
16 : 5.0
|
||||
17 : 5.0
|
||||
18 : 5.0
|
||||
19 : 0
|
||||
```
|
||||
|
||||
Загрузка…
Ссылка в новой задаче