Вопрос задан 22.03.2025 в 23:41. Предмет Информатика. Спрашивает Сахно Ангеліна.

Напишите программу, которая моделирует работу стека целых чисел, управляемого текстовыми командами. В начале работы стек пуст. Затем последовательно выполняются команды, записанные в файле input.txt . Для управления стеком используются две команды:

'+<число>' – втолкнуть число на вершину стека

'-' – удалить число с вершины стека

Требуется определить состояние стека после окончания выполнения всех команд.

Входные данные
Входные строки в файле input.txt содержат команды управления стеком. Последняя строка файла пустая.

Выходные данные
Программа должна вывести в одной строке через пробел все числа, оказавшиеся в стеке после выполнения всех команд. Слева должно быть дно стека, справа – вершина. Если стек пуст, нужно вывести слово 'EMPTY'. Если во время выполнения команд произошла ошибка, нужно вывести слово 'ERROR'.

Примеры
входные данные
+12
+23
-
+34
выходные данные
12 34
входные данные
+12
+23
-
-
выходные данные
EMPTY

Перейти к ответам

Ответы на вопрос

Отвечает Зориков Ваня.

Для решения задачи нам нужно разработать программу, которая будет работать с командами управления стеком. Стек — это структура данных, работающая по принципу LIFO (Last In, First Out), то есть последний добавленный элемент будет первым удалённым.

Давайте разберём требования и шаги для реализации программы.

Шаги решения:

  1. Инициализация стека:

    • Стек будет представлен как список в Python. В начале он пустой.
  2. Чтение команд:

    • Каждая строка в файле input.txt — это команда управления стеком.
    • Команды могут быть двух типов:
      • +<число> — добавление числа на вершину стека.
      • - — удаление числа с вершины стека.
  3. Обработка команд:

    • Для команды +<число> нужно добавить число в стек.
    • Для команды - нужно удалить элемент с вершины стека, если стек не пустой. Если стек пустой, это считается ошибкой.
  4. Ошибки:

    • Ошибка возникает, если попытаться удалить элемент из пустого стека.
  5. Вывод результатов:

    • После выполнения всех команд:
      • Если стек пуст, нужно вывести EMPTY.
      • Если в стеке есть элементы, вывести их через пробел, начиная с дна стека до вершины.
    • Если произошла ошибка, вывести ERROR.

Алгоритм:

  1. Инициализируем пустой стек.
  2. Читаем каждую строку командного файла.
  3. Выполняем команду:
    • Если команда начинается с +, добавляем число в стек.
    • Если команда это -, удаляем верхний элемент из стека, если он существует.
  4. После обработки всех команд проверяем состояние стека:
    • Если стек пуст, выводим EMPTY.
    • Если в стеке есть элементы, выводим их.
    • Если была ошибка, выводим ERROR.

Реализация программы на Python:

python
def process_stack_commands(): stack = [] # Инициализация пустого стека

try: with open('input.txt', 'r') as file: lines = file.readlines()

for line in lines: line = line.strip() # Убираем лишние пробелы и символы новой строки if line == "": # Игнорируем пустые строки continue if line[0] == '+': # Команда на добавление числа в стек try: num = int(line[1:]) # Преобразуем число в целое stack.append(num) except ValueError: print("ERROR") return elif line == '-': # Команда на удаление числа с вершины стека if stack: stack.pop() # Удаляем элемент с вершины стека else: print("ERROR") return else: print("ERROR") return

# После выполнения всех команд проверяем состояние стека if stack: print(" ".join(map(str, stack))) # Выводим элементы стека через пробел else: print("EMPTY") # Стек пуст

except FileNotFoundError: print("ERROR") # Если файл не найден, выводим ошибку

# Вызов функции для выполнения программы process_stack_commands()

Пояснение к коду:

  1. Чтение входных данных:

    • Открываем файл input.txt для чтения.
    • Считываем все строки из файла, удаляя лишние пробелы и символы новой строки с помощью strip().
  2. Обработка каждой команды:

    • Если строка начинается с +, пытаемся преобразовать число после + в целое число и добавляем его в стек.
    • Если строка это -, проверяем, не пуст ли стек. Если не пуст, удаляем верхний элемент, иначе выводим ошибку.
  3. Вывод результата:

    • Если стек пуст после всех операций, выводим EMPTY.
    • Если в стеке есть элементы, выводим их через пробел, начиная с дна стека.
  4. Обработка ошибок:

    • Если в процессе выполнения команд возникнут ошибки (например, попытка удаления элемента из пустого стека или неправильный формат числа), программа выведет ERROR.

Примеры:

Пример 1: Входные данные:

diff
+12 +23 - +34

Программа выполнит:

  1. Добавит 12 в стек.
  2. Добавит 23 в стек.
  3. Удалит верхний элемент (23).
  4. Добавит 34 в стек.

Результат:

12 34

Пример 2: Входные данные:

diff
+12 +23 - -

Программа выполнит:

  1. Добавит 12 в стек.
  2. Добавит 23 в стек.
  3. Удалит 23.
  4. Удалит 12.

Результат:

sql
EMPTY

Пример 3 (ошибка): Входные данные:

diff
-

Результат:

vbnet
ERROR

Вывод:

Программа корректно управляет стеком, обрабатывая команды и выводя итоговое состояние стека или сообщение об ошибке в зависимости от ситуации.

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос