# Индивидуальное контрольное задание по теме 9 Бушманов А.С. А-01-23 ## Задание: Вариант 14 M3_14 1)      Создайте модуль М1, содержащий две функции: - функция 1: аргумент - список или кортеж с выборкой; функция должна произвести расчет по выборке списка с наименьшим и наибольшим значениями, размахом (разность наибольшего и наименьшего значений), оценкой стандартного отклонения и отношением размаха к стандартному отклонению; - функция 2: аргументы - список или кортеж с выборкой и целочисленный параметр m; функция должна обратиться к функции 1 и затем определить границы m непересекающихся интервалов в диапазоне величины между наибольшим и наименьшим значениями по выборке, содержащих примерно одинаковое число элементов выборки; функция должна вернуть 2 списка: со значениями границ интервалов и с числами элементов в интервалах. 2)      Создайте еще один модуль М2, в котором должны выполняться следующие операции: - запрашивается имя текстового файла с выборкой, проверяется его наличие и при отсутствии - повторяется запрос; - выборка вводится из файла и записывается в список (в строках файла может быть разное число значений, разделенных пробелами); - запрашиваются у пользователя число интервалов разбиения; - с помощью функций 1 и 2 производится определение границ интервалов и чисел элементов в них. - отображается столбиковая диаграмма с интервалами и числами элементов выборки в них. 3)      Создайте модуль М0 - главную программу, которая вызывает М2 и отображает результаты расчета на экране. 4)      Проведите расчеты при 2-х разных файлах с выборками ## Решение: #### Модуль 1: M1 ```python import math def stats(sample): x = list(sample) n = len(x) mn = min(x) mx = max(x) razmah = mx - mn mean = sum(x) / n if n > 1: s = math.sqrt(sum((xi - mean) ** 2 for xi in x) / (n - 1)) else: s = 0.0 if s == 0: ratio = None else: ratio = razmah / s return mn, mx, razmah, s, ratio def intervals(sample, m): mn, mx, razmah, s, ratio = stats(sample) x = sorted(sample) n = len(x) borders = [mn] for k in range(1, m): idx = int(k * n / m) borders.append(x[idx]) borders.append(mx) counts = [0] * m for v in sample: placed = False for i in range(m - 1): if borders[i] <= v < borders[i + 1]: counts[i] += 1 placed = True break if not placed: if borders[m - 1] <= v <= borders[m]: counts[m - 1] += 1 return borders, counts ``` #### Модуль 2: M2 ```python import math def stats(sample): x = list(sample) n = len(x) mn = min(x) mx = max(x) razmah = mx - mn mean = sum(x) / n if n > 1: s = math.sqrt(sum((xi - mean) ** 2 for xi in x) / (n - 1)) else: s = 0.0 if s == 0: ratio = None else: ratio = razmah / s return mn, mx, razmah, s, ratio def intervals(sample, m): mn, mx, razmah, s, ratio = stats(sample) x = sorted(sample) n = len(x) borders = [mn] for k in range(1, m): idx = int(k * n / m) borders.append(x[idx]) borders.append(mx) counts = [0] * m for v in sample: placed = False for i in range(m - 1): if borders[i] <= v < borders[i + 1]: counts[i] += 1 placed = True break if not placed: if borders[m - 1] <= v <= borders[m]: counts[m - 1] += 1 return borders, counts ``` #### Модуль 3: M0 ```python import M2 result = M2.run() print("\nГотово. Результаты получены.") ``` ## Ответ c sampe1.txt: ```python import M0 Введите имя файла с выборкой: sample1 Файл не найден. Попробуйте ещё раз. Введите имя файла с выборкой: sample1.txt Файл не найден. Попробуйте ещё раз. Введите имя файла с выборкой: sample1.txt Размер выборки: 20 Введите число интервалов m: 5 --- Статистики --- min = 1.0 max = 12.0 размах = 11.0 std = 3.216323497738569 размах/std = 3.4200539864022432 --- Интервалы --- [1.0; 3.0) -> 4 [3.0; 4.0) -> 3 [4.0; 6.0) -> 5 [6.0; 9.0) -> 4 [9.0; 12.0] -> 4 Готово. Результаты получены. ``` ![[task_figure_1.png]]## Ответ c sampe2.txt: ```python import M0 Введите имя файла с выборкой: sample2.txt Размер выборки: 18 Введите число интервалов m: 8 --- Статистики --- min = -5.0 max = 34.0 размах = 39.0 std = 9.751319669363612 размах/std = 3.9994586704534942 --- Интервалы --- [-5.0; -3.0) -> 2 [-3.0; -1.0) -> 2 [-1.0; 0.0) -> 1 [0.0; 1.0) -> 3 [1.0; 2.0) -> 2 [2.0; 5.0) -> 3 [5.0; 13.0) -> 2 [13.0; 34.0] -> 3 Готово. Результаты получены. ``` ![[task_figure_2.png]]#### Файл sample1.txt: ``` 1 2 3 4 5 6 2 2 3 3 4 4 5 6 7 8 9 10 11 12 ``` #### Файл sample2.txt: ``` -5 -4 -3 -2 -1 0 0 0 1 1 2 2 3 5 8 13 21 34 ```