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

Коломейцев Дмитрий, А-02-23

## Задание

#### Вариант 5.

1. Разработайте функцию с 2 аргументами: x и В, реализующую преобразование входного сигнала x по формуле:
* y = 0, если -B ≤ x ≤ B
* y = x - B, если x > B
* y = x + B, если x < -B

2. Создайте список со 100 значениями входного сигнала х:
* случайными, 
* нормально распределенными числами,
* с математическим ожиданием 0.5,
* дисперсией 25. 

3. Для элементов списка с помощью функции рассчитайте список со значениями выходного сигнала y при В = 4.5. 

4. Записать результаты в текстовый файл в виде двух столбцов: хi, yi.

## Решение

Функция для линейно-кусочного преобразования transform_signal находится в модуле transformation_module.py

Код представлен ниже:

```py
def transform_signal(x, B):
    """
        Кусочно-линейное преобразование:
        y = 0          при -B <= xi <= B
        y = xi - B     при xi > B
        y = xi + B     при xi < -B
        
        x - список входных значений
    """
    y = []
    for xi in x:
        if -B <= xi <= B:
            y.append(0)
        elif xi > B:
            y.append(xi - B)
        else:
            y.append(xi + B)
    return y
```

Код основного модуля:

```py
import random
import math
from transform_module import transform_signal

def main():
    x = [random.gauss(0.5, 5) for i in range(100)]
    # 0.5 - мат ожидание, 5 - СКО = корень из 25 (дисперсия = 25)
    y = transform_signal(x, 4.5)

    with open('file.txt', 'w') as f:
		# это всё для красивого вывода
        f.write(f'{"xi":>12} {"yi":>12}\n')
        for xi, yi in zip(x, y):
            f.write(f'{xi:>12.6f} {yi:>12.6f}\n')

    # вывод в файле file.txt

main()
```

Содержимое файла file.txt:
```py
          xi           yi
    8.609841     4.109841
   -5.655793    -1.155793
    1.344068     0.000000
	........     ........
    4.294494     0.000000
    0.952499     0.000000
```