Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 14.08.2007
Сообщений: 7

Как сделать evaluate формулы, которая введена в TextBox?

14.08.2007, 11:16. Показов 1627. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Господа, подскажите пожалуйста как сделать evaluate формулы которая введена в TextBox.
Я понял что в Basice нет функции которая вычисляет формулу например как в FoxPro
evaluate(). Неужели надо делать синтаксический разбор формулы вручную?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.08.2007, 11:16
Ответы с готовыми решениями:

Сделать возможным перенос строк в TextBox. Или сделать, чтобы RichTextBox отображал текст неформатированным (как TextBox)
Вот хотел узнать, как сделать так, чтобы RichTextBox отображал текст не форматированным? Или как сделать, чтобы в TextBox при нажатии...

Как называется инфо, которая введена в поля интерфейса для последующей записи в базу данных?
У меня еще один вопросик. При описании прецедентов своей программы хочу описать следующий прецедент "Запись информации о клиенте...

Как сдеать розбитие формулы из одного textBox
Как сделать что бы когда я ввожу в textBox послео окончательного ввода оно разбивало его на числа. Например если вводим 2+2 то что бы...

3
0 / 1 / 3
Регистрация: 27.03.2012
14.08.2007, 11:56
How do I evaluate a math string?
The VBA languages in most Microsoft products include an Eval() function that can properly return expressions such as '2+2' or '4*(3^2)/10-3'. However, VB itself is missing such a function. The Knowledge Base suggests instantiating Excel and using its Eval function, but you cannot guarantee that Excel is installed on every system. KB Article Q86688 includes an evaluation function for DOS Basic. I have translated this to VB here.

SUMMARY

This article contains an example program that evaluates a numeric expression contained in a string, mimicking the operators, built-in functions, and order of evaluation used by Microsoft Basic language products.

The example program listed below accepts number constants written as decimal numbers with an optional fraction. For example, it accepts '123' and '123.4'. It is possible to modify the program to recognize hexadecimal, scientific notation, or other formats.

This example program also recognizes the following functions: ABS, ATN, COS, EXP, FIX, INT, LOG, RND, SNG, SIN, SQR, and TAN.

Steps to Create Example Program

Run Visual Basic, or from the File menu, choose New Project (press ALT, F, N) if Visual Basic is already running. Form1 will be created by default.

Add a text box (Text1) and a command button (Command1) to Form1.

Delete the text in the Text property of Text1 to make it empty.

Enter the following code in the Command1_Click event procedure:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
Private Sub Command1_Click ()
    Dim n As Double
    If e_eval(Text1.Text, n) Then
      MsgBox n
    End If
End Sub
Add the following code in the (General)(Declaration) section of Form1:
 
Dim e_input As String     ' Expression input string.
Dim e_tok As String       ' Current token kind.
Dim e_spelling As String  ' Current token spelling.
Dim e_error As Integer    ' Tells if syntax error occurred.
 
' e_eval
'   Evaluate a string containing an infix numeric expression.
'   If successful, return true and place result in .
'   This is the top-level function in the expression evaluator.
Function e_eval (ByVal s As String, value As Double) As Integer
   ' Initialize.
   e_error = 0
   e_input = s
   Call e_nxt
 
   ' Evaluate.
   value = e_prs(1)
 
   ' Check for unrecognized input.
   If e_tok <> '' And Not e_error Then
      MsgBox 'syntax error, token = '' + e_spelling + '''
      e_error = -1
   End If
 
   e_eval = Not e_error
End Function
 
' e_prs
'   Parse an expression, allowing operators of a specified
'   precedence or higher. The lowest precedence is 1.
'   This function gets tokens with e_nxt and recursively
'   applies operator precedence rules.
Function e_prs (p As Integer) As Double
   Dim n As Double    ' Return value.
   Dim fun As String  ' Function name.
 
   ' Parse expression that begins with a token (precedence 12).
   If e_tok = 'num' Then
      ' number.
      n = Val(e_spelling)
      Call e_nxt
   ElseIf e_tok = '-' Then
      ' unary minus.
      Call e_nxt
      n = -e_prs(11)    ' Operand precedence 11.
   ElseIf e_tok = 'not' Then
      ' logical NOT.
      Call e_nxt
      n = Not e_prs(6)  ' Operand precedence 6.
   ElseIf e_tok = '(' Then
      ' parentheses.
      Call e_nxt
      n = e_prs(1)
      Call e_match(')')
   ElseIf e_tok = 'id' Then
      ' Function call.
      fun = e_spelling
      Call e_nxt
      Call e_match('(')
      n = e_prs(1)
      Call e_match(')')
      n = e_function(fun, n)
   Else
      If Not e_error Then
         MsgBox 'syntax error, token = '' + e_spelling + '''
         e_error = -1
      End If
              Loop While is_id%
          e_input = c + e_input
    
          ' Check for keyword.
          is_keyword = -1
          Select Case LCase$(e_spelling)
             Case 'and'
             Case 'eqv'
             Case 'imp'
             Case 'mod'
             Case 'not'
             Case 'or'
             Case 'xor'
             Case Else: is_keyword = 0
          End Select
          If is_keyword Then
             e_tok = LCase$(e_spelling)
          End If
    
       ' Check for <=, >=, <>.
       Case '<', '>'
          e_tok = c
          c = Left$(e_input, 1)
          If c = '=' Or c = '>' Then
             e_tok = e_tok + c
             e_input = Mid$(e_input, 2)
          End If
    
       ' Single character token.
       Case Else
          e_tok = c
   End Select
 
   If e_spelling = '' Then
       e_spelling = e_tok
   End If
End Sub
 
' e_match
'   Check the current token and skip past it.
'   This function helps with syntax checking.
Sub e_match (token As String)
   If Not e_error And e_tok <> token Then
      MsgBox 'expected ' + token + ', got '' + e_spelling + '''
      e_error = -1
   End If
   Call e_nxt
End Sub
Press F5 to run the program. Type an expression into Text1 such as '1+2*3^4'. Click Command1.
0
0 / 1 / 3
Регистрация: 27.03.2012
14.08.2007, 11:58
Либо посмотри как это делают через Excel
http://www.freevbcode.com/ShowCode.Asp?ID=1048

или используя Microsoft Script Control
http://www.freevbcode.com/ShowCode.Asp?ID=1524

Сам я такими вещами не занимался, поэтому посоветовать что-то не могу.
0
0 / 0 / 0
Регистрация: 14.08.2007
Сообщений: 7
14.08.2007, 13:28  [ТС]
Пример с Microsoft Script Control
мне очень понравился. Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.08.2007, 13:28
Помогаю со студенческими работами здесь

Программа которая определяет какая буква введена
Напишите программу, которая проверит, является ли данный пользовательский символ маленькой или большой буквой, а затем отобразит...

Событие KeyPress у TextBox. Как сделать один формат для различных TextBox?
Есть много TextBox'ов, в которые нужно вводить только числа, и больше никаких символов. На просторах сайта нашел данный код который почти...

Добавить в файл информацию, которая была введена в текстовое поле
Здравствуйте нужна ваша помощь,готовлюсь к сесии,а она уже в пятницу ,программа в visual basik 6.0 написать не совсем понял как,нужен будет...

Получить из таблицы номер поступления по имени товара и дате которая введена в datetimepicker
Знатоки возник вопрос с датой. Я хочу получить из таблицы номер поступления по имени товара и дате которая введена в datetimepicker. ...

Парсинг формулы или как взять из TextBox формулу для дальнейшего расчета в программе
Нужно забить формулу в TextBox и посчитать значение функции в точках. Как посчитать разберусь, но как вводить в TextBox формулы вида...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru