Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Перевод текста в формулу Добавлено: 26.11.11 20:15  

Автор вопроса:  dimanpsp
Подскажите, как запилить такую программку:
26. Разработать программу «Вычисление формул, заданных в виде строки символов»
Функциональные требования:
• исходная формула вводится пользователем в виде строки;
• формула может содержать: числа, переменные (состоят из символов латинского алфавита); 4 арифметические операции: +, -, *, /; скобки вида ();
• значения переменных вводятся пользователем;
• результаты вычисления формулы выводятся на экран.

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 AxeL



ICQ: 264730390 

Вопросов: 2
Ответов: 106
 Профиль | | #1 Добавлено: 28.11.11 03:36
исходная формула вводится пользователем в виде строки;
Либо рисуешь форму со строкой ввода, либо используешь InputBox...
формула может содержать: числа, переменные (состоят из символов латинского алфавита); 4 арифметические операции: +, -, *, /; скобки вида ();
Можно использовать RegExp, чтобы проверить правильность строки.
значения переменных вводятся пользователем;
Заменяешь в исходной строке через Replace.
результаты вычисления формулы выводятся на экран.
Можно создать лист(и сделать его скрытым) для вычислений, записав формулу в какую-либо ячейку.
  1. Worksheets("#1#").Range("D3").Formula = "=Лист1!B1+Лист1!C1"
  2. MsgBox Worksheets("#1#").Range("D3").Value
В приведенном примере вычисления проводятся в ячейке ";D3" листа (уже созданного и скрытого) с именем "#1#", а данные соответственно, берутся из ячеек "B1" и "C1" листа "Лист1".

Ответить

Номер ответа: 2
Автор ответа:
 AxeL



ICQ: 264730390 

Вопросов: 2
Ответов: 106
 Профиль | | #2 Добавлено: 28.11.11 04:03
Для RegExp'а можно использовать такой Pattern
  1. ^(([0-9]{1,8}|[a-z]{1,5})([\+\-\*\/][\(]?([0-9]{1,8}|[a-z]{1,5})[\)]?)+)$

Ответить

Номер ответа: 3
Автор ответа:
 User



Вопросов: 0
Ответов: 1
 Профиль | | #3 Добавлено: 19.12.11 03:29
AxeL
А не могли бы помочь составить pattern такой, чтобы приведенный Вами regexp позволял
- вводить математические функции (типа cos, sin);
- название переменных допускалось бы, например, только x1, x2, x3,... и y1, y2, y3,... ? Т.е. x и y с индексами.
Был бы очень признателен за помощь.

Ответить

Номер ответа: 4
Автор ответа:
 AxeL



ICQ: 264730390 

Вопросов: 2
Ответов: 106
 Профиль | | #4 Добавлено: 19.12.11 11:59
Pattern(шаблон) дан лишь для примера. По RegExp информации много в интернете. В данном случае по шаблону проще проверить правильность вводимой информации(как проверить парность скобок я не знаю, в шаблоне этого нет). Не имеет смысла усложнять шаблон функциями. Переменные можно довольно просто обработать, ища то, что не является числом и выводя запрос пользователю на инициализацию этой переменной(или беря значение из таблицы)... если очень нужно, то шаблон будет примерно выглядеть так:
  1. ^(([0-9]{1,8}|([x|y][0-9])|(sin|cos[\(][0-9]{1,3}[\)]))([\+\-\*\/][\(]?([0-9]{1,8}|([x|y][0-9])|(sin|cos[\(][0-9]{1,3}[\)]))[\)]?)+)$
. Для более быстрого изучения и понимания шаблонов советую программу RegExr(работает через Adobe Air)(обе бесплатные).

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам