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

http://blog.vavstech.com/2014/08/systemlinqdynamic-documentation.html
тут есть примеры
...
Рейтинг: 0 / 0
23.01.2018, 00:04
    #39588759
LR
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
23.01.2018, 07:17
    #39588811
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычислить формулу если она в тестовом формате
...
Рейтинг: 0 / 0
23.01.2018, 07:23
    #39588814
fortibransa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычислить формулу если она в тестовом формате
Код: c#
1.
double v = (double)new System.Xml.XmlDocument().CreateNavigator().Evaluate(System.Xml.XPath.XPathExpression.Compile(textBox4.Text.Replace("/", "div ")));
...
Рейтинг: 0 / 0
25.01.2018, 12:07
    #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
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как вычислить формулу если она в тестовом формате / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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