# Общее контрольное задание

Зеленкина Катерина, А-02-23

## Задание
1. Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с за-держкой на заданное время Т.
2. Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: вы-борка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения.
3. Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y ли-нейной регрессии при значении переменной Х 
Y=b1+b2*X
и имеющую аргументы b1, b2 и X.

## Решение
```py
def signal_delay(current_input, delay_time, output_history, input_history):
    """
    Расчет выходного сигнала устройства задержки
    current_input - текущее значение входного сигнала
    delay_time - время задержки
    output_history - история выходных значений
    input_history - история входных значений
    """
    if len(input_history) < delay_time:
        return 0
    else:
        return input_history[-delay_time]


d = 4
output_signal = []
input_signal = [1, 2, 3, 4, 5, 6, 7]
input_history = []

for x in input_signal:
    input_history.append(x)
    y = signal_delay(x, d, output_signal, input_history)
    output_signal.append(y)

print("Входной сигнал:", input_signal)
print("Выходной сигнал:", output_signal, "(задержка 4)")


Входной сигнал: [1, 2, 3, 4, 5, 6, 7]
Выходной сигнал: [0, 0, 0, 1, 2, 3, 4] (задержка 4)
```

```py
# Пункт 2
def raschet_giostogrammy(viborka, kol_int):
    """
    Расчет гистограммы по выборке случайной величины
    
    Аргументы:
    viborka - список значений выборки
    kol_int - число интервалов разбиения
    
    Возвращает:
    w - список с числами элементов в интервалах
    """
    minn = min(viborka)
    maxx = max(viborka)
    shirina = (maxx - minn) / kol_int  

    w = [0] * kol_int

    for znachenie in viborka:
        num_int = int((znachenie - minn) / shirina)  
        if num_int == kol_int:
            num_int = kol_int - 1
        w[num_int] += 1

    # Вывод таблицы
    print("Гистограмма:")
    print("Интервал\t\tКоличество")
    for i in range(kol_int):
        start = minn + i * shirina
        end = minn + (i + 1) * shirina
        print(f"{start:.2f} - {end:.2f}\t\t{w[i]}")

    return w

# Проверка функции
import random

viborka = [random.gauss(0, 1) for _ in range(100)]
kol_interv = 5
resultat = raschet_giostogrammy(viborka, kol_interv)



Гистограмма:
Интервал		Количество
-2.11 - -1.31		13
-1.31 - -0.52		12
-0.52 - 0.28		30
0.28 - 1.07		34
1.07 - 1.86		11
```

```py
anonim_func = lambda b1, b2, X: b1 + b2 * X
print(anonim_func (1, 2, 3))

7
```