diff --git a/TEMA8/test.md b/TEMA8/test.md index c5249a6..d65ebfe 100644 --- a/TEMA8/test.md +++ b/TEMA8/test.md @@ -3,42 +3,121 @@ ## Задание ``` -#2 (из ЛР№7) -Разработайте функцию с 4 аргументами, создающую последовательность отсчетов случайного, нормально распределенного сигнала типа белого шума с заданными параметрами: математическое ожидание и дисперсия, число отсчетов (аргументы функции). Сигнал должен быть записан построчно, по 3 элемента в строке с разделителем - пробел в текстовый файл с заданным именем (4-й аргумент функции), а также возвращен в вызывающую программу в виде списка. +#7 +1) Создайте модуль М1, содержащий две функции: -Дополнительно: раскидать ввод параметров в один .py файл, выполнение функции в другой .py файл +- функция 1: аргументы - три целочисленных параметра: Т1, Т2 и М; функция должна рассчитать и вернуть список СС с М неповторяющимися целыми числами в интервале значений между Т1 и Т2; + +- функция 2: аргументы - список СС с неповторяющимися целыми числами и список или кортеж КК с целыми числами; функция должна создать список НН, с числом элементов, равным длине СС, и с целыми значениями из КК, близкими к соответствующим элементам в СС; так, элемент КК[i] считается близким к элементу CC[j], если для него абсолютная разность |KK[i]-CC[j]| - наименьшая по всем CC[j]. + +2) Создайте еще один модуль М2, в котором должны выполняться операции: + +- запрашиваются у пользователя целочисленные границы диапазона значений Т1 и Т2; проверяется T1(T2-T1), то принимается М=Т2-Т1; + +- с помощью функции 1 создается и отображается список СС; + +- создается список КК с 500 случайными целыми числами в диапазоне значений от Т1 до Т2; + +- с помощью функции 2 рассчитывается список НН; результат отображается на экране. + +3) Создайте модуль М0 - главную программу, которая вызывает М2 и записывает списки КК, СС и НН в бинарный файл Res1212.bin. + +4) Проверьте программу при двух наборах исходных данных: + +- Т1=34, Т2=78, М= 10 + +- Т1=25, Т2=30, М=8. ``` ## Решение -### Файл input_data.py +### Файл M2.py ```py -filename = input('Enter filename: ') -mean = float(input('Enter mean: ')) -dispersia = float(input('Enter dispersia: ')) -count = int(input('Enter count: ')) +from typing import Tuple +import random +from M1 import func1, func2 + + +def _input_int(prompt: str) -> int: + s = input(prompt) + return int(s) + + +def _input_range_t1_t2() -> Tuple[int, int]: + while True: + t1 = _input_int("T1: ") + t2 = _input_int("T2: ") + if t1 < t2: + return t1, t2 + + +def main(): + t1, t2 = _input_range_t1_t2() + + m = _input_int("m: ") + max_m = t2 - t1 + if m > max_m: + m = max_m + + CC = func1(t1, t2, m) + KK = [random.randint(t1, t2) for i in range(500)] + + HH = func2(CC, KK) + print("HH:", HH) + return CC, KK, HH + ``` -### Файл file_with_func.py +### Файл M1.py ```py -from random import gauss -import math +from typing import List, Union, Tuple +from random import sample + + +def func1(T1: int, T2: int, M: int) -> List[int]: + CC = sample(range(T1, T2+1), M) + return CC + +from typing import List, Tuple, Union -def func(mean, dispersia, count): - otklonenye = math.sqrt(dispersia) - samples = [gauss(mean, otklonenye) for i in range(count)] +def func2(CC: List[int], KK: Union[Tuple[int, ...], List[int]]) -> List[int]: + HH = [] + KK = list(KK) - return samples + for c in CC: + nearest = min(KK, key=lambda x: abs(x - c)) + HH.append(nearest) + + return HH ``` -### Файл test.py +### Файл M0.py ```py -from input_data import * -from file_with_func import func +import pickle +import M2 + + +def main(): + CC, KK, HH = M2.main() + + data = { + "CC": CC, + "KK": KK, + "HH": HH, + } -samples = func(mean, dispersia, count) + with open("Res1212.bin", "wb") as f: + pickle.dump(data, f) -with open(filename, 'w') as f: - for i in range(0, count, 3): - f.write(''.join(f"{' '.join(map(lambda x: str(x), samples[i:i+3]))}\n")) +main() +``` + +### Вывод +```py +>>> T1: 34 +>>> T2: 78 +>>> m: 10 +HH: [48, 75, 60, 69, 70, 45, 63, 59, 66, 38] ``` \ No newline at end of file