ответвлено от main/python-labs
Изменил(а) на 'TEMA9/test.md'
Этот коммит содержится в:
167
TEMA9/test.md
167
TEMA9/test.md
@@ -24,8 +24,167 @@ M3_19
|
||||
|
||||
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