Добрый день, уважаемые гуру Экселя. Хотел помочь ребенку с проверкой решенных примеров по математике. Застрял на этапе вычислений. Суть такова: имеется пример со множеством математических действий и скобок. Нужно проставить последовательность выполнений действий (это я сделал), "вычленить" из примера сами эти действия и решить их. (на этом застрял) Образец во вложении. Подтолкните на правильный путь. Спасибо.
Добрый день, уважаемые гуру Экселя. Хотел помочь ребенку с проверкой решенных примеров по математике. Застрял на этапе вычислений. Суть такова: имеется пример со множеством математических действий и скобок. Нужно проставить последовательность выполнений действий (это я сделал), "вычленить" из примера сами эти действия и решить их. (на этом застрял) Образец во вложении. Подтолкните на правильный путь. Спасибо.meiv
Вообще, данную задачу (по разбору-вычислению арифметического выражения) выполнять формулами, да ещё с неограниченным количеством действий - это некий филиал ада. Дело в том, что такие задачи обычно решаются (алгоритмически) построением бинарного дерева (с уровнями последовательности выполнения операций). Поэтому кодом (макросами) "нарисовать" нужные вам вычисления было бы достаточно легко, а вот раскладывать дерево в виде плоской таблицы, а затем собирать его... Кстати, даже если работать формулами - то проще использовать фрагменты исходной строки, а не разложение на символы. Потому что в едином фрагменте вы можете подменять вычисленную часть на результат одной операцией, а получаемая строка - станет входным фрагментом для операций предыдущего уровня.
Вообще, данную задачу (по разбору-вычислению арифметического выражения) выполнять формулами, да ещё с неограниченным количеством действий - это некий филиал ада. Дело в том, что такие задачи обычно решаются (алгоритмически) построением бинарного дерева (с уровнями последовательности выполнения операций). Поэтому кодом (макросами) "нарисовать" нужные вам вычисления было бы достаточно легко, а вот раскладывать дерево в виде плоской таблицы, а затем собирать его... Кстати, даже если работать формулами - то проще использовать фрагменты исходной строки, а не разложение на символы. Потому что в едином фрагменте вы можете подменять вычисленную часть на результат одной операцией, а получаемая строка - станет входным фрагментом для операций предыдущего уровня.AndreTM
meiv, спортивного интереса ради написал программу, которая решает задачу для формулы в ячейке A1. Корректность скобок на совести пользователя. В четвёртом столбце, если выделить ячейку - можно увидеть полную составляющую значения со всеми операциями.
Приглашаю протестировать.
Работает только со стандартными операциями: сложение, вычитание, умножение, деление.
AndreTM, Ваше мнение о придуманном мною алгоритме было бы весьма ценно.
meiv, спортивного интереса ради написал программу, которая решает задачу для формулы в ячейке A1. Корректность скобок на совести пользователя. В четвёртом столбце, если выделить ячейку - можно увидеть полную составляющую значения со всеми операциями.
Приглашаю протестировать.
Работает только со стандартными операциями: сложение, вычитание, умножение, деление.
AndreTM, Ваше мнение о придуманном мною алгоритме было бы весьма ценно.Rioran
проще использовать фрагменты исходной строки, а не разложение на символы. Потому что в едином фрагменте вы можете подменять вычисленную часть на результат одной операцией, а получаемая строка - станет входным фрагментом для операций предыдущего уровня.
я пробовал и так, не смог
Rioran Офигенно! Как Вы это сделали??? Спасибо огромное!
Теперь уже у меня проснулся спортивный интерес и хотелось бы все таки завершить свой вариант формулами
проще использовать фрагменты исходной строки, а не разложение на символы. Потому что в едином фрагменте вы можете подменять вычисленную часть на результат одной операцией, а получаемая строка - станет входным фрагментом для операций предыдущего уровня.
Если вкратце, то разложил формулу на символы, каждому символу присвоил "уровень вложенности" (зависит от скобок) и каждому ключевому символу присвоил номер операции. Отталкиваясь от номера операции в обе стороны вдоль символов формулы ищу границы текущей операции.
Если вкратце, то разложил формулу на символы, каждому символу присвоил "уровень вложенности" (зависит от скобок) и каждому ключевому символу присвоил номер операции. Отталкиваясь от номера операции в обе стороны вдоль символов формулы ищу границы текущей операции.Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Сообщение отредактировал Rioran - Пятница, 24.10.2014, 09:34