From 379552159f7ef1e4a6d492cb2ae9841a43559934 Mon Sep 17 00:00:00 2001 From: BushmanovAS Date: Fri, 19 Dec 2025 11:19:05 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=98=D0=9A=D0=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEMA9/test.md | 173 ++++++++++++++++++ .../{task_figure_1.png => test_figure_1.png} | Bin .../{task_figure_2.png => test_figure_2.png} | Bin 3 files changed, 173 insertions(+) create mode 100644 TEMA9/test.md rename TEMA9/{task_figure_1.png => test_figure_1.png} (100%) rename TEMA9/{task_figure_2.png => test_figure_2.png} (100%) diff --git a/TEMA9/test.md b/TEMA9/test.md new file mode 100644 index 0000000..534ab9a --- /dev/null +++ b/TEMA9/test.md @@ -0,0 +1,173 @@ +# Индивидуальное контрольное задание по теме 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 +``` diff --git a/TEMA9/task_figure_1.png b/TEMA9/test_figure_1.png similarity index 100% rename from TEMA9/task_figure_1.png rename to TEMA9/test_figure_1.png diff --git a/TEMA9/task_figure_2.png b/TEMA9/test_figure_2.png similarity index 100% rename from TEMA9/task_figure_2.png rename to TEMA9/test_figure_2.png