Задать вопрос
Портал помощи студентам №1

Учебные работы на заказ без посредников
и переплат!

,

ул. Добролюбова, 16/2

support@professsor.com
Служба техподдержки
Решение задачЗаказ 25329

Топологическая сортировка формул

договорная

На аукционе

20 июня 2020 в 21:09
24 июня
Описание работы

Пусть имеется некоторый набор формул, задающих зависимости между переменными. Например, объём V пирамиды, в основании которой лежит прямоугольник со сторонами a=10 и b=15, а высота равна полусумме сторон основания, определяется следующим набором формул: V = S*h / 3 S = a * b a, b = 10, 15 h = (a + b) / 2 Обратите внимание на то, что каждая формула состоит из левой и правой частей, разделённых знаком «=». Левая часть является списком переменных, а правая часть – списком соответствующих этим переменным выражений. Переменные в левой части и выражения в правой части разделяются запятыми. Формулы могут быть записаны в любом порядке, но, если в них нет циклических зависимостей, их можно расположить в порядке, в котором нужно выполнять вычисления. Например, существуют два варианта порядка формул для вычисления объёма пирамиды: Вариант 1 a, b = 10, 15 h = (a + b) / 2 S = a * b V = S*h / 3 Вариант 2 a, b = 10, 15 S = a * b h = (a + b) / 2 V = S*h / 3 Составьте программу, осуществляющую топологическую сортировку формул. Языком реализации программы выбран язык Java, точкой входа в программу должен являться метод main класса FormulaOrder. Для решения задачи нужно построить орграф, вершинами которого являются формулы, а дуги задают зависимости между ними. То есть, если формула v зависит от формулы u, то в графе существует дуга ?v,u?. Затем следует выполнить топологическую сортировку вершин этого орграфа, то есть расположить вершины в таком порядке, чтобы дуги вели от больших вершин к меньшим. Этот порядок, как не трудно догадаться, совпадает с порядком превращения «серых» вершин в «чёрные» в процессе обхода графа в глубину. Формулы подаются в программу через стандартный потока ввода. Они отделяются друг от друга символом перевода строки. Выражения в составе формул содержат знаки четырёх арифметических операций, круглые скобки, десятичные числа и имена переменных. Имя переменной – это последовательность латинских букв и десятичных цифр, начинающаяся с буквы. Программа должна выводить сообщение «syntax error», если какая-нибудь формула содержит синтаксическую ошибку, или если некоторая переменная присутствует в левой части нескольких формул, или если не существует формулы для вычисления какой-нибудь переменной. Программа должна выводить сообщение «cycle» в случае обнаружения циклической зависимости формул. Для обнаружения циклической зависимости следует проверять наличие обратных дуг при обходе графа в глубину. Напомним, что обратная дуга ведёт в «серую» вершину. Если ошибки в формулах не обнаружены, то программа должна выводить в стандартный поток вывода отсортированный набор формул. В случае существования нескольких вариантов взаимного расположения формул, требуется вывести любой из них. Ввод: V = S*h / 3 S = a * b a, b = 10, 15 h = (a + b) / 2 Вывод: a, b = 10, 15 h = (a + b) / 2 S = a * b V = S*h / 3


Вход на сайт
Войти
Данная функция доступна только
для зарегистрированных пользователей
Пожалуйста, авторизуйтесь, или пройдите регистрацию
Войти
Подтвердите ваш e-mail

Для завершения регистрации подтвердите свой e-mail: перейдите по ссылке, высланной вам в письме.

После этого будет создан ваш аккаунт и вы сможете войти на сайт и в личный кабинет.

ОК