форкнуто от main/python-labs
Родитель
efcbbd0b1d
Сommit
5d3de3b267
Двоичный файл не отображается.
@ -0,0 +1,18 @@
|
||||
# Скрипт для создания тестовых данных
|
||||
import pickle
|
||||
|
||||
# Тестовые данные из задания
|
||||
A = [-440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665]
|
||||
B = [3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993]
|
||||
|
||||
# Сохранение данных в бинарный файл
|
||||
filename = input("Введите имя файла для сохранения тестовых данных (например: test_data.bin): ")
|
||||
|
||||
try:
|
||||
with open(filename, 'wb') as file:
|
||||
pickle.dump([A, B], file)
|
||||
print(f"Тестовые данные успешно сохранены в файл '{filename}'")
|
||||
print(f"Список A: {A}")
|
||||
print(f"Список B: {B}")
|
||||
except Exception as e:
|
||||
print(f"Ошибка при сохранении файла: {e}")
|
||||
@ -0,0 +1,28 @@
|
||||
# Модуль М0 - главная программа
|
||||
from m2 import process_data
|
||||
|
||||
def main():
|
||||
"""Основная функция программы"""
|
||||
print("=== ОБРАБОТКА ДВУХ СПИСКОВ ===")
|
||||
|
||||
# Вызов обработки данных из модуля М2
|
||||
results = process_data()
|
||||
|
||||
if results is not None:
|
||||
# Запись результатов в текстовый файл
|
||||
try:
|
||||
with open('Res1234.txt', 'w', encoding='utf-8') as file:
|
||||
file.write("Результаты расчета:\n")
|
||||
file.write(f"Среднее значение A: {results[0]:.2f}\n")
|
||||
file.write(f"Среднее значение B: {results[1]:.2f}\n")
|
||||
file.write(f"Пороговое значение P: {results[2]:.2f}\n")
|
||||
file.write(f"Список результатов: {results}\n")
|
||||
|
||||
print("\nРезультаты успешно записаны в файл 'Res1234.txt'")
|
||||
except Exception as e:
|
||||
print(f"Ошибка при записи в файл: {e}")
|
||||
else:
|
||||
print("Программа завершена с ошибкой.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,28 @@
|
||||
def sred(A, B):
|
||||
"""
|
||||
средние значения по двум спискам/кортежам
|
||||
и пороговое значение P (полусумма средних)
|
||||
"""
|
||||
# Вычисляем средние значения
|
||||
avg_A = sum(A) / len(A) if len(A) > 0 else 0
|
||||
avg_B = sum(B) / len(B) if len(B) > 0 else 0
|
||||
|
||||
# Вычисляем пороговое значение P
|
||||
P = (avg_A + avg_B) / 2
|
||||
|
||||
return [avg_A, avg_B, P]
|
||||
|
||||
def colvo(C, M):
|
||||
"""
|
||||
подсчитывает элементы выше и не выше порога M
|
||||
"""
|
||||
up = 0
|
||||
down = 0
|
||||
|
||||
for element in C:
|
||||
if element > M:
|
||||
up += 1
|
||||
else:
|
||||
down += 1
|
||||
|
||||
return up, down
|
||||
@ -0,0 +1,93 @@
|
||||
# Модуль М2
|
||||
import pickle
|
||||
import os
|
||||
import matplotlib.pyplot as plt
|
||||
from m1 import sred, colvo
|
||||
|
||||
def ctenie():
|
||||
"""Чтение данных из бинарного файла"""
|
||||
filename = input("Введите имя бинарного файла: ")
|
||||
|
||||
if not os.path.exists(filename):
|
||||
print(f"Файл {filename} не существует!")
|
||||
return None, None
|
||||
|
||||
try:
|
||||
with open(filename, 'rb') as file:
|
||||
data = pickle.load(file)
|
||||
if len(data) >= 2:
|
||||
A = data[0]
|
||||
B = data[1]
|
||||
return A, B
|
||||
else:
|
||||
print("Файл должен содержать как минимум два списка/кортежа")
|
||||
return None, None
|
||||
except Exception as e:
|
||||
print(f"Ошибка при чтении файла: {e}")
|
||||
return None, None
|
||||
|
||||
def process_data():
|
||||
"""Основная функция обработки данных"""
|
||||
# Чтение данных из файла
|
||||
A, B = ctenie()
|
||||
|
||||
if A is None or B is None:
|
||||
return None
|
||||
|
||||
print(f"\nСписок A: {A}")
|
||||
print(f"Список B: {B}")
|
||||
|
||||
# Применение функции 1
|
||||
results = sred(A, B)
|
||||
avg_A, avg_B, P = results
|
||||
|
||||
print(f"\nСреднее значение A: {avg_A:.2f}")
|
||||
print(f"Среднее значение B: {avg_B:.2f}")
|
||||
print(f"Пороговое значение P: {P:.2f}")
|
||||
|
||||
# Применение функции 2 к спискам A и B
|
||||
up_A, down_A = colvo(A, P)
|
||||
up_B, down_B = colvo(B, P)
|
||||
|
||||
print(f"\nДля списка A:")
|
||||
print(f" Элементов выше P ({P:.2f}): {up_A}")
|
||||
print(f" Элементов не выше P: {down_A}")
|
||||
|
||||
print(f"\nДля списка B:")
|
||||
print(f" Элементов выше P ({P:.2f}): {up_B}")
|
||||
print(f" Элементов не выше P: {down_B}")
|
||||
|
||||
# Построение графика
|
||||
plot_data(A, B, avg_A, avg_B, P)
|
||||
|
||||
return results
|
||||
|
||||
def plot_data(A, B, avg_A, avg_B, P):
|
||||
"""Построение графика для списков A и B"""
|
||||
plt.figure(figsize=(10, 6))
|
||||
|
||||
# Создание индексов для элементов
|
||||
indices_A = range(len(A))
|
||||
indices_B = range(len(B))
|
||||
|
||||
# Построение точек для списка A
|
||||
plt.scatter(indices_A, A, color='blue', label='Список A', s=50, alpha=0.7)
|
||||
|
||||
# Построение точек для списка B
|
||||
plt.scatter(indices_B, B, color='red', label='Список B', s=50, alpha=0.7)
|
||||
|
||||
# Горизонтальные линии для средних значений и порога
|
||||
plt.axhline(y=avg_A, color='blue', linestyle='--', alpha=0.5, label=f'Среднее A: {avg_A:.2f}')
|
||||
plt.axhline(y=avg_B, color='red', linestyle='--', alpha=0.5, label=f'Среднее B: {avg_B:.2f}')
|
||||
plt.axhline(y=P, color='green', linestyle='-', alpha=0.7, label=f'Порог P: {P:.2f}')
|
||||
|
||||
# Настройка графика
|
||||
plt.xlabel('Индекс элемента')
|
||||
plt.ylabel('Значение элемента')
|
||||
plt.title('Сравнение списков A и B')
|
||||
plt.legend()
|
||||
plt.grid(True, alpha=0.3)
|
||||
|
||||
# Сохранение графика
|
||||
plt.savefig('comparison_plot.png', dpi=300, bbox_inches='tight')
|
||||
plt.show()
|
||||
Загрузка…
Ссылка в новой задаче