diff --git a/TEMA9/M0.py b/TEMA9/M0.py new file mode 100644 index 0000000..d823c8e --- /dev/null +++ b/TEMA9/M0.py @@ -0,0 +1,3 @@ +import M2 +result = M2.run() +print("\nГотово. Результаты получены.") diff --git a/TEMA9/M1.py b/TEMA9/M1.py new file mode 100644 index 0000000..42aa9b8 --- /dev/null +++ b/TEMA9/M1.py @@ -0,0 +1,38 @@ +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 diff --git a/TEMA9/M2.py b/TEMA9/M2.py new file mode 100644 index 0000000..52f888c --- /dev/null +++ b/TEMA9/M2.py @@ -0,0 +1,49 @@ +import os +import M1 +import matplotlib.pyplot as plt +def read_sample(filename): + data = [] + with open(filename, "r", encoding="utf-8") as f: + for line in f: + for t in line.split(): + data.append(float(t)) + return data +def run(): + while True: + fname = input("Введите имя файла с выборкой: ").strip() + if os.path.exists(fname): + break + print("Файл не найден. Попробуйте ещё раз.") + sample = read_sample(fname) + print("Размер выборки:", len(sample)) + m = int(input("Введите число интервалов m: ")) + mn, mx, razmah, s, ratio = M1.stats(sample) + borders, counts = M1.intervals(sample, m) + print("\n--- Статистики ---") + print("min =", mn) + print("max =", mx) + print("размах =", razmah) + print("std =", s) + print("размах/std =", ratio) + print("\n--- Интервалы ---") + for i in range(m): + left = borders[i] + right = borders[i+1] + print(f"[{left}; {right}) -> {counts[i]}" if i < m-1 else f"[{left}; {right}] -> {counts[i]}") + labels = [] + for i in range(m): + a = borders[i] + b = borders[i+1] + if i < m-1: + labels.append(f"[{a:.2f};{b:.2f})") + else: + labels.append(f"[{a:.2f};{b:.2f}]") + + plt.bar(labels, counts) + plt.xticks(rotation=45, ha="right") + plt.title("Распределение элементов по интервалам") + plt.xlabel("Интервалы") + plt.ylabel("Число элементов") + plt.tight_layout() + plt.show() + return mn, mx, razmah, s, ratio, borders, counts diff --git a/TEMA9/sample1.txt b/TEMA9/sample1.txt new file mode 100644 index 0000000..3281e92 --- /dev/null +++ b/TEMA9/sample1.txt @@ -0,0 +1,4 @@ +1 2 3 4 5 6 +2 2 3 3 4 4 +5 6 7 8 9 +10 11 12 diff --git a/TEMA9/sample2.txt b/TEMA9/sample2.txt new file mode 100644 index 0000000..5ead3a6 --- /dev/null +++ b/TEMA9/sample2.txt @@ -0,0 +1,4 @@ +-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/task_figure_1.png new file mode 100644 index 0000000..174510d Binary files /dev/null and b/TEMA9/task_figure_1.png differ diff --git a/TEMA9/task_figure_2.png b/TEMA9/task_figure_2.png new file mode 100644 index 0000000..e4d4b5a Binary files /dev/null and b/TEMA9/task_figure_2.png differ