форкнуто от main/python-labs
main
Родитель
8771f84b1c
Сommit
008ca3e999
@ -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()
|
||||
@ -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
|
||||
@ -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()
|
||||
@ -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()
|
||||
Двоичный файл не отображается.
@ -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
|
||||
```
|
||||

|
||||
```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
|
||||
|
||||
|
||||
Все расчеты завершены!
|
||||
```
|
||||

|
||||
@ -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()
|
||||
|
После Ширина: | Высота: | Размер: 127 KiB |
|
После Ширина: | Высота: | Размер: 123 KiB |
Двоичный файл не отображается.
Двоичный файл не отображается.
Двоичный файл не отображается.
Загрузка…
Ссылка в новой задаче