Здравствуйте,
Ваша задача будет состоять в следующем. Дан текстовый файл, первая строка которого содержит выражение, записанное по обычным математическим правилам (разрешается использовать целые и вещественные числа, переменные, т. е. слова из маленьких латинских букв без пробелов, арифметические операции, в том числе ^ - возведение в степень, скобки и тригонометрические функции). Последующие строки того же файла содержат определения функций, по одной функции на строку, такого вида:
имя(параметры)=выражение
Здесь имя функции должно подчиняться тем же правилам, что и имена переменных, параметры - список имен параметров функции через запятую, выражение формируется по тем же правилам, что и выражение на первой строке файла. Гарантируется уникальность имен функций, т. е. слова, использованные как имена функций, больше нигде не встречаются, и уникальность имен параметров (т. е. слово, испорльзованное как имя одного из параметров одной из функций, используется только в этой функции и только как соответствующий параметр).
Задача Вашей программы состоит в том, чтобы считать такой файл и выяснить, можно ли представить исходное выражение из первой строки файла как композицию функций, определенных в последующих строках этого файла. При этом не нужно принимать во внимание алгебраических и арифметических свойств участвующих в выражении операций (приоритеты операций стандартны, и все операции, кроме возведения в степень, левоассоциативны, а возведение в степень - правоассоциативна).
Если искомое представление в виде композиции возможно, нужно выводить его в другой текстовый файл в виде обычного выражения, а если невозможно - в файл результата выводится строка <<невозможно>>.
В качестве простейшего примера можно привести определения двух функций
f(x)=x+2
g(y)=y+3
Так вот, для исходного выражения t+2+3 ответом будет композиция g(f(t)), а для выражения t+5 ответом будет <<невозможно>>, равно как и для выражения 2+t+3.
Разумеется, как исходное выражение, так и определения функций могут быть гораздо сложнее.
Д. М.