diff --git a/TEMA9/M0.py b/TEMA9/M0.py new file mode 100644 index 0000000..10af110 --- /dev/null +++ b/TEMA9/M0.py @@ -0,0 +1,19 @@ +import M2 + +def main(): + print("ГЛАВНАЯ ПРОГРАММА M3_27") + print("Проведем расчеты для 2-х разных исходных файлов") + + print("\n") + print("РАСЧЕТ 1:") + M2.main() + + print("\n") + print("РАСЧЕТ 2:") + M2.main() + + print("\n") + print("Все расчеты завершены!") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/TEMA9/M1.py b/TEMA9/M1.py new file mode 100644 index 0000000..2bc3bd2 --- /dev/null +++ b/TEMA9/M1.py @@ -0,0 +1,31 @@ +def find_min_max_indices(data): + """ + Функция 1: Нахождение номеров элементов с наименьшим и наибольшим значениями + Аргумент: список или кортеж с выборкой + Возвращает: кортеж (индекс_мин, индекс_макс) + """ + if not data: + return -1, -1 + + min_index = data.index(min(data)) + max_index = data.index(max(data)) + return min_index, max_index + +def calculate_group_averages(data, N): + """ + Функция 2: Разделение выборки на группы и расчет средних значений + Аргументы: + - data: список или кортеж с выборкой + - N: целочисленный параметр - размер группы + Возвращает: список средних значений по группам + """ + if not data or N <= 0: + return [] + + group_averages = [] + for i in range(0, len(data), N): + group = data[i:i + N] + group_avg = sum(group) / len(group) + group_averages.append(group_avg) + + return group_averages \ No newline at end of file diff --git a/TEMA9/M2.py b/TEMA9/M2.py new file mode 100644 index 0000000..b35bad1 --- /dev/null +++ b/TEMA9/M2.py @@ -0,0 +1,86 @@ +import os +import struct +import matplotlib.pyplot as plt + +def read_binary_file(filename): + """Чтение данных из бинарного файла""" + data = [] + try: + with open(filename, 'rb') as f: + while True: + bytes_data = f.read(4) + if not bytes_data: + break + value = struct.unpack('f', bytes_data)[0] + data.append(value) + return data + except FileNotFoundError: + return None + +def main(): + # Запрос имени файла с проверкой наличия + while True: + filename = input("Введите имя бинарного файла с выборкой: ") + if os.path.exists(filename): + break + print(f"Файл '{filename}' не найден. Попробуйте еще раз.") + + # Чтение выборки из файла + data = read_binary_file(filename) + if data is None: + print("Ошибка чтения файла") + return + + print(f"Выборка считана из файла '{filename}'") + print(f"Число элементов: {len(data)}") + + # Импорт функций из M1 + from M1 import find_min_max_indices, calculate_group_averages + + # Использование функции 1: нахождение номеров min и max + min_index, max_index = find_min_max_indices(data) + print(f"Номер элемента с наименьшим значением: {min_index}") + print(f"Номер элемента с наибольшим значением: {max_index}") + print(f"Наименьшее значение: {data[min_index]:.3f}") + print(f"Наибольшее значение: {data[max_index]:.3f}") + + # Запрос числа N для формирования групп + while True: + try: + N = int(input(f"Введите число элементов N для формирования групп (1-{len(data)}): ")) + if 1 <= N <= len(data): + break + else: + print(f"Введите число от 1 до {len(data)}") + except ValueError: + print("Введите целое число") + + # Использование функции 2: расчет средних по группам + group_averages = calculate_group_averages(data, N) + + print(f"\nРазделение на {len(group_averages)} групп:") + for i, avg in enumerate(group_averages): + start_idx = i * N + end_idx = min((i + 1) * N - 1, len(data) - 1) + print(f"Группа {i+1} (элементы {start_idx}-{end_idx}): среднее = {avg:.3f}") + + # ПОСТРОЕНИЕ ГРАФИКА СОГЛАСНО ЗАДАНИЮ + plt.figure(figsize=(12, 6)) + + # Отображение исходной выборки (основное требование задания) + plt.plot(range(len(data)), data, 'bo-', linewidth=2, markersize=6, label='Исходная выборка') + + # Дополнительно выделяем min и max (не требуется заданием, но полезно) + plt.plot(min_index, data[min_index], 'ro', markersize=10, label=f'Минимум (индекс {min_index})') + plt.plot(max_index, data[max_index], 'go', markersize=10, label=f'Максимум (индекс {max_index})') + + plt.title(f'Исходная выборка из файла: {filename}') + plt.xlabel('Индекс элемента') + plt.ylabel('Значение') + plt.legend() + plt.grid(True, alpha=0.3) + plt.tight_layout() + plt.show() + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/TEMA9/create_test_files.py b/TEMA9/create_test_files.py new file mode 100644 index 0000000..7e76049 --- /dev/null +++ b/TEMA9/create_test_files.py @@ -0,0 +1,24 @@ +import struct +import random + +def create_test_files(): + """Создание тестовых бинарных файлов для задания M3_27""" + + # Файл 1: 15 элементов + data1 = [random.uniform(10, 50) for _ in range(15)] + with open('data1.bin', 'wb') as f: + for value in data1: + f.write(struct.pack('f', value)) + print("Создан файл 'data1.bin' (15 элементов)") + + # Файл 2: 20 элементов + data2 = [random.uniform(-5, 5) for _ in range(20)] + with open('data2.bin', 'wb') as f: + for value in data2: + f.write(struct.pack('f', value)) + print("Создан файл 'data2.bin' (20 элементов)") + + print("\nТестовые файлы готовы!") + +if __name__ == "__main__": + create_test_files() \ No newline at end of file diff --git a/TEMA9/data1.bin b/TEMA9/data1.bin new file mode 100644 index 0000000..e982ba5 Binary files /dev/null and b/TEMA9/data1.bin differ diff --git a/TEMA9/data2.bin b/TEMA9/data2.bin new file mode 100644 index 0000000..d37fe8c --- /dev/null +++ b/TEMA9/data2.bin @@ -0,0 +1,2 @@ +?m +L?Sw_@@]?hc`@~?ZF.?ʿy?zSg汽(>@f=,>ku \ No newline at end of file diff --git a/TEMA9/iz.md b/TEMA9/iz.md new file mode 100644 index 0000000..de19eec --- /dev/null +++ b/TEMA9/iz.md @@ -0,0 +1,224 @@ +# 27 +## create_test_files.py +```py +import struct +import random + +def create_test_files(): + """Создание тестовых бинарных файлов для задания M3_27""" + + # Файл 1: 15 элементов + data1 = [random.uniform(10, 50) for _ in range(15)] + with open('data1.bin', 'wb') as f: + for value in data1: + f.write(struct.pack('f', value)) + print("Создан файл 'data1.bin' (15 элементов)") + + # Файл 2: 20 элементов + data2 = [random.uniform(-5, 5) for _ in range(20)] + with open('data2.bin', 'wb') as f: + for value in data2: + f.write(struct.pack('f', value)) + print("Создан файл 'data2.bin' (20 элементов)") + + print("\nТестовые файлы готовы!") + +if __name__ == "__main__": + create_test_files() +``` +## M0.py +```py +import M2 + +def main(): + print("ГЛАВНАЯ ПРОГРАММА M3_27") + print("Проведем расчеты для 2-х разных исходных файлов") + + print("\n") + print("РАСЧЕТ 1:") + M2.main() + + print("\n") + print("РАСЧЕТ 2:") + M2.main() + + print("\n") + print("Все расчеты завершены!") + +if __name__ == "__main__": + main() +``` +## M1.py +```py +def find_min_max_indices(data): + """ + Функция 1: Нахождение номеров элементов с наименьшим и наибольшим значениями + Аргумент: список или кортеж с выборкой + Возвращает: кортеж (индекс_мин, индекс_макс) + """ + if not data: + return -1, -1 + + min_index = data.index(min(data)) + max_index = data.index(max(data)) + return min_index, max_index + +def calculate_group_averages(data, N): + """ + Функция 2: Разделение выборки на группы и расчет средних значений + Аргументы: + - data: список или кортеж с выборкой + - N: целочисленный параметр - размер группы + Возвращает: список средних значений по группам + """ + if not data or N <= 0: + return [] + + group_averages = [] + for i in range(0, len(data), N): + group = data[i:i + N] + group_avg = sum(group) / len(group) + group_averages.append(group_avg) + + return group_averages +``` +## M2.py +```py +import os +import struct +import matplotlib.pyplot as plt + +def read_binary_file(filename): + """Чтение данных из бинарного файла""" + data = [] + try: + with open(filename, 'rb') as f: + while True: + bytes_data = f.read(4) + if not bytes_data: + break + value = struct.unpack('f', bytes_data)[0] + data.append(value) + return data + except FileNotFoundError: + return None + +def main(): + # Запрос имени файла с проверкой наличия + while True: + filename = input("Введите имя бинарного файла с выборкой: ") + if os.path.exists(filename): + break + print(f"Файл '{filename}' не найден. Попробуйте еще раз.") + + # Чтение выборки из файла + data = read_binary_file(filename) + if data is None: + print("Ошибка чтения файла") + return + + print(f"Выборка считана из файла '{filename}'") + print(f"Число элементов: {len(data)}") + + # Импорт функций из M1 + from M1 import find_min_max_indices, calculate_group_averages + + # Использование функции 1: нахождение номеров min и max + min_index, max_index = find_min_max_indices(data) + print(f"Номер элемента с наименьшим значением: {min_index}") + print(f"Номер элемента с наибольшим значением: {max_index}") + print(f"Наименьшее значение: {data[min_index]:.3f}") + print(f"Наибольшее значение: {data[max_index]:.3f}") + + # Запрос числа N для формирования групп + while True: + try: + N = int(input(f"Введите число элементов N для формирования групп (1-{len(data)}): ")) + if 1 <= N <= len(data): + break + else: + print(f"Введите число от 1 до {len(data)}") + except ValueError: + print("Введите целое число") + + # Использование функции 2: расчет средних по группам + group_averages = calculate_group_averages(data, N) + + print(f"\nРазделение на {len(group_averages)} групп:") + for i, avg in enumerate(group_averages): + start_idx = i * N + end_idx = min((i + 1) * N - 1, len(data) - 1) + print(f"Группа {i+1} (элементы {start_idx}-{end_idx}): среднее = {avg:.3f}") + + # ПОСТРОЕНИЕ ГРАФИКА СОГЛАСНО ЗАДАНИЮ + plt.figure(figsize=(12, 6)) + + # Отображение исходной выборки (основное требование задания) + plt.plot(range(len(data)), data, 'bo-', linewidth=2, markersize=6, label='Исходная выборка') + + # Дополнительно выделяем min и max (не требуется заданием, но полезно) + plt.plot(min_index, data[min_index], 'ro', markersize=10, label=f'Минимум (индекс {min_index})') + plt.plot(max_index, data[max_index], 'go', markersize=10, label=f'Максимум (индекс {max_index})') + + plt.title(f'Исходная выборка из файла: {filename}') + plt.xlabel('Индекс элемента') + plt.ylabel('Значение') + plt.legend() + plt.grid(True, alpha=0.3) + plt.tight_layout() + plt.show() + +if __name__ == "__main__": + main() +``` +## Пример запуска +```py +Создан файл 'data1.bin' (15 элементов) +Создан файл 'data2.bin' (20 элементов) + +Тестовые файлы готовы! +``` +```py +ГЛАВНАЯ ПРОГРАММА M3_27 +Проведем расчеты для 2-х разных исходных файлов + + +РАСЧЕТ 1: +Введите имя бинарного файла с выборкой: data1.bin +Выборка считана из файла 'data1.bin' +Число элементов: 15 +Номер элемента с наименьшим значением: 9 +Номер элемента с наибольшим значением: 10 +Наименьшее значение: 10.079 +Наибольшее значение: 48.704 +Введите число элементов N для формирования групп (1-15): 3 + +Разделение на 5 групп: +Группа 1 (элементы 0-2): среднее = 18.515 +Группа 2 (элементы 3-5): среднее = 33.627 +Группа 3 (элементы 6-8): среднее = 36.964 +Группа 4 (элементы 9-11): среднее = 29.794 +Группа 5 (элементы 12-14): среднее = 29.427 +``` +![alt text]({02373A72-7282-4831-A19F-62F0491DA505}.png) +```py +РАСЧЕТ 2: +Введите имя бинарного файла с выборкой: data2.bin +Выборка считана из файла 'data2.bin' +Число элементов: 20 +Номер элемента с наименьшим значением: 13 +Номер элемента с наибольшим значением: 16 +Наименьшее значение: -3.310 +Наибольшее значение: 4.489 +Введите число элементов N для формирования групп (1-20): 5 + +Разделение на 4 групп: +Группа 1 (элементы 0-4): среднее = 0.637 +Группа 2 (элементы 5-9): среднее = 0.159 +Группа 3 (элементы 10-14): среднее = -0.665 +Группа 4 (элементы 15-19): среднее = 0.210 + + +Все расчеты завершены! +``` +![alt text]({60C48610-2CF2-4BF5-86A4-A530659AEC4D}.png) \ No newline at end of file diff --git a/TEMA9/iz.py b/TEMA9/iz.py new file mode 100644 index 0000000..be2d8e0 --- /dev/null +++ b/TEMA9/iz.py @@ -0,0 +1,91 @@ +#27 +import numpy as np +import matplotlib.pyplot as plt +import pickle +import os +import random +from statistics import mean + +def функция1(выборка): + """Поиск индексов min и max элементов""" + if not выборка: + return -1, -1 + + min_idx = выборка.index(min(выборка)) + max_idx = выборка.index(max(выборка)) + return min_idx, max_idx + +def функция2(выборка, N): + """Разделение на группы и расчет средних""" + if N <= 0: + return [] + + средние = [] + for i in range(0, len(выборка), N): + группа = выборка[i:i+N] + средние.append(mean(группа)) + + return средние + +def M2(): + while True: + имя_файла = input("Введите имя бинарного файла: ") + if os.path.exists(имя_файла): + break + print("Файл не найден!") + + with open(имя_файла, 'rb') as f: + выборка = pickle.load(f) + + min_idx, max_idx = функция1(выборка) + print(f"Индекс min: {min_idx}, значение: {выборка[min_idx]}") + print(f"Индекс max: {max_idx}, значение: {выборка[max_idx]}") + print(f"Число элементов: {len(выборка)}") + + N = int(input("Введите число элементов в группе: ")) + средние = функция2(выборка, N) + print(f"Средние по группам: {средние}") + + # График + plt.figure(figsize=(10, 6)) + plt.plot(выборка, 'b.-', alpha=0.7) + plt.title('Исходная выборка') + plt.xlabel('Индекс') + plt.ylabel('Значение') + plt.grid(True) + plt.show() + + return выборка, min_idx, max_idx, средние + +def M0(): + выборка, min_idx, max_idx, средние = M2() + print(f"Min: {выборка[min_idx]} (индекс {min_idx})") + print(f"Max: {выборка[max_idx]} (индекс {max_idx})") + print(f"Средние по группам: {средние}") + +def создать_тестовые_файлы(): + # Первый файл + данные1 = [random.gauss(0, 1) for _ in range(30)] + with open('выборка1_M3_27.bin', 'wb') as f: + pickle.dump(данные1, f) + + # Второй файл + данные2 = [random.uniform(-5, 5) for _ in range(25)] + with open('выборка2_M3_27.bin', 'wb') as f: + pickle.dump(данные2, f) + +# Пример запуска +if __name__ == "__main__": + print("=== M3_27: Анализ выборки с группировкой ===") + создать_тестовые_файлы() + print("Созданы тестовые файлы: выборка1_M3_27.bin и выборка2_M3_27.bin") + + # Тестовый пример + тест_выборка = [1, 5, 3, 8, 2, 7, 4, 6] + min_idx, max_idx = функция1(тест_выборка) + средние = функция2(тест_выборка, 3) + print(f"Тестовая выборка: {тест_выборка}") + print(f"Min индекс: {min_idx}, Max индекс: {max_idx}") + print(f"Средние по группам: {средние}") + + M0() \ No newline at end of file diff --git a/TEMA9/test_data.py b/TEMA9/test_data.py new file mode 100644 index 0000000..efbb29c --- /dev/null +++ b/TEMA9/test_data.py @@ -0,0 +1,69 @@ +# Модуль для создания тестовых данных +import pickle +import random +import numpy as np + + +def создать_тестовые_файлы(): + """ + Создает два бинарных файла с тестовыми выборками для проверки программы + """ + + # Первый файл - нормальное распределение + print("Создание первого тестового файла...") + данные1 = [random.gauss(50, 15) for _ in range(30)] # 30 элементов, μ=50, σ=15 + with open('выборка1_M3_27.bin', 'wb') as f: + pickle.dump(данные1, f) + print(f"Файл 'выборка1_M3_27.bin' создан. Элементов: {len(данные1)}") + print(f"Диапазон значений: {min(данные1):.2f} - {max(данные1):.2f}") + + # Второй файл - равномерное распределение + print("\nСоздание второго тестового файла...") + данные2 = [random.uniform(-10, 10) for _ in range(25)] # 25 элементов, от -10 до 10 + with open('выборка2_M3_27.bin', 'wb') as f: + pickle.dump(данные2, f) + print(f"Файл 'выборка2_M3_27.bin' создан. Элементов: {len(данные2)}") + print(f"Диапазон значений: {min(данные2):.2f} - {max(данные2):.2f}") + + # Третий файл - с явными min/max для демонстрации + print("\nСоздание демонстрационного файла...") + данные3 = [2, 8, 3, 1, 9, 4, 7, 5, 6] # Явные min=1, max=9 + with open('демо_выборка_M3_27.bin', 'wb') as f: + pickle.dump(данные3, f) + print(f"Файл 'демо_выборка_M3_27.bin' создан. Элементов: {len(данные3)}") + print(f"Значения: {данные3}") + print(f"Min: {min(данные3)} (индекс {данные3.index(min(данные3))})") + print(f"Max: {max(данные3)} (индекс {данные3.index(max(данные3))})") + + print("\n") + print("Тестовые данные созданы:") + print("1. выборка1_M3_27.bin - 30 элементов (нормальное распределение)") + print("2. выборка2_M3_27.bin - 25 элементов (равномерное распределение)") + print("3. демо_выборка_M3_27.bin - 9 элементов (демонстрационный)") + + +def показать_содержимое_файлов(): + """ + Показывает содержимое созданных тестовых файлов + """ + файлы = ['выборка1_M3_27.bin', 'выборка2_M3_27.bin', 'демо_выборка_M3_27.bin'] + + for имя_файла in файлы: + try: + with open(имя_файла, 'rb') as f: + данные = pickle.load(f) + print(f"\n{имя_файла}:") + print(f" Элементов: {len(данные)}") + print(f" Min: {min(данные):.3f}, Max: {max(данные):.3f}") + print(f" Первые 5 элементов: {[f'{x:.3f}' for x in данные[:5]]}") + except FileNotFoundError: + print(f"\nФайл {имя_файла} не найден. Сначала создайте тестовые данные.") + + +if __name__ == "__main__": + print("Создание тестовых данных") + + создать_тестовые_файлы() + + print("\nСодержимое созданных файлов:") + показать_содержимое_файлов() diff --git a/TEMA9/{02373A72-7282-4831-A19F-62F0491DA505}.png b/TEMA9/{02373A72-7282-4831-A19F-62F0491DA505}.png new file mode 100644 index 0000000..8b1874f Binary files /dev/null and b/TEMA9/{02373A72-7282-4831-A19F-62F0491DA505}.png differ diff --git a/TEMA9/{60C48610-2CF2-4BF5-86A4-A530659AEC4D}.png b/TEMA9/{60C48610-2CF2-4BF5-86A4-A530659AEC4D}.png new file mode 100644 index 0000000..4f7dcf5 Binary files /dev/null and b/TEMA9/{60C48610-2CF2-4BF5-86A4-A530659AEC4D}.png differ diff --git a/TEMA9/Пример запуска.py b/TEMA9/Пример запуска.py new file mode 100644 index 0000000..b41e74c --- /dev/null +++ b/TEMA9/Пример запуска.py @@ -0,0 +1,93 @@ +# Пример запуска +import M0 +import M1 +import M2 +if __name__ == "__main__": + print("=== M3_27: Анализ выборки с группировкой ===") + создать_тестовые_файлы() + print("Созданы тестовые файлы: выборка1_M3_27.bin и выборка2_M3_27.bin") + + # Тестовый пример + тест_выборка = [1, 5, 3, 8, 2, 7, 4, 6] + min_idx, max_idx = функция1(тест_выборка) + средние = функция2(тест_выборка, 3) + print(f"Тестовая выборка: {тест_выборка}") + print(f"Min индекс: {min_idx}, Max индекс: {max_idx}") + print(f"Средние по группам: {средние}") + + M0()# Модуль для создания тестовых данных +import pickle +import random +import numpy as np + + +def создать_тестовые_файлы(): + """ + Создает два бинарных файла с тестовыми выборками для проверки программы + """ + + # Первый файл - нормальное распределение + print("Создание первого тестового файла...") + данные1 = [random.gauss(50, 15) for _ in range(30)] # 30 элементов, μ=50, σ=15 + with open('выборка1_M3_27.bin', 'wb') as f: + pickle.dump(данные1, f) + print(f"Файл 'выборка1_M3_27.bin' создан. Элементов: {len(данные1)}") + print(f"Диапазон значений: {min(данные1):.2f} - {max(данные1):.2f}") + + # Второй файл - равномерное распределение + print("\nСоздание второго тестового файла...") + данные2 = [random.uniform(-10, 10) for _ in range(25)] # 25 элементов, от -10 до 10 + with open('выборка2_M3_27.bin', 'wb') as f: + pickle.dump(данные2, f) + print(f"Файл 'выборка2_M3_27.bin' создан. Элементов: {len(данные2)}") + print(f"Диапазон значений: {min(данные2):.2f} - {max(данные2):.2f}") + + # Третий файл - с явными min/max для демонстрации + print("\nСоздание демонстрационного файла...") + данные3 = [2, 8, 3, 1, 9, 4, 7, 5, 6] # Явные min=1, max=9 + with open('демо_выборка_M3_27.bin', 'wb') as f: + pickle.dump(данные3, f) + print(f"Файл 'демо_выборка_M3_27.bin' создан. Элементов: {len(данные3)}") + print(f"Значения: {данные3}") + print(f"Min: {min(данные3)} (индекс {данные3.index(min(данные3))})") + print(f"Max: {max(данные3)} (индекс {данные3.index(max(данные3))})") + + print("\n" + "=" * 50) + print("ТЕСТОВЫЕ ФАЙЛЫ СОЗДАНЫ:") + print("1. выборка1_M3_27.bin - 30 элементов (нормальное распределение)") + print("2. выборка2_M3_27.bin - 25 элементов (равномерное распределение)") + print("3. демо_выборка_M3_27.bin - 9 элементов (демонстрационный)") + print("=" * 50) + + +def показать_содержимое_файлов(): + """ + Показывает содержимое созданных тестовых файлов + """ + файлы = ['выборка1_M3_27.bin', 'выборка2_M3_27.bin', 'демо_выборка_M3_27.bin'] + + for имя_файла in файлы: + try: + with open(имя_файла, 'rb') as f: + данные = pickle.load(f) + print(f"\n{имя_файла}:") + print(f" Элементов: {len(данные)}") + print(f" Min: {min(данные):.3f}, Max: {max(данные):.3f}") + print(f" Первые 5 элементов: {[f'{x:.3f}' for x in данные[:5]]}") + except FileNotFoundError: + print(f"\nФайл {имя_файла} не найден. Сначала создайте тестовые данные.") + + +if __name__ == "__main__": + print("СОЗДАНИЕ ТЕСТОВЫХ ДАННЫХ ДЛЯ M3_27") + print("=" * 40) + + создать_тестовые_файлы() + + print("\nСОДЕРЖИМОЕ СОЗДАННЫХ ФАЙЛОВ:") + показать_содержимое_файлов() + + print("\nИнструкция по запуску:") + print("1. Запустите M0.py для выполнения основной программы") + print("2. При запросе введите имя одного из созданных файлов") + print("3. Рекомендуется начать с 'демо_выборка_M3_27.bin' для демонстрации") \ No newline at end of file diff --git a/TEMA9/выборка1_M3_27.bin b/TEMA9/выборка1_M3_27.bin new file mode 100644 index 0000000..a92523f Binary files /dev/null and b/TEMA9/выборка1_M3_27.bin differ diff --git a/TEMA9/выборка2_M3_27.bin b/TEMA9/выборка2_M3_27.bin new file mode 100644 index 0000000..5dd2d45 Binary files /dev/null and b/TEMA9/выборка2_M3_27.bin differ diff --git a/TEMA9/демо_выборка_M3_27.bin b/TEMA9/демо_выборка_M3_27.bin new file mode 100644 index 0000000..f1149df Binary files /dev/null and b/TEMA9/демо_выборка_M3_27.bin differ