Wprowadzanie funkcji, wielomianu przez użytkownika

0

Witam. Mam problem, mianowicie nie wiem jak zrobić aby użytkownik mógł wpisywać daną f(x)(np.2*x^4) do textboxa a następnie ta była analizowana w tej funkcji.

 
  public   double obliczanie(double xp, double xk, int n, FUNK funk)
        {
            double dx, calka;

            dx = (xk - xp) / (double)n;

            calka = 0;

            for (int i = 1; i < n; i++)
            {
                calka += funk(xp + i * dx);
            }
            calka += (funk(xp) + funk(xk)) / 2;
            calka *= dx;

            return calka; 
        }
0

Musisz napisać parser.

0

Parser jest rozwiązaniem dość ciężkim w implementacji, jeżeli dozwolone są tylko wielomiany to proponowałbym dynamicznie generowany interfejs (np. w zależności od stopnia wielomianu generujesz określoną ilość textboxów. Przy odrobinie zacięcia można to zrobić w sposób nawet ładnie wyglądający). I następnie interpretować wartości w textboxach (które będą zwykłymi liczbami).

0

@szogun1987, a na jakiej podstawie dynamicznie wygenerujesz ten interfejs? Musisz najpierw znać wielomian, żeby wygenerować dla niego interfejs, więc jak użytkownik ma podać ten wielomian?

Na upartego można jakimś może Regexem zamienić wyrażenie na kod C# i dynamicznie skompilować. W końcu 2*x^4 to po prostu 2 * Math.Pow(x, 4). Tylko w przypadku bardziej skomplikowanych wyrażeń to się pewno nie uda.

1

1 TextBox (a jeszcze lepiej numeric/updown) - stopień wielomianu na jego zmianę generujemy n+1 textboxów (albo numericupdownów) przedzielonych etykietami do wprowadzenia współczynników.
W ten sposób odpada nam dużo problemów. Co zrobić gdy tekst będzie źle sformatowany? Czy tolerować znaki białe jeżeli tak to które z nich? Oczywiście podejście z generowaniem interfejsu komplikuje się szybko wraz ze zwiększeniem gammy obsługiwanych przez nas funkcji, ale dla samych wielomianów na potrzeby szkolno/dydaktyczne wydaje mi się być najwygodniejszym rozwiązaniem.

0

Ja bym wykorzystał jakiś Parser do wyrażeń Lambda: np. http://simproexpr.codeplex.com/

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