А вот это уже серьёзный разговор, буду отвечать серьёзно.
Если много раз и из разных источников слышите фразу «разберитесь сначала», то наверно это не просто так.
Ситуация в истории не новая. Поэтому, в любом случае самопроверки и проверки утверждений комментаторов присутствуют. Ещё спасают вменяемые комментаторы.
Обратите внимание на моменты, которые являются однозначными индикаторами понимания, что тут что-то не так:
За последующий разбор отдельное спасибо.
Движение в двух направлениях — либо нужно всю строку держать в памяти либо делать хитрую буферизацию.
Это так. Однако хотелось бы пример где это не так. Формула должна лежать в памяти либо быть разбита на логические блоки.
Минимум 4 разнонаправленных прохода по одним и тем же местам строки с произвольной дистанцией:
Хотелось бы понять что Вас смущает. Тоже самое происходит в алгоритмах с ОПН. Или положить в стек -> вытащить из стека это не вперёд — назад? Или положить "(" в стек -> дойти до ")" -> развернуться и выбрать всё до "(" это не вперёд-назад? Или сначала посимвольно сформировать операнды -> положить операнд в стек -> вытащить операнд из стека Это не вперёд назад? Или в ОПН не считается? И это ещё я кратенько по ОПН.
Модификация строки: предлагается заменять фрагмент (операции копирования, выделение памяти и прочие радости), плюс для этого нужно число сконвертировать в строку и потом опять парсить
Вот здесь вы не очень внимательно прочитали. В Пинг-Понге есть только две рабочих памяти: 1. Рабочая строка 2. строка Фрагмента. В ОПН минимум три: 1. Рабочая строка 2. стек для операций 3. стек для операндов (вариант наиболее эффективного использования ОПН) либо (вариант неэффективного использования) 1. Рабочая строка 2. выходная очередь (ОПН), которая в дальнейшем для расчётов требует дополнительного стека для операндов. То есть всё равно ТРИ памяти. Вас смущает что вместо двух стеков используется строка? — не скажу что это серьёзный аргумент.
Подмена понятий: использование регулярного выражения это не избавление от посимвольного прохода, это использование чего-то готового.
Ну если Вы в курсе регулярных выражений, то скажите чего. Я бы, например, использовал конструкцию практически типа маски и быстро и эффективно. Что применяется при анализе КАЖДОГО символа в ОПН, чтобы определить кто есть кто, это я про символы? или у вас машина каким то неведомым способом узнаёт что это есть операция, а это число, а тут ещё и скобка затерялась. Разочарую всё через сравнение двух символов происходит. А в регулярных выражениях можно было бы попробовать механизмы поиска фрагмента текста. Очень даже эффективная технология.
Ну а по поводу использования чего-то готового, так в любом языке высокого уровня любой оператор это конструкция из блоков более низкоуровневого языка. Предлагаете писать в машинных кодах?
И коллеги должны поверить, что это эффективнее однонаправленного прохода + использование стэка с числами (сортировочная станция + дерево расчета)?
Коллегам стоит поверить что существует не только ОПН. Кстати, в статье я ратовал не за Пинг-Понг, а за отмену монополии ОПН. Про большую эффективность Пинг-Понга по производительности в статье не найдёте ни слова. А вот эффективность ОПН на больших сложных формулах с множественными вложениями скобок у вопросы действительно вызвала.
Нет, об этом всё-таки надо отдельно
эффективнее однонаправленного прохода + использование стэка с числами (сортировочная станция + дерево расчета)?
про однонаправленный проход — если по рабочей строке вы идёте один раз в одну сторону, то стоит посчитать количество суеты, которая образуется в других местах.
про использование одного стека — хотел бы увидеть хоть одного человека, который сможет прийти от исходной инфиксной записи к конечному результату с помощью ОДНОГО стека на достаточно сложной формуле с вещественными операндами длиной >= 3.
Кстати, в силу вышесказанного, мне не кажется что Вы хорошо разбираетесь в ОПН.
С какой целью это необходимо было разбирать в комментариях пошагово, если уже давно описано в литературе?
Чтобы те, кто прочитает этот комментарий могли самостоятельно сделать выводы по многим другим комментариям.
А про литературу тоже очень интересно. Достаёшь классика и показываешь, а в ответ:«это всё фигня — в топку».
Да, к сожалению, это так.
Просмотрите комментарии. Сколько человек задавали реальные вопросы, сколько попробовало покопаться? — Единицы.
Комментарии противоречат друг другу, два основных посыла: «ОПН наше всё, а ты ничего не понимаешь», «ОПН: нажми на кнопку — получишь результат». То есть это мы знаем, в это мы верим и этой веры нам достаточно, всё что не так — ересь. И что это как не религиозное сознание?
Понимающие конкретны. Помнящие и не очень понимающие, к сожалению, истеричны.
Сложите факторы и получите чисто религиозное сознание.
Нет, это не моя проблема. Если кому-то будет интересно, то он это сделает. Мне нужно было решить локальную проблему — я её решил. Чтобы, если у кого-то появится потребность в подобном решении, у него была заготовка, я начал готовить статью. В процессе подготовки вылезли проблемы с данным вопросом в нашем образовании — была построена схема оппозиции. Статья свою задачу решила. Проблема даже больше, чем мне виделось исходно. Сейчас отвечу на внятные комментарии и положу проект на полку.
Как-то так.
Это и было для расчета конструкторской документации. Причем внутренней, на изготовление деталей.
Ну вот Вы и стали упорядочивать мои мозги по вашей задаче :)
«Формулы» на входе — уравнения расчетов, на выходе получаем габариты заготовок. Формулы меняются время от времени из-за изменения технологий или используемых материалов (далеко не каждый день). Список деталей каждый раз новый.
Становится ещё немного понятнее.
Уточните ещё пожалуйста кто запускает эти расчёты и какая ваша связь с такими людьми как разработчика программы
Вы зря записываете меня в антагониста ОПН. Он много где эффективно используется, наверное и в компиляторах очень полезен, не знаю, компиляторами не занимался.
Но давайте реально посмотрим на обсуждение — ну просто битва за предмет религиозного культа.
Да и с Вами у нас очень как-то по смешному:
— это один алгоритм.
— нет это два разных алгоритма
— результат в итоге один?
— нет можно распарсивать деревья для последующей оптимизации
Ну и т.д.
Это не упрёк.
Только что с другим комментатором мы провели разбор обработки записи ОПН по шагам. Товарищ первый сказал что ОПН должна ложиться исходно не в стек (LIFO), а в очередь (FIFO), но чтобы посчитать нужен ещё и пустой стек для операндов. И что эффективнее сразу использовать два стека, чтобы обеспечить расчёты сходу. Но тогда «безскобочники» встают на уши. Не начинают разбираться, а сразу бросаются в бой. Ну и что это как не религиозные убеждения?
Так что, как оказалось, всё ещё хуже чем я думал изначально. Так что даже не просто в ОПН дело.
Хорошо. Давайте я попробую по ваше методе.
Участники: 1. очередь (FIFO) содержит ОПН; 2. стек (LIFO) пустой
Примечание: Это уже не схема с одним стеком, часто отстаиваемая в комментариях
Расчёт:
1.«A B C D E F + / — * +»
2. А — достали из очереди; число — положили в стек; (А) — состояние стека
3. B — достали из очереди; число — положили в стек; (АB) — состояние стека
4. C — достали из очереди; число — положили в стек; (АBC) — состояние стека
5. D — достали из очереди; число — положили в стек; (АBCD) — состояние стека
6. E — достали из очереди; число — положили в стек; (АBCDE) — состояние стека
7. F — достали из очереди; число — положили в стек; (АBCDEF) — состояние стека
8. + — достали из очереди; операция — вытащили E и F = r1 в стек (АBCDr1) — состояние стека
9. / — достали из очереди; операция — вытащили r1 и D = r2 в стек (АBCr2) — состояние стека
10. "- " — достали из очереди; операция — вытащили r2 и C = r3 в стек (АBr3) — состояние стека
11. * — достали из очереди; операция — вытащили r3 и B = r4 в стек (Аr4) — состояние стека
12. + — достали из очереди; операция — вытащили r4 и А = r5 в стек (r5) — состояние стека
Умышленно прошёл всё, чтобы было видно: во-первых, работа возможно только с 2-мя выходными объектами (это любителям рассуждать про один стек, не вам); во-вторых, у нас получается три этапа:1. преобразование в ОПН 2. перенесение операндов в стек 3. непосредственно расчёт формулы. Это уже любителям рассказывать про всё за один проход.
Согласен с Вами, использовать сразу два стека сильно эффективнее (часть расчётов происходит сходу, но тогда придётся работать со скобками, а это уже больно сердцу «безскобочников».
Кстати, Вы очень замечательно заменили первичное хранилище ОПН очередью. Вы первый кто вообще произнёс это слово в обсуждении.
Не знаю как у Вас, а у меня точно складывается ощущение, что большая часть комментирующих плохо представляют работу алгоритмов на ОПН. И не понятно что с этим делать… :((
Вы сейчас серьёзно?
Я уже попросил одного из комментаторов разделить эти алгоритмы между собой на примере из классической книги по алгоритмам, указанной в начале статьи. Можете тоже попробовать.
Не надо мантр, давайте что-нибудь сделаем реальное.
Использовать и понимать несколько разные вещи. Мы часто в жизни используем то, что до конца не понимаем. Поэтому и предложено приверженцам одного стека и простоты суммарного алгоритма преобразование — расчёт провести натурный эксперимент на бумаге. Такие эксперименты сильно прочищают мозги.
В статье присутствует пошаговое исполнение ОПН, правда на небольшом кусочке, который был достаточен для демонстрации. Также в статье присутствует полный расчёт той же формулы на Пинг-Понге.
В данном случае я имел ввиду алгоритм получения конечного результата через преобразование в ОПН. Так что объедините вместе обозначенные вами части и получите результат. Всё просто.
Не совсем так. Я считаю, что с учётом преобразования на больших формулах его эффективность под вопросом. Его эффективность максимальна на коротких с одноприоритетными операциями формулах. При появлении скобок и вещественных операндов с длиной > 1 его эффективность сильно падает.
Я правильно понял, что единственный недостаток, вменяемый обратной польской нотации, — это неинтуитивность?
И да и нет. Да, потому что в процессе обучения, большинство принимают на веру что это самый эффективный способ разбора и расчёта инфиксных (нормальных) выражений. Очень много комментариев строится на повторении мантр. «нажмёшь на кнопку — получишь результат». А когда показываешь очевидные вещи, в ответ получаешь «разберитесь сначала». А это сродни спору о боге (есть — нет). Для обучения это однозначно плохо.
Второе, на что я обратил внимание при анализе существующих алгоритмов разбора математических выражений — это какая-то безальтернативность решения ОПН в информационной сфере. Взять тот же Хабр. Статей по разбору вполне себе достаточно, я только прочитал с десяток, отбросив рекурсию и деревья. Только ОПН. Ну не верю я что никто и нигде ничего больше не делал. Правда в коментах мне подбросили пару ссылок, обязательно посмотрю.
В третьих, из коментов не только к этой статье, редкий человек решится критиковать ОПН. А ведь алгоритм явно перегружен посимвольной логикой именно в силу исходной парадигмы.
Причём я не утверждаю что он плох или неэффективен, но несколько удивлён таким к нему отношением и таким непониманием его работы. Поневоле задумаешься: «А может дело во мне, может я чего не так». Проверишься — нет, вроде как без косяков.
Так что если исходно посылом была именно неинтуитивность, то затем вопросов прибавилось.
В комментариях я видел несколько человек, успешно использующих обратную польскую нотацию в жизни.
Да, я тоже видел. И они, кстати, за редким исключением, предпочитают говорить о конкретике.
Так что я не против ОПН как таковой, я против её роли в современном учебном процессе и превращения её в объект религиозного поклонения.
надо рассчитать комплектующие для его изготовления.
Это не результат. Ну хотя бы потому, что существует конструкторская документация в которой все комплектующие на изделие определены и описаны, даже если изделие может иметь разные массо-габаритные характеристики.
Если вам интересно, давайте посмотрим на уровне логики.
Про статичность формул. У меня почему-то сложилось впечатление что у вас есть некоторый набор формул, фиксированный, с помощью которых (комбинируя состав которых) вы получаете требуемый результат. То есть сами формулы не изменяются, а становятся фрагментами некоторой общей в той или иной комбинации.
Не подумайте что я ёрничаю, приятно иметь дело с человеком, который может доказать свои слова делом.
если цифры на место подставить то вычисление в ОПН я произведу гораздо быстрее чем вы в оригинале
Предлагаю сделать так: пока Вы подставляете цифры и рисуете пошаговое исполнение (у меня оно просто уже нарисовано для Пинг-Понга), я соберу ваши утверждения с комментариев и мы сопоставим эти утверждения с пошаговым исполнением. Работка, конечно, та ещё, но тогда всё встанет на свои места.
У меня только три вопроса по результату:
1. наличие (-1) каким образом сохранились скобки?
2. выражение «EFGHJ(-1)*-» Нет ли у вас ощущения что операций явно недостаточно для такого количества операндов?
3. Каким образом будет рассчитываться выражение, если оно лежит в одном стеке, а мы должны для выполнения к каждой операции присоединить ещё и пару операндов?
Нас учили, что там два чёрных ящика, связанные в «конвейер».
Хм-м… давайте обратимся к классикам.
Где бы вы поставили на этой картинке разграничение между двумя чёрными ящиками? Действительно интересно. Я, например вижу единый процесс в котором присутствует и считывание и сортировка и вычисления вперемешку.
можно изобретать всё что угодно, но не удивляйтесь тому, что ваших благих побуждений не понимают те, кто занимается вопросом более глубоко.
Читая комментарии я убедился что ОПН, в большинстве случаев, это вера, а перед верой логика бессильна. Так что если хотите, то можно поговорить без мантр и камланий. В ином случае это не имеет смысла.
Спасибо за корректное указание на мои ошибки. Действительно, рассматривая алгоритмы как целостное получение результата от одинаковых исходных данных я несколько упустил специфику терминологии.
Что интересно, так это то, что в комментариях отсутствует пошаговый разбор алгоритма на ОПН. Утверждения есть, а разбора нет. И это говорит о многом, например, о неполном понимании его работы «нажми на кнопку — получишь результат». И это не только в комментариях, но и в достаточно серьёзной литературе.
Если у Вас есть время, то можем в режиме диалога попробовать устранить нестыковки и противоречия, которые присутствуют в описании алгоритма и его реальном пошаговом исполнении.
А вопрос по сути — просто из интереса, а как еще можно было этот велосипед соорудить)
Если я правильно понял, то в вашей задаче формулы статичны и изменяются только переменные. В таком случае, ну так сходу с тяжёлой головой, отдать формулы на откуп компилятору — пусть сам разбирается, а потом, в процессе работы скармливать значения переменных упорядоченным массивом. Даже если формул несколько. достаточно помнить только кому какой массив подсунуть.
Ситуация в истории не новая. Поэтому, в любом случае самопроверки и проверки утверждений комментаторов присутствуют. Ещё спасают вменяемые комментаторы.
За последующий разбор отдельное спасибо.
Это так. Однако хотелось бы пример где это не так. Формула должна лежать в памяти либо быть разбита на логические блоки.
Хотелось бы понять что Вас смущает. Тоже самое происходит в алгоритмах с ОПН. Или положить в стек -> вытащить из стека это не вперёд — назад? Или положить "(" в стек -> дойти до ")" -> развернуться и выбрать всё до "(" это не вперёд-назад? Или сначала посимвольно сформировать операнды -> положить операнд в стек -> вытащить операнд из стека Это не вперёд назад? Или в ОПН не считается? И это ещё я кратенько по ОПН.
Вот здесь вы не очень внимательно прочитали. В Пинг-Понге есть только две рабочих памяти: 1. Рабочая строка 2. строка Фрагмента. В ОПН минимум три: 1. Рабочая строка 2. стек для операций 3. стек для операндов (вариант наиболее эффективного использования ОПН) либо (вариант неэффективного использования) 1. Рабочая строка 2. выходная очередь (ОПН), которая в дальнейшем для расчётов требует дополнительного стека для операндов. То есть всё равно ТРИ памяти. Вас смущает что вместо двух стеков используется строка? — не скажу что это серьёзный аргумент.
Ну если Вы в курсе регулярных выражений, то скажите чего. Я бы, например, использовал конструкцию практически типа маски и быстро и эффективно. Что применяется при анализе КАЖДОГО символа в ОПН, чтобы определить кто есть кто, это я про символы? или у вас машина каким то неведомым способом узнаёт что это есть операция, а это число, а тут ещё и скобка затерялась. Разочарую всё через сравнение двух символов происходит. А в регулярных выражениях можно было бы попробовать механизмы поиска фрагмента текста. Очень даже эффективная технология.
Ну а по поводу использования чего-то готового, так в любом языке высокого уровня любой оператор это конструкция из блоков более низкоуровневого языка. Предлагаете писать в машинных кодах?
Коллегам стоит поверить что существует не только ОПН. Кстати, в статье я ратовал не за Пинг-Понг, а за отмену монополии ОПН. Про большую эффективность Пинг-Понга по производительности в статье не найдёте ни слова. А вот эффективность ОПН на больших сложных формулах с множественными вложениями скобок у вопросы действительно вызвала.
Нет, об этом всё-таки надо отдельно
про однонаправленный проход — если по рабочей строке вы идёте один раз в одну сторону, то стоит посчитать количество суеты, которая образуется в других местах.
про использование одного стека — хотел бы увидеть хоть одного человека, который сможет прийти от исходной инфиксной записи к конечному результату с помощью ОДНОГО стека на достаточно сложной формуле с вещественными операндами длиной >= 3.
Кстати, в силу вышесказанного, мне не кажется что Вы хорошо разбираетесь в ОПН.
Чтобы те, кто прочитает этот комментарий могли самостоятельно сделать выводы по многим другим комментариям.
А про литературу тоже очень интересно. Достаёшь классика и показываешь, а в ответ:«это всё фигня — в топку».
Просмотрите комментарии. Сколько человек задавали реальные вопросы, сколько попробовало покопаться? — Единицы.
Комментарии противоречат друг другу, два основных посыла: «ОПН наше всё, а ты ничего не понимаешь», «ОПН: нажми на кнопку — получишь результат». То есть это мы знаем, в это мы верим и этой веры нам достаточно, всё что не так — ересь. И что это как не религиозное сознание?
Понимающие конкретны. Помнящие и не очень понимающие, к сожалению, истеричны.
Сложите факторы и получите чисто религиозное сознание.
Как-то так.
Ну вот Вы и стали упорядочивать мои мозги по вашей задаче :)
Становится ещё немного понятнее.
Уточните ещё пожалуйста кто запускает эти расчёты и какая ваша связь с такими людьми как разработчика программы
Но давайте реально посмотрим на обсуждение — ну просто битва за предмет религиозного культа.
Да и с Вами у нас очень как-то по смешному:
— это один алгоритм.
— нет это два разных алгоритма
— результат в итоге один?
— нет можно распарсивать деревья для последующей оптимизации
Ну и т.д.
Это не упрёк.
Только что с другим комментатором мы провели разбор обработки записи ОПН по шагам. Товарищ первый сказал что ОПН должна ложиться исходно не в стек (LIFO), а в очередь (FIFO), но чтобы посчитать нужен ещё и пустой стек для операндов. И что эффективнее сразу использовать два стека, чтобы обеспечить расчёты сходу. Но тогда «безскобочники» встают на уши. Не начинают разбираться, а сразу бросаются в бой. Ну и что это как не религиозные убеждения?
Так что, как оказалось, всё ещё хуже чем я думал изначально. Так что даже не просто в ОПН дело.
Участники: 1. очередь (FIFO) содержит ОПН; 2. стек (LIFO) пустой
Примечание: Это уже не схема с одним стеком, часто отстаиваемая в комментариях
Расчёт:
1.«A B C D E F + / — * +»
2. А — достали из очереди; число — положили в стек; (А) — состояние стека
3. B — достали из очереди; число — положили в стек; (АB) — состояние стека
4. C — достали из очереди; число — положили в стек; (АBC) — состояние стека
5. D — достали из очереди; число — положили в стек; (АBCD) — состояние стека
6. E — достали из очереди; число — положили в стек; (АBCDE) — состояние стека
7. F — достали из очереди; число — положили в стек; (АBCDEF) — состояние стека
8. + — достали из очереди; операция — вытащили E и F = r1 в стек (АBCDr1) — состояние стека
9. / — достали из очереди; операция — вытащили r1 и D = r2 в стек (АBCr2) — состояние стека
10. "- " — достали из очереди; операция — вытащили r2 и C = r3 в стек (АBr3) — состояние стека
11. * — достали из очереди; операция — вытащили r3 и B = r4 в стек (Аr4) — состояние стека
12. + — достали из очереди; операция — вытащили r4 и А = r5 в стек (r5) — состояние стека
Умышленно прошёл всё, чтобы было видно: во-первых, работа возможно только с 2-мя выходными объектами (это любителям рассуждать про один стек, не вам); во-вторых, у нас получается три этапа:1. преобразование в ОПН 2. перенесение операндов в стек 3. непосредственно расчёт формулы. Это уже любителям рассказывать про всё за один проход.
Согласен с Вами, использовать сразу два стека сильно эффективнее (часть расчётов происходит сходу, но тогда придётся работать со скобками, а это уже больно сердцу «безскобочников».
Кстати, Вы очень замечательно заменили первичное хранилище ОПН очередью. Вы первый кто вообще произнёс это слово в обсуждении.
Не знаю как у Вас, а у меня точно складывается ощущение, что большая часть комментирующих плохо представляют работу алгоритмов на ОПН. И не понятно что с этим делать… :((
Я уже попросил одного из комментаторов разделить эти алгоритмы между собой на примере из классической книги по алгоритмам, указанной в начале статьи. Можете тоже попробовать.
Не надо мантр, давайте что-нибудь сделаем реальное.
В данном случае я имел ввиду алгоритм получения конечного результата через преобразование в ОПН. Так что объедините вместе обозначенные вами части и получите результат. Всё просто.
И да и нет. Да, потому что в процессе обучения, большинство принимают на веру что это самый эффективный способ разбора и расчёта инфиксных (нормальных) выражений. Очень много комментариев строится на повторении мантр. «нажмёшь на кнопку — получишь результат». А когда показываешь очевидные вещи, в ответ получаешь «разберитесь сначала». А это сродни спору о боге (есть — нет). Для обучения это однозначно плохо.
Второе, на что я обратил внимание при анализе существующих алгоритмов разбора математических выражений — это какая-то безальтернативность решения ОПН в информационной сфере. Взять тот же Хабр. Статей по разбору вполне себе достаточно, я только прочитал с десяток, отбросив рекурсию и деревья. Только ОПН. Ну не верю я что никто и нигде ничего больше не делал. Правда в коментах мне подбросили пару ссылок, обязательно посмотрю.
В третьих, из коментов не только к этой статье, редкий человек решится критиковать ОПН. А ведь алгоритм явно перегружен посимвольной логикой именно в силу исходной парадигмы.
Причём я не утверждаю что он плох или неэффективен, но несколько удивлён таким к нему отношением и таким непониманием его работы. Поневоле задумаешься: «А может дело во мне, может я чего не так». Проверишься — нет, вроде как без косяков.
Так что если исходно посылом была именно неинтуитивность, то затем вопросов прибавилось.
Да, я тоже видел. И они, кстати, за редким исключением, предпочитают говорить о конкретике.
Так что я не против ОПН как таковой, я против её роли в современном учебном процессе и превращения её в объект религиозного поклонения.
Это не результат. Ну хотя бы потому, что существует конструкторская документация в которой все комплектующие на изделие определены и описаны, даже если изделие может иметь разные массо-габаритные характеристики.
Если вам интересно, давайте посмотрим на уровне логики.
Про статичность формул. У меня почему-то сложилось впечатление что у вас есть некоторый набор формул, фиксированный, с помощью которых (комбинируя состав которых) вы получаете требуемый результат. То есть сами формулы не изменяются, а становятся фрагментами некоторой общей в той или иной комбинации.
Вопрос только сколько потребуется маленьких в одном месте и сколько больших в другом.
Предлагаю сделать так: пока Вы подставляете цифры и рисуете пошаговое исполнение (у меня оно просто уже нарисовано для Пинг-Понга), я соберу ваши утверждения с комментариев и мы сопоставим эти утверждения с пошаговым исполнением. Работка, конечно, та ещё, но тогда всё встанет на свои места.
У меня только три вопроса по результату:
1. наличие (-1) каким образом сохранились скобки?
2. выражение «EFGHJ(-1)*-» Нет ли у вас ощущения что операций явно недостаточно для такого количества операндов?
3. Каким образом будет рассчитываться выражение, если оно лежит в одном стеке, а мы должны для выполнения к каждой операции присоединить ещё и пару операндов?
Хм-м… давайте обратимся к классикам.
Где бы вы поставили на этой картинке разграничение между двумя чёрными ящиками? Действительно интересно. Я, например вижу единый процесс в котором присутствует и считывание и сортировка и вычисления вперемешку.
Читая комментарии я убедился что ОПН, в большинстве случаев, это вера, а перед верой логика бессильна. Так что если хотите, то можно поговорить без мантр и камланий. В ином случае это не имеет смысла.
Что интересно, так это то, что в комментариях отсутствует пошаговый разбор алгоритма на ОПН. Утверждения есть, а разбора нет. И это говорит о многом, например, о неполном понимании его работы «нажми на кнопку — получишь результат». И это не только в комментариях, но и в достаточно серьёзной литературе.
Если у Вас есть время, то можем в режиме диалога попробовать устранить нестыковки и противоречия, которые присутствуют в описании алгоритма и его реальном пошаговом исполнении.
Если я правильно понял, то в вашей задаче формулы статичны и изменяются только переменные. В таком случае, ну так сходу с тяжёлой головой, отдать формулы на откуп компилятору — пусть сам разбирается, а потом, в процессе работы скармливать значения переменных упорядоченным массивом. Даже если формул несколько. достаточно помнить только кому какой массив подсунуть.