# Тест по модулю 3 Турханов Артем, А-03-23, Вариант 30 ## Задание 1) Создайте модуль М1, содержащий две функции: - функция 1: аргумент - список или кортеж с выборкой наблюдений; функция должна произвести расчет по выборке оценок математического ожидания, стандартного отклонения, медианы, наименьшего и наибольшего значений и вернуть их в виде списка в вызывающую программу; - функция 2; аргументы - список или кортеж с выборкой наблюдений и целочисленный параметр m; функция должна произвести расчет по этой выборке гистограммы распределения случайной величины с m интервалами и вернуть ее в виде списка в вызывающую программу. 2) Создайте еще один модуль М2, в котором должны выполняться следующие операции: - запрашивается имя текстового файла с выборкой, проверяется его наличие и при отсутствии - повторяется запрос; - выборка вводится из файла и записывается в список (в строках файла может быть разное число значений, разделенных пробелами); - запрашивается число интервалов для гистограммы (с проверкой его принадлежности к интервалу от 2 до 10); - с помощью функций 1 и 2 по выборке рассчитывается оценки статистических параметров случайной величины; - гистограмма отображается на экране в виде диаграммы; - рассчитанные значения записываются в бинарный файл Res1010.bib. 3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает результаты расчета на экране. 4) Проведите расчеты с 2 файлами с исходными данными. ## Решение Содержимое модуля M1: ```py def stats(t): t = list(t) N = len(t) m = sum(t)/N s = 0 for i in t: s += (i - m)\*\*2 std = s\*\*0.5 t.sort() med = 0 if N%2 != 0: med = t\[N//2] else: med = (t\[N//2 - 1] + t\[N//2])/2 return \[m,std,med,min(t),max(t)] def hist(t,m): t = list(t) f = False N = len(t) L = max(t) - min(t) l = L//m lg = min(t) rg = min(t)+l res = \[] for j in range(m): k = 0 for i in range(N): if (t\[i] >= lg) and (t\[i] < rg): k+=1 res.append(k) lg += l rg += l res\[-1] = res\[-1]+1 return res ``` Содержимое модуля M2: ```py import M1 import os import pickle fName = input('Введите имя файла: ') if os.path.exists(fName) == True: print('Успешно! Файл найден!') else: while os.path.exists(fName) != True: print('Такой файл не найден!') fName = input('Введите имя файла: ') fp = open(fName, 'r') data = fp.read() fp.close() ls = list(map(int, data.replace('\n', ' ').split(' '))) m = int(input('Введите количество интервалов m (m > 2; m < 10): ')) if (m <= 2) or (m >= 10): while (m <= 2) or (m >= 10): print('Недопустимое значение!') m = int(input('Введите m: ')) st = M1.stats(ls) hs = M1.hist(ls,m) print('Гистограмма по данным (количество * - количество значений в интервале):') for i in range(m): print(hs\[i]\*'\*') b = open('Res1010.bin', 'wb') pickle.dump(st, b) b.close() ``` Содержимое модуля M0: ```py import M2 print('Мат. ожидание: ',M2.st[0]) print('Стандартное отклонение: ',M2.st[1]) print('Медиана: ',M2.st[2]) print('Минимальное значение: ',M2.st[3]) print('Максимальное значение: ',M2.st[4]) ``` Содержимое файла data.txt: ![d.png](d.png) Содержимое файла data2.txt: ![d2.png](d2.png) Запуск модуля M0: ```py = RESTART: D:/!!!Download/Documents/учёба МЭИ/5 СЕМЕСТР/GIT/python-labs/TEMA9/M0.py Введите имя файла: data2.txt Успешно! Файл найден! Введите количество интервалов m (m > 2; m < 10): 7 Гистограмма по данным (количесто \* - количество значений в интервале): \*\*\* \*\*\*\* \*\*\*\*\*\* \*\* \*\*\*\* \* \*\*\*\* Мат. ожидание: 4.5 Стандартное отклонение: 13.228756555322953 Медиана: 4.0 Минимальное значение: 1 Максимальное значение: 9 = RESTART: D:/!!!Download/Documents/учёба МЭИ/5 СЕМЕСТР/GIT/python-labs/TEMA9/M0.py Введите имя файла: data.txt Успешно! Файл найден! Введите количество интервалов m (m > 2; m < 10): 5 Гистограмма по данным (количесто \* - количество значений в интервале): \*\* \* \*\*\* \*\* \*\*\* Мат. ожидание: 4.266666666666667 Стандартное отклонение: 7.933053216343208 Медиана: 4 Минимальное значение: 1 Максимальное значение: 8 ```