Изменил(а) на 'TEMA9/test.md'

Этот коммит содержится в:
2025-12-19 09:31:29 +00:00
родитель 583f2b2cd4
Коммит d2a80f27f8

Просмотреть файл

@@ -24,8 +24,167 @@ M3_19
4) Проведите расчеты при 2-х разных исходных файлах.
## Решение:
## Вывод:
![График](Figure_1.png)
## Решение:
M1.py
```py
def count_increasing_elements(sequence):
""" Функция 1: подсчитывает число элементов, значение которых превышает значение предыдущего элемента"""
if len(sequence) <= 1:
return 0
count = 0
for i in range(1, len(sequence)):
if sequence[i] > sequence[i-1]:
count += 1
return count
def cumulative_sum(sequence):
"""Функция 2: рассчитывает список с накопленными суммами"""
result = []
current_sum = 0
for value in sequence:
current_sum += value
result.append(current_sum)
return result
```
M2.py
```py
import os
import struct
import matplotlib.pyplot as plt
from M1 import count_increasing_elements, cumulative_sum
def read_binary_file(filename):
"""
Читает бинарный файл с числами с плавающей точкой
"""
data = []
try:
with open(filename, 'rb') as f:
while True:
bytes_data = f.read(8)
if not bytes_data:
break
value = struct.unpack('d', bytes_data)[0]
data.append(value)
except Exception as e:
print(f"Ошибка при чтении файла: {e}")
return data
def display_plots(original_data, cumulative_data):
"""
Отображает графики исходных данных и кумулятивных сумм
"""
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8))
# График исходного сигнала
ax1.plot(original_data, 'b-', linewidth=1.5, label='Исходный сигнал')
ax1.set_xlabel('Отсчеты')
ax1.set_ylabel('Амплитуда')
ax1.set_title('Исходный сигнал')
ax1.grid(True, alpha=0.3)
ax1.legend()
# График кумулятивных сумм
ax2.plot(cumulative_data, 'r-', linewidth=1.5, label='Накопленные суммы')
ax2.set_xlabel('Отсчеты')
ax2.set_ylabel('Сумма')
ax2.set_title('Кумулятивные суммы сигнала')
ax2.grid(True, alpha=0.3)
ax2.legend()
plt.tight_layout()
plt.show()
def process_signal_data():
""" Основная функция модуля M2 - выполняет все требуемые операции """
while True:
filename = input("Введите имя бинарного файла с выборкой: ").strip()
if os.path.exists(filename):
print(f"Файл '{filename}' найден.")
break
else:
print(f"Файл '{filename}' не существует. Пожалуйста, попробуйте еще раз.")
print("Чтение данных из файла...")
signal_data = read_binary_file(filename)
if not signal_data:
print("Файл пуст или содержит некорректные данные.")
return None, None, None
print(f"Прочитано {len(signal_data)} отсчетов сигнала.")
increasing_count = count_increasing_elements(signal_data)
print(f"Количество элементов, превышающих предыдущий: {increasing_count}")
cumulative_sums = cumulative_sum(signal_data)
print("Список с кумулятивными суммами рассчитан.")
display_plots(signal_data, cumulative_sums)
return signal_data, increasing_count, cumulative_sums
if __name__ == "__main__":
process_signal_data()
```
M0.py
```py
from M2 import process_signal_data
def main():
"""
Главная функция программы
"""
print("=" * 60)
print("ПРОГРАММА ОБРАБОТКИ СИГНАЛОВ")
print("=" * 60)
print("\n" + "=" * 60)
print("РАСЧЕТ №1")
print("=" * 60)
data1, count1, sums1 = process_signal_data()
if data1:
print(f"\nРезультаты расчета №1:")
print(f" • Общее количество отсчетов: {len(data1)}")
print(f" • Элементов, превышающих предыдущий: {count1}")
print(f" • Процент возрастающих элементов: {count1/len(data1)*100:.2f}%")
print("\n" + "=" * 60)
print("РАСЧЕТ №2")
print("=" * 60)
data2, count2, sums2 = process_signal_data()
if data2:
print(f"\nРезультаты расчета №2:")
print(f" • Общее количество отсчетов: {len(data2)}")
print(f" • Элементов, превышающих предыдущий: {count2}")
print(f" • Процент возрастающих элементов: {count2/len(data2)*100:.2f}%")
print("\n" + "=" * 60)
print("ОБРАБОТКА ЗАВЕРШЕНА")
print("=" * 60)
if __name__ == "__main__":
main()
```
![График](Figure_2.png)