# Индивидуальное контрольное задание по теме 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 ```