diff --git a/TEMA9/iz.md b/TEMA9/iz.md deleted file mode 100644 index de19eec..0000000 --- a/TEMA9/iz.md +++ /dev/null @@ -1,224 +0,0 @@ -# 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 deleted file mode 100644 index be2d8e0..0000000 --- a/TEMA9/iz.py +++ /dev/null @@ -1,91 +0,0 @@ -#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