diff --git a/TEMA9/test.md b/TEMA9/test.md index 1e94cf5..969bd25 100644 --- a/TEMA9/test.md +++ b/TEMA9/test.md @@ -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)