Ну все добре, формула є, тільки як же тепер її порахувати? Першою виникла думкою було те, що завдання не нова, і напевно хтось десь вже робив подібне. Пошук в Інтернеті приніс деякі результати, але, чесно кажучи, засмутив мене тим, що все що я знайшов було або основний ідейної лінією, яка була і так зрозуміла, або це були готові програми, типу строкового калькулятора.
Корисним виявився тільки один приклад на Дельфі, в якому дана задача вирішувалася, але по-перше, все одно треба було переписувати на VB, а по-друге, там було все на стільки складно зроблено, що дивно, як це взагалі працює.
З цього, було прийнято рішення писати самостійно. І ось що з цього вийшло.
Отже, що збій представляє будь-яка формула, з математичними функціями, зведення в ступінь і дужками? Це послідовність дій, які необхідно здійснити з елементами формули, щоб отримати в результаті результат. Всі дії мають різний пріоритет. Нам необхідно навчити комп'ютер здійснювати ці дії.
Будь-яка формула, скільки б у ній елементів і операцій не було, завжди спрощується до простої арифметики з чотирма типами математичних операцій: +, -, /, *.
50 + sin (1) * cos (0) / (450 / (78 + 45)) розраховуючи послідовно вирази всередині дужок і функції отримаємо:
50 + 0 * 1 / 3.65 - ось функція, спрощена до простих арифметичних операцій.
Висновок: перше, що необхідно запрограмувати - "движок", який би вмів вважати такі вирази з чотирма найпростішими арифметичними діями.
Нам необхідно представити текстову рядок, яка не має ніякого смислового навантаження для VB в такому вигляді, щоб ми могли працювати з елементами формули як з окремими самостійними елементами, тобто цифрами і знаками арифметичних виразів. Причому повинна зберігатися зв'язок між ними і порядок дій. Перший вихід, який видався мені реальним - масив. Отже,
P.S. Движок готовий. Все реально працює, але:
По-друге: Це тільки движок, і формули з дужками і функціями він не вважає. Щоб працювати з дужками, необхідно послідовно інтерпретувати вирази всередині дужок, замінювати їх у формулі отриманим результатом, і, в підсумку, інтерпретувати спрощене вираз. З функціями те ж саме.
P.P.S. У мене все це працює (включаючи дужки і т.д.). Будуть питання - пишіть.