evgeny 4 дней назад
Родитель 5d3de3b267
Сommit 55d91ae673

@ -0,0 +1,5 @@
Результаты расчета:
Среднее значение A: 679.73
Среднее значение B: 4376.11
Пороговое значение P: 2527.92
Список результатов: [679.7272727272727, 4376.111111111111, 2527.919191919192]

@ -1,11 +1,8 @@
# Скрипт для создания тестовых данных
import pickle import pickle
# Тестовые данные из задания
A = [-440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665] A = [-440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665]
B = [3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993] B = [3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993]
# Сохранение данных в бинарный файл
filename = input("Введите имя файла для сохранения тестовых данных (например: test_data.bin): ") filename = input("Введите имя файла для сохранения тестовых данных (например: test_data.bin): ")
try: try:

@ -1,15 +1,11 @@
# Модуль М0 - главная программа from m2 import obrabotka as ob
from m2 import process_data
def main(): def main():
"""Основная функция программы""" """Основная функция программы"""
print("=== ОБРАБОТКА ДВУХ СПИСКОВ ===") print("=== ОБРАБОТКА ДВУХ СПИСКОВ ===")
# Вызов обработки данных из модуля М2 results = ob()
results = process_data()
if results is not None: if results is not None:
# Запись результатов в текстовый файл
try: try:
with open('Res1234.txt', 'w', encoding='utf-8') as file: with open('Res1234.txt', 'w', encoding='utf-8') as file:
file.write("Результаты расчета:\n") file.write("Результаты расчета:\n")

@ -1,21 +1,10 @@
def sred(A, B): def sred(A, B):
"""
средние значения по двум спискам/кортежам
и пороговое значение P (полусумма средних)
"""
# Вычисляем средние значения
avg_A = sum(A) / len(A) if len(A) > 0 else 0 avg_A = sum(A) / len(A) if len(A) > 0 else 0
avg_B = sum(B) / len(B) if len(B) > 0 else 0 avg_B = sum(B) / len(B) if len(B) > 0 else 0
# Вычисляем пороговое значение P
P = (avg_A + avg_B) / 2 P = (avg_A + avg_B) / 2
return [avg_A, avg_B, P] return [avg_A, avg_B, P]
def colvo(C, M): def colvo(C, M):
"""
подсчитывает элементы выше и не выше порога M
"""
up = 0 up = 0
down = 0 down = 0

@ -1,93 +1,23 @@
# Модуль М2
import pickle import pickle
import os import os
import matplotlib.pyplot as plt
from m1 import sred, colvo from m1 import sred, colvo
def ctenie(): def obrabotka():
"""Чтение данных из бинарного файла""" filename = input("Имя файла: ")
filename = input("Введите имя бинарного файла: ")
if not os.path.exists(filename): if not os.path.exists(filename):
print(f"Файл {filename} не существует!") print("Файл не найден!")
return None, None return
with open(filename, 'rb') as f:
try: data = pickle.load(f)
with open(filename, 'rb') as file: A, B = data[0], data[1]
data = pickle.load(file) print(f"A: {A}")
if len(data) >= 2: print(f"B: {B}")
A = data[0] avg_A, avg_B, P = sred(A, B)
B = data[1] print(f"\nСреднее A: {avg_A:.2f}")
return A, B print(f"Среднее B: {avg_B:.2f}")
else: print(f"Порог P: {P:.2f}")
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_A, down_A = colvo(A, P)
up_B, down_B = colvo(B, P) up_B, down_B = colvo(B, P)
print(f"\nA: выше {up_A}, ниже {down_A}")
print(f"\nДля списка A:") print(f"B: выше {up_B}, ниже {down_B}")
print(f" Элементов выше P ({P:.2f}): {up_A}") return [avg_A, avg_B, P]
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()

@ -0,0 +1,141 @@
# Туровец Евгений В18
### M3_18
1) Создайте модуль М1, содержащий две функции:
- функция 1: аргументы - два списка или кортежа - А и В; функция должна вычислить и вернуть список с 3 элементами: средние значения по каждому списку и значение Р, равное полусумме этих средних;
- функция 2: аргументы - список или кортеж С и числовое значение порога М; в функции должны быть подсчитаны и возвращены число элементов в С, значения которых превышают значение М, и число элементов, значения которых не превышают М.
2) Создайте еще один модуль М2, в котором должны выполняться операции:
- запрашивается и вводится имя бинарного файла, проверяется его наличие, и если он существует, то из него считываются два объекта-списка или кортежа: А и В;
- с применением функции 1 рассчитываются и отображаются средние значения и пороговое значение Р;
- функция 2 поочередно применяется к объектам А и В с порогом Р, рассчитанным в функции 1; отображаются результаты расчета;
- объекты А и В отображаются на одном графике с разметкой осей
3) Создайте модуль М0 - главную программу, которая вызывает М2 и записывает список, полученный в функции 1 в текстовый файл Res1234.txt.
4) Для проверки программы запишите в бинарный файл с некоторым именем два списка:
А: -440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665
В: 3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993
Проведите расчеты с этими данными.
mo:
```py
from m2 import obrabotka as ob
def main():
"""Основная функция программы"""
print("=== ОБРАБОТКА ДВУХ СПИСКОВ ===")
results = ob()
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()
```
m1:
```py
def sred(A, B):
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 = (avg_A + avg_B) / 2
return [avg_A, avg_B, P]
def colvo(C, M):
up = 0
down = 0
for element in C:
if element > M:
up += 1
else:
down += 1
return up, down
```
m2:
```py
import pickle
import os
from m1 import sred, colvo
def obrabotka():
filename = input("Имя файла: ")
if not os.path.exists(filename):
print("Файл не найден!")
return
with open(filename, 'rb') as f:
data = pickle.load(f)
A, B = data[0], data[1]
print(f"A: {A}")
print(f"B: {B}")
avg_A, avg_B, P = sred(A, B)
print(f"\nСреднее A: {avg_A:.2f}")
print(f"Среднее B: {avg_B:.2f}")
print(f"Порог P: {P:.2f}")
up_A, down_A = colvo(A, P)
up_B, down_B = colvo(B, P)
print(f"\nA: выше {up_A}, ниже {down_A}")
print(f"B: выше {up_B}, ниже {down_B}")
return [avg_A, avg_B, P]
```
Скрипт для создания начальных данных:
```py
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}")
```
"""" Вывод:
```
Введите имя файла для сохранения тестовых данных: test1
Тестовые данные успешно сохранены в файл 'test1'
Список A: [-440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665]
Список B: [3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993]
Имя файла: test1
A: [-440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665]
B: [3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993]
Среднее A: 679.73
Среднее B: 4376.11
Порог P: 2527.92
A: выше 2, ниже 9
B: выше 6, ниже 3
Результаты успешно записаны в файл 'Res1234.txt'
```

Двоичные данные
TEMA8/test

Двоичный файл не отображается.

Двоичные данные
TEMA8/test1

Двоичный файл не отображается.
Загрузка…
Отмена
Сохранить