powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как вычислить формулу если она в тестовом формате
6 сообщений из 6, страница 1 из 1
Как вычислить формулу если она в тестовом формате
    #39588715
Как вычислить формулу если она в тестовом формате (vb). Например сохранена в текстовом файле:
"(25+20)/3"
...
Рейтинг: 0 / 0
Как вычислить формулу если она в тестовом формате
    #39588748
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я юзаю Dynamic Linq

http://blog.vavstech.com/2014/08/systemlinqdynamic-documentation.html
тут есть примеры
...
Рейтинг: 0 / 0
Как вычислить формулу если она в тестовом формате
    #39588759
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Microsoft.CSharp.CSharpCodeProvider cscp = new Microsoft.CSharp.CSharpCodeProvider();
System.CodeDom.Compiler.CompilerResults cr = cscp.CompileAssemblyFromSource(new System.CodeDom.Compiler.CompilerParameters(),
@"
using System;
namespace MyLib
{                
    public class MyMath
    {                
        public static int MyFunc0s() { return (25+20)/3; }
        public static double MyFunc3d(double x, double y, double z) { return (x + y) / z; }
    }
}
");

Type myMath = cr.CompiledAssembly.GetType("MyLib.MyMath");
var myFunc0s = (Func<int>)Delegate.CreateDelegate(typeof(Func<int>), myMath.GetMethod("MyFunc0s"));
var res1 = myFunc0s();
System.Diagnostics.Debug.WriteLine(res1);
var myFunc3d = (Func<double, double, double, double>)Delegate.CreateDelegate(typeof(Func<double, double, double, double>), myMath.GetMethod("MyFunc3d"));
var res2 = myFunc3d(25, 20, 3);
System.Diagnostics.Debug.WriteLine(res2);
...
Рейтинг: 0 / 0
Как вычислить формулу если она в тестовом формате
    #39588811
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
...
Рейтинг: 0 / 0
Как вычислить формулу если она в тестовом формате
    #39588814
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
double v = (double)new System.Xml.XmlDocument().CreateNavigator().Evaluate(System.Xml.XPath.XPathExpression.Compile(textBox4.Text.Replace("/", "div ")));
...
Рейтинг: 0 / 0
Как вычислить формулу если она в тестовом формате
    #39590796
Всем большое спасибо!!! Я сам нашёл решение
Код: vbnet
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.
Dim РегВырУмнДел As String = "(^\-)?[0-9]+[\/\*][0-9]+"
    Dim РегПлюсМинус As String = "(^\-)?[0-9]+[\+\-][0-9]+"
    Dim РегВСкобках As String = "\([\/\*\+\-\d]+\)"
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MsgBox(Вычисление("(5+56/7)-9*(10/5+(20-7))-(7)*60"))
    End Sub

    Public Function Вычисление(ByVal Формула As String) As String
        Формула = Формула.Replace(" ", "").Replace("+-", "-").Replace("--", "+")
        Do Until Regex.Matches(Формула, РегВСкобках).Count = 0
            Dim Выражение As String = Regex.Matches(Формула, РегВСкобках)(0).Value
            Dim ВырБезСкобок As String = Выражение.Replace("(", "").Replace(")", "")

            Формула = Strings.Replace(Формула, Выражение, ВычислениеВыражения(ВырБезСкобок))
        Loop

        If Regex.Matches(Формула, РегВСкобках).Count = 0 Then
            Формула = ВычислениеВыражения(Формула)
        End If

        Return Формула
    End Function


    Private Function ВычислениеВыражения(ByVal Выражение As String) As String '' Вычисление выражения без скобок
        Выражение = Выражение.Replace(" ", "").Replace("+-", "-").Replace("--", "+")
        If Regex.Matches(Выражение, РегВырУмнДел).Count > 0 Then
            Do Until Regex.Matches(Выражение, РегВырУмнДел).Count = 0
                Dim СокрВыр As String = Regex.Matches(Выражение, РегВырУмнДел)(0).Value
                Dim зн As Decimal
                If InStr(СокрВыр, "/") Then
                    Dim Делимое As Decimal = СокрВыр.Split("/")(0)
                    Dim Делитель As Decimal = СокрВыр.Split("/")(1)
                    зн = Делимое / Делитель
                Else
                    Dim Множитель1 As Decimal = СокрВыр.Split("*")(0)
                    Dim Множитель2 As Decimal = СокрВыр.Split("*")(1)
                    зн = Множитель1 * Множитель2
                End If
                Выражение = Strings.Replace(Выражение, СокрВыр, зн)
            Loop
        End If

        If Regex.Matches(Выражение, РегПлюсМинус).Count > 0 Then
            Do Until Regex.Matches(Выражение, РегПлюсМинус).Count = 0
                Dim СокрВыр As String = Regex.Matches(Выражение, РегПлюсМинус)(0).Value
                Dim зн As Decimal
                If InStr(СокрВыр, "+") Then
                    Dim Слогаемое1 As Decimal = СокрВыр.Split("+")(0)
                    Dim Слогаемое2 As Decimal = СокрВыр.Split("+")(1)
                    зн = Слогаемое1 + Слогаемое2
                Else

                    If СокрВыр.Split("-")(0) = "" Then
                        Dim Вычитамемое As Decimal = СокрВыр.Split("-")(1)
                        Dim Вычислитель As Decimal = СокрВыр.Split("-")(2)
                        зн = -Вычитамемое - Вычислитель
                    Else
                        Dim Вычитамемое As Decimal = СокрВыр.Split("-")(0)
                        Dim Вычислитель As Decimal = СокрВыр.Split("-")(1)
                        зн = Вычитамемое - Вычислитель
                    End If
                End If
                Выражение = Strings.Replace(Выражение, СокрВыр, зн)
            Loop
        End If
        Return Выражение

    End Function
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как вычислить формулу если она в тестовом формате
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]