Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Алгоритмы
Курсы ККДП
Дистрибутивы
Ссылки

HotLog


 

Stack Unwinding

(Время: 1 сек. Память: 16 Мб Сложность: 58%)

Давид увлекается изучением своего любимого языка программирования. Для этого он иногда просматривает видео с различных курсов. На одном из них он познакомился с исключениями и теперь везде их пихаетиспользует. К сожалению, он не совсем понимает в каком порядке удаляются объекты при срабатывании исключения, поэтому просит вас по написанному им коду вывести в каком порядке будут создаваться и удаляться объекты в программе.

Напомним, что в языке Давида, при завершении функции объекты удаляются в обратном порядке, а при срабатывании исключения, программа завершается (т.к. Давид забыл написать соответствующий обработчик), предварительно освобождая созданные ей объекты. Выполнение программы всегда начинается с функции main.

Входные данные

В нескольких строчках входного файла INPUT.TXT содержится псевдокод программы. Он представляет собой описание нескольких функций (не больше 10), каждая из которых задается следующим образом. Вначале записывается сигнатура функции. Для упрощения во всех программах сигнатура функции будет выглядеть как "void funcName() {" (без кавычек), где funcName – имя объявляемой функции. Затем до "}" описывается тело функции, в котором могут быть только следующие команды:

  • Type name – создать объект name типа Type (например, "MyType var");
  • throw – место, где сработает исключение, гарантируется, что исключение может возникнуть только в одном месте;
  • funcName() – вызов функции. Здесь funcName - имя функции, которая описана в программе.

Все имена состоят только из английских букв и цифр. Код программы не превышает 10000 символов. Гарантируется, что в коде нет циклов (рекурсивных вызовов функций) и определение функции main является последним.

Выходные данные

В выходной файл OUTPUT.TXT требуется вывести последовательность создаваемых и удаляемых в программе Давида объектов. При создании объекта типа Type в отдельной строке нужно вывести Type(), при удалении – ∼Type(), возникновение исключения – throw.

Пример

INPUT.TXTOUTPUT.TXT
void foo() {
B b
C c
bar()
throw
bar()
}
void bar() {
T t
}
void main() {
A a
foo()
}
A()
B()
C()
T()
~T()
throw
~C()
~B()
~A()

Для отправки решения задачи необходимо зарегистрироваться и авторизоваться!

 Язык программирования C++
 Решение олимпиадных задач
 Региональные олимпиады
 Книги Фёдора Меньшикова
 Тренировочные олимпиады
 Школьный этап
 Муниципальный этап
 Региональный этап
 Полуфинал ВКОШП
 Личное первенство СФУ
 2011 / 2012
 2012 / 2013
 2013 / 2014
 2014 / 2015
 2015 / 2016
 2016 / 2017
 2017 / 2018
 2018 / 2019
 A. Архимед
 B. Верхняя граница
 C. Волшебные цветы
 D. Двоичное упражнение
 E. Stack Unwinding
 F. Пробежка
 G. Три монеты
 H. Кинозал
 I. Индикатор загрузки
 J. Заверните две!
 K. Сладкая вата

Красноярский краевой Дворец пионеров, (c)2006 - 2019, E-mail: admin@acmp.ru