Przeksztalcenie lini tekstu w działanie wykonywalne

0

Witam na początku ;)

Oto problem:

Dostaje dwie linijki z zewnatrz w takiej postaci:

2 3 5
sin(x)*x

I chcialbym aby druga linijka, dowolnie podany wzor wykonywal dzialanie. W tym wypadku x=2

jak to zrobic? Ciezko mi to wytlumaczyc. Cos w roli kalkulatora, gdzie podaje np: sin(2)*2 ---> enter i on mi nizej podaje wynik.

Pomozcie prosze:)

Całe zadanie: (Potrzebne mi jako jedno z 5 na zaliczenie semestru ;))

Zadania związane z funkcjami były częste w liceum. W związku z powolnym zatracaniem umiejętności obliczeniowych na rzecz programistycznych, chcemy napisać program, który rozwiązywałby za nas zadania matematyczne.
Załóżmy, że chcemy obliczać wartości funkcji, miejsca zerowe oraz pochodne w punkcie.

Możliwe operacje, to +, -, *, /, ^ - potęga, ln() - logarytm naturalny, sin() - sinus, cos() - kosinus

UWAGA: Operator ma najwyższy priorytet; *, / mają średni priorytet; +, - mają najmniejszy priorytet. Operator jest prawostronnie łączny (czyli 234 = 2(34)), reszta operatorów jest lewostronnie łączna.

Dane wejściowe

Pobierać będziemy dwie linie. W pierwszej będą podane trzy liczby rzeczywiste a, c, d. W drugiej linni będzie podana funkcja f(x). Wiadomo, że f(c)*f(d)<0 i na tym przedziale jest ciągła. Ponadto w f(x) nie ma operatora unarnego minus (-).

Dane wyjściowe

Należy wypisać 3 linie w każdej linii jedną liczbę będącą:

  • w pierwszej linii f(a);
  • w drugiej linii miejsce zerowe f(x), które zawiera się pomiędzy liczbali c i d;
  • w trzeciej linii pochodną funkcji f w punkcie a.

W przypadku braku rozwiązania można wpisać NIE. Wynik może różnić się od wzorcowego o 10-6.

Przykład

Wejście:
1 2 4.1
sin(x)*x

Wyjście:
0.8414709848079
3.14159265
NIE

0

google + ONP

0

Typowa analiza leksykalna. Gramatyka dla podstawowych 4 operatorów (napisana z palca, więc może gdzieś się machnąłem):
<wyrażenie> = <wyrażenie>+<składnik> | <wyrażenie> - <składnik> | <składnik> | -<składnik>
<składnik> = <czynnik> | <składnik>*<czynnik> | <składnik>/<czynnik>
<czynnik> = <liczba> | (<wyrażenie>) | (-<wyrażenie>)
<liczba> = <cyfra> | <cyfra><liczba>
Teraz tylko zbudować do tego odpowiednie funkcje rekurencyjnie się wywołujące.

0

Fajna odpowiedz, gdybym znalazl bym nie pisal. Ktos bardziej konkretny moze napisaccos bardziej konkretnego?

Dziekuje za odpowiedz wyzej:)

Tylko jak tutaj zrobic uzycie sinow logarytmow i poteg?

0

<wyrażenie> = <wyrażenie>+<składnik> | <wyrażenie>-<składnik> | <składnik> | -<składnik> |
<składnik> = <czynnik> | <składnik>*<czynnik> | <składnik>/<czynnik>
<czynnik> = <potężnik> | <potężnik>^<czynnik>
<potężnik> = <liczba> | (<wyrażenie>) | (-<wyrażenie>) | <nazwa>(<wyrażenie>)
<liczba> = <cyfra> | <cyfra><liczba>
<nazwa> = <litera> | <litera><nazwa>

Tak chyba powinno być dobrze.

0

A jak to przelozyc na C++? Nie ma jakiegos polecenia w jakiejs bibliotece ktore to po prostu przerobi? Tak jak dzialaja niektore kalkulatory, wpisujemy

3*3+4-2 --> Enter

I pokazuje 11

0

W JS jest w Delphi w bibliotece Jedi jest, w C/C++ na ile wiem nie ma.

0

http://www.gnu.org/software/libmatheval/ jeśli ma być JS to np V8

0

W C++.

Ktos ma jakis pomysl jak to przerobic na szybkiego?

A moze ktos zna inna droge, zeby wykonac ten program?

0

Zagryźć zęby, zakasać rękawy i pisać :P. Szybkiego sposobu nie znam, tylko napisanie analizatora składni mi tu do głowy przychodzi.

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