ответвлено от main/python-labs
Изменил(а) на 'TEMA9/test.md'
Этот коммит содержится в:
165
TEMA9/test.md
165
TEMA9/test.md
@@ -25,7 +25,166 @@ M3_19
|
|||||||
4) Проведите расчеты при 2-х разных исходных файлах.
|
4) Проведите расчеты при 2-х разных исходных файлах.
|
||||||
|
|
||||||
## Решение:
|
## Решение:
|
||||||
## Вывод:
|
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()
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||

|
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user