Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

4.5 KiB

Индивидуальное контрольное задание по теме 8

Подольский Никита, А-01-23

Задание (Вариант 4)

Разработайте функцию с 5 аргументами, создающую отсчеты сигнала в виде последовательности импульсов с заданными параметрами: амплитуда, продолжительность импульса, период (им-пульс + пауза), число отсчетов (аргументы функции). Сигнал должен быть записан в виде столбца в текстовый файл с заданным именем (5-й аргумент функции), а также возвращен в вызывающую программу в виде списка.

По указанному преподавателем 4ому варианту контрольного задания разработайте функцию, на ее основе создайте модуль. Создайте второй модуль, в котором должны быть инструкции для ввода/создания исходных данных для проверки работы функции, вызов функции и отображение полученных результатов.

Решение

Вариант 4

# 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

# 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()

Результат

Генератор импульсного сигнала (вариант 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