Sprawdzanie czy wprowadzony ciąg znaków to równanie

Odpowiedz Nowy wątek
2018-12-11 16:00
0

Hej wszystkich,

Chciałem się trochę pobawić z równaniami w C#. Postanowiłem, że na samym początku sprawdzę czy użytkownik podał równanie x + 3 = 5 czy coś innego al;sfdsajlkjf.
Stworzyłem do tego tablicę, która zawiera "znaki matematyczne"(myślę, że to jest niezłe podejście):

private static readonly char[] mathSings = { '+', '-', '*', '/', ':', '=' };

Metodą klasy String sprawdzam czy to jest równanie czy nie. I tutaj pytanie jak najlepiej to sprawdzić, bo

if(input.Contains(mathSings[0]) || input.Contains...)

nie jest dobrym rozwiązałem; chciało by się jakoś przeiterować tą tablicę, ale od dłuższego czasu nie mam pomysłu jak.

Macie jakieś ciekawe pomysły do tego? Albo też jakieś inne znacznie lepsze rozwiązanie niż to?

z góry dzięki za pomoc
pozdrawiam

Pozostało 580 znaków

2018-12-11 16:01
0

Aby mieć 100% pewności, powinieneś równanie sparsować - jeśli się uda, no to siłą rzeczy jest prawidłowe ;-)
Szukaj informacji pod kątem c# math parser.


Pozostało 580 znaków

2018-12-11 17:46
0

np. tak Link do arta na 4p


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
edytowany 1x, ostatnio: abrakadaber, 2018-12-11 23:01
Widzę, że to jest bardzo uparty link i nie chce się wrzucić, ale znalazłem stronę, dzięki poczytam. - Barteker 2018-12-11 17:55

Pozostało 580 znaków

2018-12-11 19:10
0

A gdyby to jakoś ugryźć za pomocą Roslyn?

using Microsoft.CodeAnalysis.CSharp.Scripting;

static void Main()
{
    var Equation = "2*x+34";
    Console.WriteLine($"Chyba jest równaniem: {IsExpressionable(Equation)}");
}

static bool IsExpressionable(string Equation)
{
    var Expression = $"int x = 5; return {Equation};";
    Task<int> Evaluate;
    try
    {
        Evaluate = CSharpScript.EvaluateAsync<int>(Expression);
    }
    catch
    {
        return false;
    }
    Console.WriteLine(Evaluate.Result);
    return Evaluate.IsCompletedSuccessfully;
}

44
Chyba jest równaniem: True

A dla:
var Equation = "2*x+3;4";

Chyba jest równaniem: False

Dla wielu zmiennych po prostu zmieniamy:

var Equation = "2*x+3 + 4*y";

oraz

var Expression = $"int x = 5; int y = 2; return {Equation};";

21
Chyba jest równaniem: True

:D

edytowany 5x, ostatnio: WeiXiao, 2018-12-11 19:19
int x = 5; nie wygląda jak typowe równanie matematyczne ;-p - Patryk27 2018-12-11 20:51
@Patryk27: to jest zmienna, a prawie równanie jest w zmiennej Equation :P - WeiXiao 2018-12-11 20:53

Pozostało 580 znaków

2018-12-11 19:36
Skromny Kura
0

A ja nie mam pomysłu jak zbudować rakietę kosmiczną - taki żart

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0